Чего я пытаюсь достичь?
- Я хотел бы скопировать Oracle процедур от одного пользователя к другому, используя PL / SQL.
- Я хотел бы скопировать все процедуры, в том числе с ошибками компиляции.
Где я застрял?
- После того, как EXECUTE IMMEDIATE создаст процедура с ошибками компиляции, блок PL / SQL больше не выполняется.
- Нет исключения!
Следующие два блока кода демонстрируют проблему. Первый блок выполняется как ожидалось. Второй блок не выполняется полностью. Процедура p3 с ошибкой компиляции не является проблемой. Моя проблема в том, что процедура p4 не создана.
-- creates procedure p1 and p2
BEGIN
EXECUTE IMMEDIATE 'create or replace procedure p1 is begin null; end;';
EXECUTE IMMEDIATE 'create or replace procedure p2 is begin null; end;';
dbms_output.put_line('Done!');
END;
-- creates only procedure p3 and exits with no error
BEGIN
EXECUTE IMMEDIATE 'create or replace procedure p3 is begin null end;'; -- compilation error (missing semicolon)
EXECUTE IMMEDIATE 'create or replace procedure p4 is begin null; end;';
dbms_output.put_line('Done!');
END;