如果我有以下形式的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文档肯定会让它看起来好像不可能,而且据我所知,它不应该是。我有没有看到一个聪明的解决方法?
答案 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;