我正在尝试创建一个程序,它给了我“没有错误”然后“ORA-24344成功编译错误” 如果我在程序中运行所有内容它正确执行但是当我尝试创建包体时它不起作用。我把它缩小到这个程序:
CREATE OR REPLACE PACKAGE TEG.SPCKG_AEC_CIS_SVC_PIPE_COMP IS
TYPE OUT_CURSOR IS REF CURSOR;
PROCEDURE CreateRptTables;
END;
GRANT EXECUTE ON TEG.SPCKG_AEC_CIS_SVC_PIPE_COMP TO TEG_USER;
CREATE OR REPLACE PACKAGE BODY TEG.SPCKG_AEC_CIS_SVC_PIPE_COMP IS
--------------------------------------------------------------------------------
PROCEDURE CreateRptTables IS
/*==========================================================================
12/20/2013 TFS 24446 - Created function
==========================================================================*/
DECLARE
CURSOR Cur_Comp IS
SELECT * FROM TEG.AEC_CIS_SVC_PIPE_COMP;
BEGIN
FOR compRow in Cur_Comp LOOP
If (compRow.cis_bus_res_loop <> compRow.cis_bus_res_loop_c) Then
--Insert information into the details table
INSERT INTO TEG.AEC_CIS_SVC_PIPE_DET( Facility_id, Serv_Pipe_Num)
VALUES(compRow.Facility_ID, compRow.Serv_Pipe_Num);
End If;
END LOOP;
END;
END;
SHOW ERRORS
答案 0 :(得分:4)
您需要删除“DECLARE”关键字。这只在匿名PL / SQL块中需要。
答案 1 :(得分:2)
如果user_errors
由于某种原因没有显示任何内容,您可以查询all_errors
或show errors
以查看问题。
您的程序中的一个明显问题是您拥有DECLARE
关键字。您只能将其用于匿名块。 PROCEDURE ... IS
和BEGIN
之间的所有内容都是在命名块中声明。
答案 2 :(得分:0)
为什么使用显式游标?只需做
INSERT INTO TEG.AEC_CIS_SVC_PIPE_DET( Facility_id, Serv_Pipe_Num)
SELECT Facility_ID, Serv_Pipe_Num
FROM TEG.AEC_CIS_SVC_PIPE_COMP
WHERE cis_bus_res_loop <> cis_bus_res_loop_c;