Запрос обновления выполняется в SQL Server, но не в Oracle
Мне нужно, чтобы этот запрос обновления выполнялся как на SQL Server, так и на Oracle. Наша Версия Oracle - 10.2, если это имеет значение. Когда я выполняю запрос в Oracle, я получаю "ERROR ORA-00933: SQL command not properly ended". Что мне нужно сделать, чтобы запустить его в 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
)
3 ответа:
Обновление...Синтаксис FROM недопустим для 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, владеющего таблицей, которую вы пытаетесь обновить