我写了一个存储过程,大概如下:
CREATE OR REPLACE PROCEDURE BT0410(IN_NUM_SYORI_UKETUKE_NO IN NUMBER, RETURN_CODE OUT CHAR) IS
--变量声明省略。 CURSOR CUR1 IS
SELECT
A.PC_ID -- A.PC_ID FROM TH0410 A
WHERE 0 = 0; PROCEDURE PROCE1(CUR1_REC CUR1%ROWTYPE) IS
BEGIN
NULL;--操作CUR1_REC更新DWHT0410表,这里省略
END PROCE1; PROCEDURE PROCE2(CUR1_REC CUR1%ROWTYPE) IS
BEGIN
NULL;--操作CUR1_REC插入DWHT0410表,这里省略
END PROCE2;
BEGIN
/* 変数の初期化 */
RETURN_CODE := '00';
FOR CUR1_REC IN CUR1 LOOP
PROCE1(CUR1_REC);
IF SQL%ROWCOUNT = 0 THEN
PROCE2(CUR1_REC);
END IF;
END LOOP;
/* コミット */
COMMIT;
EXCEPTION
这里EXCEPTION处理省略。
END;
/1:在很多书上看到说显式游标使用前要OPEN,用后要CLOSE,可是我并没有打开游标的语句“OPEN CUR1;”,PROCE1或者PROCE2照样可以运行成功操作DB,说明游标确实被OPEN,那么显式游标使用前是否必须要“OPEN CUR1;”这个语句?这里怎么解释?
2:这样运行结束后游标是什么状态?是否已经关闭?还需要“CLOSE CUR1;”这样的语句吗?
3:不使用“OPEN CUR1;”和“CLOSE CUR1;”与使用他们在性能上有什么区别?
CREATE OR REPLACE PROCEDURE BT0410(IN_NUM_SYORI_UKETUKE_NO IN NUMBER, RETURN_CODE OUT CHAR) IS
--变量声明省略。 CURSOR CUR1 IS
SELECT
A.PC_ID -- A.PC_ID FROM TH0410 A
WHERE 0 = 0; PROCEDURE PROCE1(CUR1_REC CUR1%ROWTYPE) IS
BEGIN
NULL;--操作CUR1_REC更新DWHT0410表,这里省略
END PROCE1; PROCEDURE PROCE2(CUR1_REC CUR1%ROWTYPE) IS
BEGIN
NULL;--操作CUR1_REC插入DWHT0410表,这里省略
END PROCE2;
BEGIN
/* 変数の初期化 */
RETURN_CODE := '00';
FOR CUR1_REC IN CUR1 LOOP
PROCE1(CUR1_REC);
IF SQL%ROWCOUNT = 0 THEN
PROCE2(CUR1_REC);
END IF;
END LOOP;
/* コミット */
COMMIT;
EXCEPTION
这里EXCEPTION处理省略。
END;
/1:在很多书上看到说显式游标使用前要OPEN,用后要CLOSE,可是我并没有打开游标的语句“OPEN CUR1;”,PROCE1或者PROCE2照样可以运行成功操作DB,说明游标确实被OPEN,那么显式游标使用前是否必须要“OPEN CUR1;”这个语句?这里怎么解释?
2:这样运行结束后游标是什么状态?是否已经关闭?还需要“CLOSE CUR1;”这样的语句吗?
3:不使用“OPEN CUR1;”和“CLOSE CUR1;”与使用他们在性能上有什么区别?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货