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
)
Était-ce utile?

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:

  1. clause de from dans la phrase de update (vous devez écrire un subselect pour cela)
  2. schéma dbo, sauf si vous avez réellement un utilisateur dbo 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
scroll top