CREATE OR REPLACE PROCEDURE NHKDATA.GETSYAININFO_(
    i_cid        IN  SYAIN.KIGYO_CODE%TYPE,
    i_uid        IN  SYAIN.IDCODE%TYPE,
    o_username  OUT VARCHAR2,
    outStr      OUT VARCHAR2
)IS
    row_syain  SYAIN%rowtype;
    v_A KINMU_MONTHLY.NENGETSU%TYPE;
    flag NUMBER := 0;
    /*一覧*/
    CURSOR cur_syainRireki(
        ic_cid SYAIN.KIGYO_CODE%TYPE,
        ic_uid SYAIN.IDCODE%TYPE
    ) IS
        SELECT KINMU_MONTHLY.NENGETSU AS V_NENGETSU
          FROM KINMU_MONTHLY LEFT JOIN KINMU_GOKEI
                ON KINMU_MONTHLY.IDCODE     = KINMU_GOKEI.IDCODE AND
                   KINMU_MONTHLY.KIGYO_CODE = KINMU_GOKEI.KIGYO_CODE AND
                   KINMU_MONTHLY.NENGETSU   = KINMU_GOKEI.NENGETSU
          WHERE KINMU_MONTHLY.IDCODE     = ic_uid AND
                KINMU_MONTHLY.KIGYO_CODE = ic_cid;
BEGIN
    OPEN cur_syainRireki(i_cid,i_uid); 
    
    LOOP
       FETCH cur_syainRireki.NENGETSU INTO v_A;
       EXIT WHEN cur_syainRireki%NOTFOUND;
       outStr         := outStr || '&&NENGETSU' || flag || '::' ||v_A;
       flag          := flag + 1;
    END LOOP;
    outStr := outStr || '&&COUNT::' || to_char(flag);    CLOSE cur_syainRireki;     --RETURN;
EXCEPTION
    WHEN OTHERS THEN
    RAISE;END GETSYAININFO_;
/
为什么以上代码老是报PLS-002255错误???
厚着脸皮请教浪哥和诸位大侠,嘿嘿

解决方案 »

  1.   

    PLS-00225 subprogram or cursor 'string' reference is out of scopeCause: A subprogram or cursor references a variable that was not declared or is not within the scope of the subprogram or cursor. The variable name might be misspelled, its declaration might be faulty, or the declaration might be placed incorrectly in the block structure.Action: Check the spelling and declaration of the variable name. Also confirm that the declaration is placed correctly in the block structure.--字符越界!
      

  2.   

    SYAIN.KIGYO_CODE%TYPE和SYAIN.IDCODE%TYPE是不是有问题
    还有CURSOR cur_syainRireki( 
            ic_cid SYAIN.KIGYO_CODE%TYPE, 
            ic_uid SYAIN.IDCODE%TYPE 
        ) 
    从代码上看应该和KINMU_MONTHLY匹配,两者类型是否相符
    SYAIN表却没有出现
      

  3.   

    还有这个代码
    SELECT KINMU_MONTHLY.NENGETSU AS V_NENGETSU 
              FROM KINMU_MONTHLY LEFT JOIN KINMU_GOKEI 
    既然只取KINMU_MONTHLY.NENGETSU 的值,为什么要left join,看起来多此一举
      

  4.   

    哦,不是啦,这只是个sample,要去很多值呢,另外问一下,可否取得cur_syainRireki的rowtype类型
      

  5.   

    将open cursor..;loop fetch.. end loop;close cursor..
    用for cur1 in cursor loop 来写试试
    CREATE OR REPLACE PROCEDURE NHKDATA.GETSYAININFO_( 
        i_cid        IN  SYAIN.KIGYO_CODE%TYPE, 
        i_uid        IN  SYAIN.IDCODE%TYPE, 
        o_username  OUT VARCHAR2, 
        outStr      OUT VARCHAR2 
    )IS 
        row_syain  SYAIN%rowtype; 
        v_A KINMU_MONTHLY.NENGETSU%TYPE; 
        flag NUMBER := 0; 
        /*一覧*/ 
        CURSOR cur_syainRireki( 
            ic_cid SYAIN.KIGYO_CODE%TYPE, 
            ic_uid SYAIN.IDCODE%TYPE 
        ) IS 
            SELECT KINMU_MONTHLY.NENGETSU AS V_NENGETSU 
              FROM KINMU_MONTHLY LEFT JOIN KINMU_GOKEI 
                    ON KINMU_MONTHLY.IDCODE    = KINMU_GOKEI.IDCODE AND 
                      KINMU_MONTHLY.KIGYO_CODE = KINMU_GOKEI.KIGYO_CODE AND 
                      KINMU_MONTHLY.NENGETSU  = KINMU_GOKEI.NENGETSU 
              WHERE KINMU_MONTHLY.IDCODE    = ic_uid AND 
                    KINMU_MONTHLY.KIGYO_CODE = ic_cid; 
    BEGIN 
        for cur1 in cur_syainRireki(i_cid,i_uid)
        
        LOOP 
          v_A:=cur1.V_NENGETSU; 
          outStr        := outStr || '&&NENGETSU' || flag || '::' ||v_A; 
          flag          := flag + 1; 
        END LOOP; 
        outStr := outStr || '&&COUNT::' || to_char(flag); 
        --RETURN; 
    EXCEPTION 
        WHEN OTHERS THEN 
        RAISE; END GETSYAININFO_; 
      

  6.   

    无效?
    你是不是忘了去掉close cur_syainRireki了
    如果不是这个问题的话,看看游标定义的查询是否正确
      

  7.   

    问题出在CLOSE cur_syainRireki;上!!!!!
    为什么这个东西会报错!?!?!?!?!?!!?
      

  8.   

    for .. in cursor..
    本身已经隐含了open cursor、fetch..和close
    所以你多加了close会出错的
      

  9.   

    T_T.......我才知道 SI Object 能debug