Почему при возникновении ошибки не выполняется код до строки с ошибкой?
Намеренно пытаюсь изменить значение notice_period_in_days, чтобы посмотреть, какую ошибку получу.
Вот PL/SQL код:
set serveroutput on;
declare
notice_period_in_days CONSTANT NUMBER := 60;
begin
dbms_output.put_line (notice_period_in_days);
notice_period_in_days := 50;
dbms_output.put_line (notice_period_in_days);
end;
Это вызывает, как и ожидалось, ошибку:
PLS-00363: expression 'NOTICE_PERIOD_IN_DAYS' cannot be used as an assignment target
Но почему первая строка вывода dbms_output.put_line не выполняется? Ожидаю ошибку только в той строке, где присваивается новое значение для notice_period_in_days.
Как можно это объяснить?
Свободный перевод вопроса What happens if I edit a constant value in PL SQL? от участника @Surender Raja
Ответы (1 шт):
После отправки блока на сервер БД, он сначала компилируется в выполняемый интерпретатором PL/SQL байт-код, и только если никаких ошибок при этом не возникнет, блок будет запущен на выполнение.
Если посмотреть полное сообщение об ошибке:
SQL> declare n constant int := 0;
2 begin n := 10;
3 end;
4 /
begin n := 10;
*
ERROR at line 2:
ORA-06550: line 2, column 7:
PLS-00363: expression 'N' cannot be used as an assignment target
ORA-06550: line 2, column 7:
PL/SQL: Statement ignored
, то первая строка ошибки:
$ oerr ora 6550
06550, 00000, "line %s, column %s:\n%s"
// *Cause: Usually a PL/SQL compilation error.
говорит, что произоша ошибка компиляции. То есть, блок вообще не был запущен на выполнение.