是否可以在执行立即声明中运行的匿名PL-SQL块的声明部分中保留变量值?

时间:2013-10-31 18:46:11

标签: oracle plsql

如果我有以下形式的PL-SQL代码:

DECLARE
  v_glob VARCHAR2(4000) := q'<
  DECLARE xyz VARCHAR2(7); BEGIN DBMS_OUTPUT.PUT_LINE('test45654645'); END;
  >';
BEGIN
  DBMS_OUTPUT.PUT_LINE(v_glob);
  EXECUTE IMMEDIATE (v_glob);
  -- What was the value of xyz here?
END;

有没有办法欺骗范围并保留这些价值观?就我的目的而言,如果能够以常规方式完成,可以在v_glob中添加额外的代码。

Oracle文档肯定会让它看起来好像不可能,而且据我所知,它不应该是。我有没有看到一个聪明的解决方法?

1 个答案:

答案 0 :(得分:1)

DECLARE
  v_glob VARCHAR2(4000) := q'<
  DECLARE 
    xyz VARCHAR2(7) := 'hidden!'; 
  BEGIN 
    DBMS_OUTPUT.PUT_LINE('test45654645'); 
    :output := xyz;
  END;
  >';
  v_output varchar2(7);
BEGIN
  DBMS_OUTPUT.PUT_LINE(v_glob);
  EXECUTE IMMEDIATE (v_glob) using out v_output;
  -- What was the value of xyz here?
  DBMS_OUTPUT.PUT_LINE(v_output);
END;