Hacer rollback

Resulta que debo transferir datos de una aplicación a otra, el problema está en que si por algún error falla la transferencia debo hacer rollback. La pregunta es como hago rollback en oracle, he probado esta instrucción:
set autocommit off;
delete * from tabla;
commit;
Pero da el error ora-00922

3 respuestas

Respuesta
1
La instruccion para hacer rollback es: ROLLBACK;
Pero lo mejor que podrías hacer es un pequeño procedimiento PL/SQL, para controlar los errores, p.ej:
Begin
delete * from tabla;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
Esto significa que si todo va bien hara el commit y si falla por algo se ira por la excepcion y hara rollback;
Respuesta
1
bien compañero es sencillo, el rollback se ejecuta y devuelve las transacciones en todas las tablas hechas desde el último commit realizado, y su sintaxis es simplemente
rollback;
Otra cosa es usar puntos de salvaguarda lo que significa que se hace rollback desde el último punto (es como un marcador) su sintaxis es :
Begin
.----
----
savepoint inicio;
---
insert...
update ...
delete ...
...
Rollback to savepoint inicio
Y devuelve las transacciones desde el savepoint, es de anotar que no se debe ejecutar un commit.
Suerte
Compañero, el asunto es que actualizo, borro e inserto datos desde un sistema en SQL hacia uno en Oracle. Si por alguna razón falla la transferencia desde sql hacia oracle, se debe hacer el rollback. Me dijeron que en oracle el commit no está automático, es decir, que el no hace commit a menos que encuentre esta instrucción, no obstante, estuve haciendo pruebas desconectando el equipo de la red y aún así ejecutaba el comando que le mandaba la aplicación en SQL. Me ayudaría mucho conocer tu opinión con respecto a lo que te planteo.
Interesante, lo que te dijeron del commit es cierto, hay que mirar como haces las actualizaciones en oracle, realmente lo que te recomiendo es crear un procedimiento oracle en la bd que te reciba los parámetros con los cuales vas a hacer la actualización en la bd y así usar el código que te envíe la vez anterior y te da mayor control sobre la información que trabajas en la bd.
Para finalizar, este es el procedimiento que es llamado desde SQL, como verás está en Oracle y tiene el rolback, más no se si orable le haga caso al mismo:
(tnom IN VARCHAR, CTO IN NUMBER, CIA IN VARCHAR) IS
begin
DELETE FROM NMM002 WHERE tnom_tipnom = tnom AND CTO_CODCTO = cto AND cia_codcia = cia;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END PIV_BORRA_CONCEPTOS;
En ese caso no tienes problema ya que no necesitas usar el rollback, puesto que el delete si tiene algún problema (por ejemplo que no encuentre registros o que el que se esté borrando tenga hijos) simplemente no se ejecuta.
Respuesta
Simplemente rollback;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas