Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Angkat pernyataan

Tidak. Blok secara keseluruhan akan dibatalkan jika gagal, tetapi raise pernyataan sendiri tidak melakukan rollback.

Misalnya, blok ini gagal dan secara implisit digulung kembali (persis seolah-olah itu adalah insert SQL dll):

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

Tapi blok ini tidak digulung kembali, meski ada raise di dalamnya:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemberitahuan perubahan tabel Oracle di Java

  2. Oracle menganggap string kosong sebagai NULL sementara SQL Server tidak - bagaimana cara terbaik menangani ini?

  3. gabungan batin implisit - apakah mereka sama?

  4. Tolong bantu dengan SQLPLUS? Bagaimana cara membuat startup SQLPLUS dengan DEFINE `OFF` pada awalnya?

  5. Memasukkan ke Oracle Nested Table di Java