Query1-query2

goluma
25 de Agosto del 2004
Vuelvo a mandar la consulta:

Tengo 2 query que hacen modificaciones de tablas de base de datos. La segunda se debe ejecutar después de que se ejecuta la primera.
Yo quiero automatizar estas queries de la siguiente manera:

query1;
commit;
query2;
commit;

y mi duda es saber si lo hago de esta manera, la query2 se ejecuta una vez que termina la primera
(junto con el commit).
Si no es así me podrían decir como se hace.

Gracias.


Rodolfo Reyes
25 de Agosto del 2004
El problema de que hagas:

query1;
commit;
query2;
commit;

Es que al hacer el insert del query1 y despues al hacer el insert del query2 falla por algun problema, dejas la transacción a medias. Lo mejor es que hagas un unico commit al final. Asi solo efectuara el commit si los dos insert tuvieron exito.

La forma en como se resuelven ho se hacen los commit depende un poco del manejador de base de datos que este utilizando.

goluma
25 de Agosto del 2004
Gracias por responder.
Te digo que cada query hace un delete en tablas diferentes, es decir la query1 hace un delete de la tabla1 y la query2 hace un delete de la tabla2
La base de datos es Oracle de versión 7. No puedo hacer un commit unico ya que sino actualizaria una sola tabla. Tenes otra idea de como se debe hacer.

Muchas gracias.

Rodolfo Reyes
25 de Agosto del 2004
Todo lo contrario. Oracle es una base de datos transaccional por excelencia. Es mas en oracle puedes abrir una seción y pasar todo el día haciendo Insert, deletes y Updates, y hasta el final hacer un Unico commit para toda la transacción. Estoy muy seguro de esto porque tengo varios años de trabajar todos los días con sistemas que utilizan bases de datos Oracle.

Si estas utilizando sintaxis de PL/SQl puedes hacer lo siguientes:

begin
--Delete uno
delete tabla1 where ...

--Delete dos
delete tabla2 where...

--hace el commit solo si los dos deletes no dan errores.
commit;

--En caso de error se hace un rollback
exception
when others then
rollback;

end;


goluma
25 de Agosto del 2004
Gracias lo voy a probar