Tengo una consulta que funciona bien en MySQL, pero cuando la ejecuto en Oracle obtengo el siguiente error:
Error de SQL: ORA-00933: el comando SQL no finalizó correctamente
00933. 00000 - "El comando SQL no finalizó correctamente"
La consulta es:
UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';
sql
oracle
inner-join
ora-00933
usuario169743
fuente
fuente
Respuestas:
Esa sintaxis no es válida en Oracle. Puedes hacerlo:
O tal vez puedas hacer esto:
Depende de si Oracle considera que la vista en línea se puede actualizar ( ser actualizable para la segunda declaración depende de algunas reglas enumeradas aquí ).
fuente
Utilizar este:
fuente
merge into table 1 t
etc.ON
,trg
está el alias de la tabla maestra (tablatable1
"externa" según su lógica) y hacesrc
referencia alUSING
grupo ("tabla interna" según su lógica). Pero sí, probablemente podría haber sido referenciado mejor, pero pude seguirlo.MERGE
conWHERE
cláusula:Necesita la
WHERE
cláusula porque las columnas a las que se hace referencia en laON
cláusula no se pueden actualizar.fuente
fuente
No use algunas de las respuestas anteriores.
Algunos sugieren el uso de SELECT anidado, no lo hagas, es insoportablemente lento. Si tiene muchos registros para actualizar, use unirse, así que algo como:
Vea este enlace para más detalles. http://geekswithblogs.net/WillSmith/archive/2008/06/18/oracle-update-with-join-again.aspx .
Además, asegúrese de que haya claves principales en todas las tablas a las que se une.
fuente
Como se indica aquí , la sintaxis general para la primera solución propuesta por Tony Andrews es:
Creo que esto es interesante, especialmente si desea actualizar más de un campo.
fuente
La siguiente sintaxis funciona para mí.
fuente
SET
estaba haciendo unREPLACE
y estaba tratando de dejar una cadena en particular en la columna, resulta que Oracle trata''
como nulo, y este campo no se pudo anular. Pensé que la sintaxis era simplemente actualizar una tabla temporal en lugar de la real, pero estaba equivocado.Usando la descripción en lugar de desc para table2,
fuente
Funciona bien oráculo
fuente
t1.First_Name = t2.FirstName, t1.Last_Name = t2.LastName
en una tabla después de hacerla coincidir en la columna "UserName" (t1.UserName = t2.UserName
) para recuperar su nombre de una tabla llamada UserInfo (select * from UserInfo) t2
). La base de datos era tal que usaba UserName como clave principal para UserInfo en todas partes, en lugar de colocar FirstName y LastName en la tabla, directamente. Esto solucionó eso!fuente
fuente
Solo como una cuestión de integridad, y como estamos hablando de Oracle, esto también podría hacerlo:
fuente
A y B son campos de alias, no necesita señalar la tabla.
fuente
fuente