exécute la requête de mise à jour dans SQL Server, mais pas dans Oracle
-
28-09-2019 - |
Question
J'ai besoin cette requête de mise à jour pour fonctionner sur les SQL Server et Oracle. Version Notre Oracle est 10.2 si cette question. Quand je lance la requête dans Oracle I get « erreur ORA-00933: commande SQL pas correctement pris fin ». Que dois-je faire pour obtenir cette option pour exécuter 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
)
La solution
L'instruction UPDATE ... de la syntaxe est pas valide pour Oracle. Vous aurez besoin d'utiliser une sous-requête, comme ceci:
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
)
Autres conseils
La syntaxe de requête sous la co-connexe est un peu différent dans 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)
Vous devrez réécrire complètement votre requête pour Oracle. Certaines choses qui ne fonctionnent pas dans Oracle 10.2:
- clause de
from
dans la phrase deupdate
(vous devez écrire un subselect pour cela) - schéma
dbo
, sauf si vous avez réellement un utilisateurdbo
nommé dans l'oracle propriétaire de la table que vous essayez de mettre à jour
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow