pl/sql中写function是否可以将表名作为参数传入进行动态查询?

来源:百度知道 编辑:UC知道 时间:2024/06/30 21:54:51
数据库:oracle
工具:PL/SQL
期望实现的功能:
create or replace function CalSpecRate(参数1,参数2,参数3)
return number is
Result number;
---参数1是某个表的表名,参数2和参数3是用于取数的条件和做相关处理的标识。传入表名和条件动态查询,对查询结果做复杂处理后赋给result。

简单的说就是想实现这个语句:select rate from 参数1 where job=参数2;

在function中能实现吗?能否给个语法和示例。

万分感谢!!

如果是返回单行,比较简单,可以参考下面这种写法:
……
v_sql varchar2(1000);
v_rate varchar2(40); --具体类型,根据情况定
……
v_sql:='select rate from '||参数1||' where job='||参数2;
execute immediate v_sql into v_rate;

如果查询语句返回的是多行,需要定义游标,循环处理,参考如下:
……
v_sql varchar2(1000);
type curtype is ref cursor;
mycur curtype;
n number(12);--具体类型,根据情况定
……
v_sql:='select rate from '||参数1||' where job='||参数2;
open mycur for v_sql;
loop fetch mycur into n;
exit when mycur%notfound;
dbms_output.put_line(n);
end loop;