0

如果我有以下形式的 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 文档确实让人觉得这似乎是不可能的,而且据我所知,它不应该是这样。有没有我没有看到的聪明的解决方法?

4

1 回答 1

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;
于 2013-10-31T18:52:04.113 回答