sql >> Databasteknik >  >> RDS >> Oracle

Höj uttalande

Nej. Blocket som helhet kommer att återställas vid misslyckande, men raise uttalandet på egen hand utför inte en återställning.

Till exempel misslyckas detta block och rullas implicit tillbaka (exakt som om det var en SQL insert 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

Men detta block rullas inte tillbaka, även om det finns en raise inuti den:

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.



  1. Ansluter Linux och UNIX till Azure SQL Data Warehouse

  2. jsp jstl sql konstigt beteende med som i mysql

  3. Hur får jag meningsfulla felmeddelanden från MySQL med PDO-förberedda uttalanden?

  4. Bind_param Non-Object Error w/ mysqli