我建立啦一个函数 包含动态的sql 但运行时有问题 高手帮忙
CREATE OR REPLACE function HRBEURS.get_values(zd varchar2,tablename varchar2)
return varchar2
as
v_values varchar2(50);
sql_statement varchar2(200);
begin
sql_statement := 'select :zd from :tablename where rownum = 1';
execute immediate sql_statement into v_values using zd,tablename;
return v_values;
exception
when NO_DATA_FOUND THEN
raise_application_error(-20000,'没有信息');
end;
/
运行的时候错误提示
*
ERROR 位于第 1 行:
ORA-00903: 表名无效ORA-06512: 在"HRBEURS.GET_VALUES", line 8
ORA-06512: 在line 1
老说表明无效 怎么办
函数的目的 随便查询一个表中的一个字段的值
------解决方案--------------------本地动态SQL的绑定变量一般是用在确实是变量(这里不太好描述)的子句中(如set 列=:val或where 列=:val)中。
我测试的结果是:
1)在select语句中select列和where子句中都可以用绑定变量且确实能避免重复解析,但from 的表用邦定变量不通过。
2)在update语句中更新的列和表名都不能用邦定变量,只有值可以用邦定变量。