急呀,高分求助,一个调用存储过程的小问题。。。在线等

mysohu 2005-06-03 11:02:39
怎么样动态调用函数,
declare
varchar(60) funname;
varchar(60) v_out;

begin
funname:='test(1)';
怎样调用funname函数,funname是个字符串
--我用了下面的方法,但如果函数中包含插入等操作报无法在查询中执行 DML 操作
execute immediate 'select '||funname||' from dual ' into v_out;
--

end;



...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mysohu 2005-06-03
  • 打赏
  • 举报
回复
不想用临时表行吗?
bzszp 2005-06-03
  • 打赏
  • 举报
回复
是的
可以使用临时表,将数据插入临时表中,然后在外面使用
mysohu 2005-06-03
  • 打赏
  • 举报
回复
bzszp(SongZip):
这样不能得到返回值呀
mysohu 2005-06-03
  • 打赏
  • 举报
回复
楼上的我测试了一下,报一样的错误,有什么其它的方法啊
bzszp 2005-06-03
  • 打赏
  • 举报
回复
try:
execute immediate
'declare
v_out varchar2(60);
begin
v_out:='||funname||';
...
end;';
...
bzszp 2005-06-03
  • 打赏
  • 举报
回复
OK!
测试:
第一种:带返回参数的存储过程
SQL> create or replace procedure p_demo(v_col1 in varchar2,v_col2 out varchar2)
2 as
3 begin
4 v_col2:=v_col1||' out!';
5 end p_demo;
6 /

过程已创建。

SQL> declare
2 v_1 varchar2(20):='aaa';
3 v_2 varchar2(30);
4 begin
5 execute immediate 'begin p_demo(:1,:2); end;' using v_1,out v_2;
6 dbms_output.put_line(v_2);
7 end;
8 /
aaa out!

PL/SQL 过程已成功完成。

第二种:使用函数
SQL> create or replace function f_demo(v_col1 varchar2) return varchar2
2 as
3 begin
4 return v_col1||' out!';
5 end f_demo;
6 /

函数已创建。

SQL> declare
2 v_1 varchar2(20):='aaa';
3 v_2 varchar2(30);
4 begin
5 execute immediate 'begin :1:=f_demo(:2); end;' using out v_2,v_1;
6 dbms_output.put_line(v_2);
7 end;
8 /
aaa out!

PL/SQL 过程已成功完成。

SQL>

应该没问题了。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧