Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Podnieś oświadczenie

Nie. Blok jako całość zostanie wycofany w przypadku niepowodzenia, ale raise samo oświadczenie nie powoduje wycofania.

Na przykład ten blok kończy się niepowodzeniem i jest niejawnie wycofywany (dokładnie tak, jakby był to SQL insert itp.):

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

Ale ten blok nie jest cofany, mimo że występuje raise w środku:

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. Jak znaleźć czas wykonania zapytania w Oracle SQL Developer?

  2. Użyj ciągu zawiera funkcję w zapytaniu Oracle SQL

  3. Jak wybrać z kolumny typu obiektu w Oracle 11g?

  4. Oracle alter table niewystarczające uprawnienia

  5. Jak profilować wydajność procedury składowanej Oracle od początku do końca?