首页 > 解决方案 > 动态执行 RAISE 错误时出错

问题描述

我想根据 SELECT 语句执行 RAISE 错误。我相信这会奏效。如果可能的话,有人可以帮助下面的代码

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 ;

标签: oracleoracle12c

解决方案


它会起作用,但不是你想要的(我猜)。您必须动态执行包含异常声明及其处理部分的整个 PL/SQL 块。像这样的东西:

SQL> 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.

SQL>

推荐阅读