存储过程中用什么可以替代游标

存储过程代码如下:CREATEORREPLACEPROCEDUREpd_P_visitPlan_answer(sKeyidvarchar2,sVpidvarchar2,s... 存储过程代码如下:

CREATE OR REPLACE PROCEDURE pd_P_visitPlan_answer (sKeyid varchar2,
sVpid varchar2,
sVpcmid varchar2,
sVpctid varchar2,
sVpidid varchar2,
sAnswerType varchar2,
sReturnMsg out varchar2) is

type Type_Cur is ref cursor;
VisitPlanCur Type_Cur;
sSQL varchar2(500);
nNum number(4) default 1;--自动增长序号
sSequenceNum varchar2(20) default 0;--序号
sCondition varchar2(1000) default '';--用于拼接sql语句条件

sCnid varchar2(20);
sContent varchar2(200);
sIsupstandard varchar2(1);
iShoworder number(4,2);

rownum number(4);--记录行数量,用于变量赋值前,判断是否存在数据
sDefaultAnswer varchar2(2) default '0';
begin
--查询指标基本信息
sSQL := 'select cnid, content, isupstandard, showorder from cm_k_checkanswer t where t.keyid = ' || sKeyid;

open VisitPlanCur for sSQL;
loop
fetch VisitPlanCur
into sCnid,sContent,sIsupstandard,iShoworder;
exit when VisitPlanCur%notfound;
--生成序号
select to_char(sysdate,'yyMMddhh24miss') || replace(lpad(seq_visitplan.nextval,5),' ','0') || replace(lpad(nNum,3),' ','0') into sSequenceNum from dual;
nNum := nNum + 1;

--根据指标答案类型进行判断,当为文本时默认为空
if sAnswerType = '4' then
sDefaultAnswer := '';
end if;

--数据写入cm_p_visitplan_answer
insert into cm_p_visitplan_answer(vpanid, vpidid, cnid, content, isupstandard, showorder, answer, vpctid, vpcmid, vpid)
values(sSequenceNum,sVpidid,sCnid,sContent,sIsupstandard,iShoworder,sDefaultAnswer,sVpctid,sVpcmid,sVpid);

end loop;
close VisitPlanCur;

exception
when others then
if sReturnMsg ='' or sReturnMsg is null then
rollback;
sReturnMsg := ' 存储过程: pd_P_visitPlan_answer 错误 ' || sqlerrm;
end if;
end;
展开
 我来答
hoh_na
2012-09-25 · 超过22用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:33.2万
展开全部
可以用for循环的 for v_test in (select * from) loop

end loop;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
藜照堂_刘
2012-09-25 · TA获得超过5701个赞
知道小有建树答主
回答量:2034
采纳率:56%
帮助的人:354万
展开全部
组合sql能代替一部分游标
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Miracle_Ice
2012-09-26
知道答主
回答量:27
采纳率:0%
帮助的人:12.4万
展开全部
用CTE查询改一下呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaaga
2012-09-25
知道答主
回答量:75
采纳率:0%
帮助的人:19.4万
展开全部
为什么要替代?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式