出问题的情况就是下面的代码:
create or replace package TEST_PKG is CURSOR gcs_TEST(
ich_ID IN VARCHAR2
,ich_FLAG IN VARCHAR2
)
IS
SELECT USERNAME
,USERID
FROM T_USER
WHERE ID = ich_ID
AND FLAG = ich_FLAG
;
grc_cs_TEST gcs_TEST%rowtype;PROCEDURE TEST_Main_Proc(
gIn_ID IN VARCHAR2
,gOut_Return OUT NUMBER
);end TEST_PKG;
/
CREATE OR REPLACE package BODY TEST_PKG isPROCEDURE TEST_Main_Proc(
gIn_ID IN VARCHAR2
,gOut_Return OUT NUMBER
)
IS
BEGIN
gOut_Return := 0;
FOR grc_cs_TEST IN gcs_TEST(gIn_ID,'0')
INSERT INTO T_TEST1
(
USERNAME
,USERID
)
VALUES
(
grc_cs_TEST.USERNAME
,grc_cs_TEST.USERID
)
;
END LOOP;
FOR grc_cs_TEST IN gcs_TEST(gIn_ID,'1')
INSERT INTO T_TEST1
(
USERNAME
,USERID
)
VALUES
(
grc_cs_TEST.USERNAME
,grc_cs_TEST.USERID
)
;
END LOOP; COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
gOut_Return := -1;
END;
END TEST_Main_Proc;end TEST_PKG;
/
问题就在第二个FOR这里,第一个FOR运行好了CURSOR应该会自动关掉的
,可是第二个FOR里面拿到的是第一个FOR里面最后一条记录。
请问这个问题怎么解决啊?我现在是多定义一个
grc_cs_TEST gcs_TEST%rowtype;
可是觉得这样很烦。有没有简单的解决方法?
谢谢!
create or replace package TEST_PKG is CURSOR gcs_TEST(
ich_ID IN VARCHAR2
,ich_FLAG IN VARCHAR2
)
IS
SELECT USERNAME
,USERID
FROM T_USER
WHERE ID = ich_ID
AND FLAG = ich_FLAG
;
grc_cs_TEST gcs_TEST%rowtype;PROCEDURE TEST_Main_Proc(
gIn_ID IN VARCHAR2
,gOut_Return OUT NUMBER
);end TEST_PKG;
/
CREATE OR REPLACE package BODY TEST_PKG isPROCEDURE TEST_Main_Proc(
gIn_ID IN VARCHAR2
,gOut_Return OUT NUMBER
)
IS
BEGIN
gOut_Return := 0;
FOR grc_cs_TEST IN gcs_TEST(gIn_ID,'0')
INSERT INTO T_TEST1
(
USERNAME
,USERID
)
VALUES
(
grc_cs_TEST.USERNAME
,grc_cs_TEST.USERID
)
;
END LOOP;
FOR grc_cs_TEST IN gcs_TEST(gIn_ID,'1')
INSERT INTO T_TEST1
(
USERNAME
,USERID
)
VALUES
(
grc_cs_TEST.USERNAME
,grc_cs_TEST.USERID
)
;
END LOOP; COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
gOut_Return := -1;
END;
END TEST_Main_Proc;end TEST_PKG;
/
问题就在第二个FOR这里,第一个FOR运行好了CURSOR应该会自动关掉的
,可是第二个FOR里面拿到的是第一个FOR里面最后一条记录。
请问这个问题怎么解决啊?我现在是多定义一个
grc_cs_TEST gcs_TEST%rowtype;
可是觉得这样很烦。有没有简单的解决方法?
谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货