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
)
È stato utile?

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:

  1. clausola from a frase update (sarà necessario scrivere un subselect per questo)
  2. schema dbo, a meno che in realtà hanno un utente chiamato dbo in Oracle possedere la tabella che si sta tentando di aggiornare
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top