sql >> Databáze >  >> RDS >> Oracle

Zvýšit prohlášení

Ne. Blok jako celek bude při selhání vrácen zpět, ale raise příkaz sám o sobě neprovádí vrácení zpět.

Například tento blok selže a je implicitně vrácen zpět (přesně jako by to byl SQL insert atd.):

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

Tento blok však není vrácen zpět, i když došlo ke raise uvnitř:

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. Jak zkopírujete záznam v tabulce SQL, ale vyměníte jedinečné ID nového řádku?

  2. Jak uložit odpověď z mého serveru a jak získat přístup k těmto datům

  3. SQL příkaz MERGE pro aktualizaci dat

  4. Dialekt SQL není nakonfigurován (Phpstorm)