sql >> Database >  >> RDS >> Oracle

Verklaring verhogen

Nee. Het blok als geheel wordt teruggedraaid als het mislukt, maar de raise statement op zichzelf voert geen rollback uit.

Dit blok mislukt bijvoorbeeld en wordt impliciet teruggedraaid (precies alsof het een SQL insert is enz.):

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

Maar dit blok wordt niet teruggedraaid, ook al is er een raise erin:

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. Oracle-slaapstand ORA-01461 CLOB

  2. Groeperen op en kolommen toevoegen

  3. Io-uitzondering:Oracle Error ORA-12650 na het upgraden van Oracle naar 12g

  4. Configuratietabellen gebruiken om de werkelijke workflow te definiëren