如果我有以下形式的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 文档当然使这看起来似乎是不可能的,而且据我了解,它不应该是。有没有我没有看到的聪明解决方法?
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;