Запрос обновления работает на SQL Server, но не в Oracle
-
28-09-2019 - |
Вопрос
Мне нужна этот запрос обновления для запуска на обоих SQL Server и Oracle. Наша версия Oracle 10.2, если это имеет значение. Когда я запускаю запрос в Oracle, я получаю «Ошибка ORA-00933: SQL команда не закончилась». Что мне нужно сделать, чтобы записаться в Oracle?
UPDATE dbo.tableUpdate
SET fieldA = tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA
)
Решение
Обновление ... Из синтаксиса недействителен для Oracle. Вам нужно будет использовать подзапрос, как это:
UPDATE dbo.tableUpdate t
SET t.fieldA = (SELECT tt.fieldB
FROM dbo.tableTranslate tt
WHERE tt.fieldC = t.fieldC
AND tt.fieldD = t.fieldA
)
WHERE 1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE tblTrans.fieldC = t.fieldC
AND tblTrans.fieldD = t.fieldA
)
Другие советы
Синтаксис для совместного подпрограммы немного отличается в Oracle.
UPDATE dbo.tableUpdate
SET fieldA = (select tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA)
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA)
Вам нужно будет полностью переписать ваш запрос на Oracle. Некоторые вещи, которые не будут работать в Oracle 10.2:
from
пункт вupdate
Приговор (вам нужно будет написать подселение для этого)dbo
схема, если у вас на самом деле нет по имени пользователяdbo
в Oracle, владеющий на столом, которую вы пытаетесь обновить
Не связан с StackOverflow