日期:2014-05-17  浏览次数:21534 次

我建立啦一个函数 包含动态的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语句中更新的列和表名都不能用邦定变量,只有值可以用邦定变量。