出问题的情况就是下面的代码:
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;
可是觉得这样很烦。有没有简单的解决方法?
谢谢!