好的, 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;
你是写在包内的吗?我写在包内没有出现错误。测试代码如下: 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; /
是的,现在是这样的, 游标 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; 这样的话,就会出现那个错误了 你在试一下,
我测试了如下代码,没有出错: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; /
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;
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;
/
游标
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;
这样的话,就会出现那个错误了
你在试一下,
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;
/
我在参数中使用了游标,而在main外边没有定义,是在main中定义游标的,
所以会出现“《PLS-00801》 内部错误[79110]”这个错误,解决方法:
在main外边定义一个游标,即使你没有使用它,也要定义,然后在main中定义游标,这样就不会出现这个错误了这个可能是plsql的一个bug,