我正在执行以下代码片段
set serveroutput on;
DECLARE
TYPE emp_rec_type IS record (emp_id NUMBER,salary NUMBER);
emp_rec emp_rec_type;
l_out number;
l_statement varchar2(1000);
BEGIN
emp_rec.emp_id := 1;
emp_rec.salary := 1000;
SELECT emp_rec.salary INTO l_out FROM dual WHERE 1=1;
dbms_output.put_line(l_out);
l_statement := 'select emp_rec.salary from dual where 1=1';
execute immediate l_statement into l_out;
dbms_output.put_line(l_out);
END;
我得到以下输出
Error report:
ORA-00904: "EMP_REC"."SALARY": invalid identifier
ORA-06512: at line 23
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
1000
我期待输出
1000
1000
为什么动态语句执行坚持emp_rec.salary是一个无效的标识符,而Select into语句工作正常? 我还需要做些什么才能让它发挥作用吗?
答案 0 :(得分:2)
EXECUTE IMMEDIATE
语句的内容在与PL / SQL代码的其余部分完全不同的范围内运行 - 您无法直接引用PL / SQL变量。
如果要在动态语句中使用emp_rec.salary
的内容,则应该像这样绑定值:
l_statement := 'SELECT :1 FROM dual WHERE 1=1';
EXECUTE IMMEDIATE l_statement INTO l_out USING emp_rec.salary;