这个错误“《PLS-00801》 内部错误[79110]”是由什么引起的,我只是把
游标定义原先放在fungion外边的,
我想把游标定义放到Funtion中,就出现了这个问题,另外我在另一个plsql中也作了同样的移动,没有出现问题,我不知道原因,

解决方案 »

  1.   

    好的,
    CURSOR aaa_cursor(p_ks_cd IN VARCHAR2, p_kj_dt IN VARCHAR2) IS
    SELECT SUBSTR(a.FURIDEN_NO, 1, 1) AS denpyo_sbt_kbn 
      ,g.gamen_id AS gamen_id 
      ,a.ks_cd AS ks_cd 
      FROM ar_009_tr_sknzan_tk_msi  b 
      ,ar_009_tr_sknzan_tk_head a 
     WHERE
     a.sknzan_tuke_id = b.sknzan_tuke_id
     AND a.ks_cd = b.kaisha_cd
    ;现在的游标位置 cur_aaa aaa_cursor%ROWTYPE; FUNCTION main
    (
    p_kns_fd IN VARCHAR2 
       ,p_kj_dt  IN VARCHAR2 
    ) RETURN NUMBER IS
             预定在这里定义游标
    begin
    --------------
             ------------
            ..............
    end main;
      

  2.   

    你是写在包内的吗?我写在包内没有出现错误。测试代码如下:
    CREATE OR REPLACE PACKAGE TEST.PAK_TEST
    IS
    cursor my_cur is select * from 表;
    FUNCTION main(p_kns_fd IN VARCHAR2,p_kj_dt  IN VARCHAR2)  RETURN NUMBER ;
    END;
    /CREATE OR REPLACE PACKAGE BODY TEST.PAK_TEST
    IS    FUNCTION main(p_kns_fd IN VARCHAR2,p_kj_dt  IN VARCHAR2)  RETURN NUMBER
        IS
    cur_aaa my_cur%ROWTYPE;
        BEGIN
    return 1;
        END;
    END;
    /或
    CREATE OR REPLACE PACKAGE BODY TEST.PAK_TEST
    IS
    cur_aaa my_cur%ROWTYPE;
    FUNCTION main(p_kns_fd IN VARCHAR2,p_kj_dt  IN VARCHAR2)  RETURN NUMBER
        IS
        BEGIN
    return 1;
        END;
    END;
    /
      

  3.   

    是的,现在是这样的,
    游标
    CURSOR A_CURSOR() IS
    SELECT A1 FROM TABLEA
    ;现在的游标位置:CUR_A A_CURSOR%ROWTYPE;更新一个表中的字段或多个表
    PROCEDURE UPDATE_B(P_CURSOR_A A_CURSOR%ROWTYPE  ) IS
    BEGIN
    UPDATE TABLEB                            
       SET B1= P_CURSOR_A.A1                  
     WHERE
     条件;
    END UPDATE_B;主函数
    FUNCTION MAIN()RETURN NUMBER IS
        预定在这里定义游标
    BEING--------------
    ------------
    ..............END MAIN;
    这样的话,就会出现那个错误了
    你在试一下,
      

  4.   

    我测试了如下代码,没有出错:CREATE OR REPLACE PACKAGE BODY DISPATCHMIS.PAK_TEST
    IS

    -- 更新一个表中的字段或多个表
    PROCEDURE UPDATE_B(P_CURSOR_A A_CURSOR%ROWTYPE  ) IS
    BEGIN
    UPDATE t_dd_tx_txz                            
       SET txz_id = '0'  WHERE 1=2;
    END UPDATE_B; FUNCTION main(p_kns_fd IN VARCHAR2,p_kj_dt  IN VARCHAR2)  RETURN NUMBER
        IS
    cur_aaa A_CURSOR%ROWTYPE;
        BEGIN
    return 1;
        END;
    END;
    /
      

  5.   

    我找到解决方法了,原因:
    我在参数中使用了游标,而在main外边没有定义,是在main中定义游标的,
    所以会出现“《PLS-00801》 内部错误[79110]”这个错误,解决方法:
    在main外边定义一个游标,即使你没有使用它,也要定义,然后在main中定义游标,这样就不会出现这个错误了这个可能是plsql的一个bug,
      

  6.   

    非常感谢  wangybyangxr(王永斌)