关于SQL存储过程使用游标循环的问题

现有三张表a、b、c,如果循环a表,把a表的某个数据作为b表的查询条件,如果b表满足条件就把数据插入C表,怎么创建这个存储过程?... 现有三张表a 、b、c,如果循环a 表,把a表的某个数据作为b表的查询条件,如果b表满足条件就把数据插入C表,怎么创建这个存储过程? 展开
 我来答
Milo_WuW
2013-10-31 · 超过30用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:66.1万
展开全部
你把具体需要做到什么,把内容写出来,还有a,b,c,3个表的表结构及关系,我来给你写存储过程,你只这样草草的说,我写出来的代码你也用不了的
游标/循环,尽量有别的方法还是不要用,数据多的话,速度很慢很慢的,贴出来我给你看看有什么别的方法替代的吗
更多追问追答
追问

        循环a表根据a表的Card 查询b表,如果b 表里每天的LearnTime>20 就往c表里面插入数据 的存储过程怎么写?

追答

insert into c(ID,Card,FenZhi)

select b.ID,b.Card,b.Kcid from a inner join b on a.Card=b.Card

where lastLeanTime=convert(varchar(10),getdate()) and LearnTime>20



我大概明白了,是不是这样

  1. 就是b表中有和a表中Card相同,LearnTime>20,且当天的数据,就插入到c中

  2. 如果是这样用什么循环啊,能不用游标和循环,就尽量不要用


简单说下我这段代码:

  1. 你插入到C表中,如果ID列是自动增加的,就不要ID插入,会自动生成的

  2. 你只是要b中Card在a表中有的,就没有必要再循环/游标了,太浪费时间


不明白就接着问我

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangxiaodi7428
2013-10-31 · TA获得超过313个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:93.8万
展开全部
循环嵌套的格式打给你写了一下 以参考一下换上你的数据就行:

CREATE OR REPLACE PROCEDURE P_name
AS
定义变量如:

V$PO_NO VARCHAR2(20);

V$ITM_CD VARCHAR2(20);

V$ITM_CD1 VARCHAR2( 40);

CURSOR CUR_A

IS

SELECT *
FROM a;

CURSOR CUR_B

IS

SELECT *
FROM B;

BEGIN

OPEN CUR_A;

LOOP

FETCH CUR_A INTO 变量V$PO_NO;

EXIT WHEN CUR_A%NOTFOUND;

循环处理;

OPEN CUR_B;

LOOP

FETCH CUR_B INTO 变量V$ITM_CD;

EXIT WHEN CUR_B%NOTFOUND;

次循环处理;

END LOOP ;

CLOSE CUR_B;

END LOOP ;

CLOSE CUR_A;

COMMIT;

异常处理:

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE( '无值');

ROLLBACK;

WHEN OTHERS THEN

P$RET:= SQLCODE;

ROLLBACK;

END;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suqifeng2009
2013-10-31 · TA获得超过103个赞
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:76.1万
展开全部
--方法就这些 具体还是要你自己 理解 怎么灵活运用
begin tran   
declare @aID int
declare cur4 cursor for 
SELECT a.[ID] from tbA
OPEN cur4
fetch cur4 into @aID
while  @@FETCH_STATUS = 0
BEGIN
------------------------------
INSERT INTO tbC (tbC.cls01,tbC.cls02)
SELECT tbB.cls01,tbB.cls02 FROM tbB WHERE tbB.cls01=@aID
--------------------------
fetch cur4 INTO @aID
END
close cur4
deallocate cur4
if @@error<>0 or @@rowcount<>1
begin
    rollback tran
end
else
begin
        commit tran
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式