你把具体需要做到什么,把内容写出来,还有a,b,c,3个表的表结构及关系,我来给你写存储过程,你只这样草草的说,我写出来的代码你也用不了的
游标/循环,尽量有别的方法还是不要用,数据多的话,速度很慢很慢的,贴出来我给你看看有什么别的方法替代的吗
循环嵌套的格式打给你写了一下 以参考一下换上你的数据就行:
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;
--方法就这些 具体还是要你自己 理解 怎么灵活运用
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