Pregunta

necesito esta consulta de actualización para funcionar tanto con SQL Server y Oracle. Nuestra versión de Oracle es 10.2 si lo que importa. Cuando ejecuto la consulta en Oracle me sale "error ORA-00933: comandos SQL no terminó correctamente". ¿Qué necesito hacer para conseguir esto para ejecutar en 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
)
¿Fue útil?

Solución

El ACTUALIZACIÓN DE ... sintaxis no es válida para Oracle. Usted tendrá que utilizar una subconsulta, como esto:

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
        )

Otros consejos

La sintaxis para sub consulta co-relacionado es un poco diferente en 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)

Usted tendrá que reescribir por completo su consulta para Oracle. Algunas cosas que no va a funcionar en Oracle 10.2:

  1. cláusula from en la frase update (que tendrá que escribir una subselección para esto)
  2. esquema dbo, a menos que realmente tiene un nombre de usuario dbo en el oráculo de ser dueño de la tabla que está intentando actualizar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top