现有一个自定义函数:
function fun return varchar2 as
begin
return 'select * from table1';
end;然后在一个存储过程中动态调用此函数,但函数名是通过存储过程的参数传入:
procedure proc(p_Fun in varchar2) as
v_SQL varchar2(500);
begin/*
如何在此调用参数 p_Fun 指向的函数而获得字符串'select * from table1',不能通过 v_SQL := p_Fun 形式调用,否则v_SQL只能得到字符串 fun,而不是函数fun 的返回值'select * from table1',同理,select p_Fun into v_SQL from dual 也不行。
如果是用 execute immediate p_Fun into v_SQL 也不行,因为这样编译器会执行fun返回的那条SQL语句并得到记录集,而不是SQL语句本身。
*/end;
function fun return varchar2 as
begin
return 'select * from table1';
end;然后在一个存储过程中动态调用此函数,但函数名是通过存储过程的参数传入:
procedure proc(p_Fun in varchar2) as
v_SQL varchar2(500);
begin/*
如何在此调用参数 p_Fun 指向的函数而获得字符串'select * from table1',不能通过 v_SQL := p_Fun 形式调用,否则v_SQL只能得到字符串 fun,而不是函数fun 的返回值'select * from table1',同理,select p_Fun into v_SQL from dual 也不行。
如果是用 execute immediate p_Fun into v_SQL 也不行,因为这样编译器会执行fun返回的那条SQL语句并得到记录集,而不是SQL语句本身。
*/end;
解决方案 »
- 数据库范式问题
- Java oracle:listener does not currently know of SID given in connect descriptor
- 双引号问题
- 求oracle 行列转换的SQL语句
- 用过 sql navitagor的高手来帮个忙 严重给分
- 求距离最近的SQL
- 急!高手帮忙写个存储过程!
- 请教有关数据本地存储的问题。
- oracle的查病毒问题
- 万能的程序员小哥哥们,求教oracle里面的sqlplus如何才能复制粘贴
- 使用B树建立数据库索引,每个节点里面包含的数据记录是什么?单纯一个地址引用还是数据记录完全信息?
- 关于3个表之间用约束保证数据一致的问题,请高人指点!
1, open cur1 for 'select ' || p_Fun || 'from dual';
2, fetch cur1 into resultstr
3, using resultstr
begin
return 'select * from table1 ';
end; 你可以这么用呀在存储过程中 直接调用这个自定义函数
fun(p_Fun)注意如果是表名,请注意大小写。有区别的。