sql >> Base de Datos >  >> RDS >> Oracle

Levantar declaración

No. El bloque en su conjunto se revertirá en caso de falla, pero el raise declaración por sí sola no realiza una reversión.

Por ejemplo, este bloque falla y se revierte implícitamente (exactamente como si fuera un insert de SQL etc.):

begin
    insert into demo(id) values(1);
    dbms_output.put_line(sql%rowcount || ' row inserted');
    raise program_error;
exception
    when program_error then raise;
end;

ERROR at line 1:
ORA-06501: PL/SQL: program error
ORA-06512: at line 6

SQL> select * from demo;

no rows selected

Pero este bloqueo no se deshace, aunque haya un raise dentro:

begin
    begin
        insert into demo(id) values(1);
        dbms_output.put_line(sql%rowcount || ' row inserted');
        raise program_error;
    exception
        when program_error then
            dbms_output.put_line('Raising exception');
            raise;
    end;
exception
    when program_error then null;
end;

1 row inserted
Raising exception

PL/SQL procedure successfully completed.

SQL> select * from demo;

        ID
----------
         1

1 row selected.