corre Aggiornamento query in SQL Server, ma non in Oracle
-
28-09-2019 - |
Domanda
Ho bisogno di questo query di aggiornamento per funzionare sia su SQL Server e Oracle. Il nostro versione Oracle è 10,2 se quello che conta. Quando eseguo la query in Oracle ottengo "errore ORA-00933: comando SQL non adeguatamente finita". Che cosa devo fare per ottenere questo per l'esecuzione in 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
)
Soluzione
L'UPDATE ... FROM sintassi non è valida per Oracle. Sarà necessario utilizzare una sottoquery, in questo modo:
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
)
Altri suggerimenti
La sintassi per domanda secondaria co-correlato è un po 'diverso in 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)
Sarà necessario riscrivere completamente la query per Oracle. Alcune cose che non funziona in Oracle 10.2:
- clausola
from
a fraseupdate
(sarà necessario scrivere un subselect per questo) - schema
dbo
, a meno che in realtà hanno un utente chiamatodbo
in Oracle possedere la tabella che si sta tentando di aggiornare
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow