Duda gorda insert/update Oracle

SmashingP

Tengo un problema con un update como este, lo pongo en plan sencillo porque las select son monstruosas y demás.

update tablita set (campo1, campo2) = (SELECT XX, YY FROM otratabla)

y ahora pasamos a actualizar más campos de la tabla

update tablita set (campo1, campo2, campo3) = (SELECT XX, YY, ZZ FROM otratabla)

y que pasa, pues que se lia parda "a veces" (cosa que mosquea todavía más) y mete datos en otros campos (el ZZ que lo meta en campo1 por ejemplo).

Ya me pasó una vez una cosa similar en la misma base de datos con otro procedimiento, a la hora de hacer un insert sencillísimo, en el que a la tabla se le añadió un campo más:
se pasó de esto (en la base de datos coincidia el orden)

insert into tabla (campo1, campo2) VALUES (blabla, bleble) 

a esto que no funcionaba

insert into tabla (campo1, campo2, campo3) VALUES (blabla, bleble,bloblo)

¿cómo se solucionó? Pues que en la base de datos, el "orden" de los datos estaba como "campo1, campo3, campo2" y en las insercciones la liaba parda introducciendo datos que no eran O_O (como me pasa ahora con el update en cuestión).
Fue cambiar el insert a

insert into tabla (campo1, campo3, campo2) VALUES (blabla, bloblo,bleble)

y funcionar sin problemas :O.

No sé porqué se da esto la verdad, soy de fp y mis conocimientos por mucho estudio no logro saber cual es la lógica de esto, a mi enseñaron que se deben poner los campos que vas a insertar/updatear para así cerciorarte de que efectivamente estás insertando esos valores en esos campos precisamente. No le veo el sentido a que porque en la base de datos el orden de los datos se vea de X manera influya en esto O_O.

Vosotros que tenéis mucha más experiencia y rodeo a ver si me ilumináis, la base de datos que se utiliza es oracle.

charl1

Mmm desconozco si hay mucha diferencia de sintaxis, pero de lógica diría que no y los dos primeros ejemplos son incorrectos, faltaría indicar que devuelva una fila o hacer la join.

Dicho esto, en una sentencia sql, puedes desordenar los campos, que los valores que le otorgues a cada campo irá donde toca siempre que al sintaxis sea correcta.

Pon el ejemplo porque sino, no te podremos ayudar.

Usuarios habituales

  • charl1
  • SmashingP