动态SQL的问题

[复制链接]
查看11 | 回复9 | 2006-9-7 17:01:08 | 显示全部楼层 |阅读模式
create or replace procedure p_01(
p_str in varchar2,
o_rst_cur out sys_refcursor
)
as
begin
open o_rst_cur for
select 1 X,‘kkkkk’ memo,‘jjjj’ txt from dual
;
end;
/
create or replace procedure p_02(
p_str in varchar2,
o_rst_cur out sys_refcursor
)
as
v_sql varchar2(1000);
begin
v_sql := ‘call fu.p_02('sadfsaf',:1)’;
execute immediate v_sql using out o_rst_cur;
end;
/
运行p_02时报错,但在UNIX版的10g中无问题,请教大家是否是oracle由于某些系统控制参数的设置问题??我的数据库版本是ORACLE 9.2.0.5的。
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
在线等……
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
提示什么错误?
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
execute immediate v_sql using out o_rst_cur;
这样试试
open o_rst_cur for v_sql;
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
sadfsaf
用两个单引号
你的 v_sql := 单引号里面的单引号需要用两个单引号表示一个单引号
这个新论坛如果恢复用了单引号,会没法发帖子,
只能和你说说了,没法把改过的代码贴出来
[ 本帖最后由 atgc 于 2007-11-20 15:22 编辑 ]
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
我的目的是提供一个接口过程来调用其他的所有返回一个游标结果集的过程,减少前端展示的压力,只用参数来区分调用哪个过程,同时用动态的SQL易于维护。以上只是个例子而已,只希望p_02通过了,不知道是不是oracle的BUG。
楼上的,可以贴出代码,把单引号改成中文字符的单引号即可,当然不能编译,自己编辑一下即可。
错误是:ora-06512,看错误基本上没有办法呀。
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
游标返回结果集要用package
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
给你个例子
http://atgc.itpub.net/post/22412/293784
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
是的,我这边都是PACKAGE封装了,只是为了简单起见,用过程展示一下,但基本的结构不变,CALL时只是前面加PACKAGE名
回复

使用道具 举报

千问 | 2006-9-7 17:01:08 | 显示全部楼层
我的目的是提供一个接口过程p_02来调用其他的所有返回一个游标结果集的过程,如p_01,他是返回一个数据集,可能还有很多个p_01的过程,那么我将这些过程名存到表里,表中设置一个ID,前端只需要知道ID然后调用p_02过程,我就可以在p_02中动态构建调用对应的p_01等返回数据集的过程,减少前端展示的压力,只用参数来区分调用哪个过程,同时用动态的SQL易于维护,以后只需要维护配置表,而无需修改p-02。以上只是个例子而已,只希望p_02通过了,不知道是不是oracle的BUG。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行