Получение ошибки при динамическом выполнении ВЫЗЫВАЕТ ошибку

#oracle #oracle12c

Вопрос:

Я хочу выполнить ошибку ПОВЫШЕНИЯ на основе инструкции SELECT. Я уверен, что это сработает или нет. Если возможно, может ли кто-нибудь помочь с приведенным ниже кодом

 DECLARE A ExcEPTION; V_T VARCHAR2(1000); BEGIN SELECT ' RAISE A ' INTO V_T FROM DUAL; EXECUTE IMMEDIATE V_T; EXCEPTION WHEN A THEN DBMS_OUTPUT.PUT_LINE('ABC'); END ;  

Ответ №1:

Это сработает, но не так, как вы хотели (я думаю). Вам придется динамически выполнять весь блок PL/SQL, содержащий объявление исключения и раздел его обработки. Что-то вроде этого:

 SQLgt; declare  2 v_t varchar2(1000);  3 begin  4 select ' RAISE A ' into v_t from dual;  5 execute immediate  6 'declare a exception; begin ' || v_t ||  7 '; exception when a then dbms_output.put_line(''abc''); end;';  8 end ;  9 / abc  PL/SQL procedure successfully completed.  SQLgt;