Oracle
 sql >> база данни >  >> RDS >> Oracle

Изявление за повишаване

Не. Блокът като цяло ще бъде върнат при повреда, но raise операторът сам по себе си не извършва връщане назад.

Например, този блок се проваля и се връща имплицитно (точно както ако беше SQL insert и т.н.):

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

Но този блок не се връща обратно, въпреки че има raise вътре в него:

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. Картографирането на съставен ключ с Hibernate създава необработено поле в Oracle

  2. Кой е най-добрият начин за предварително компилиране на JSP с помощта на Ant

  3. Изберете всеки ред и го вмъкнете в друга таблица

  4. 5 начина за актуализиране на данни с подзаявка в Oracle SQL

  5. SQLPlus AUTO_INCREMENT Грешка