当我试图执行此代码时,我会收到以下错误。我无法解决这个问题——我缺少什么?
显示错误;程序包BODY PKG_VIEW_LEDGER错误:行/列错误-------------------------------------------------------------------------0/0 PL/SQL:编译单元分析已终止1/14 PLS-00304:如果没有"PKG_VIEW_LEDGER"的规格1/14 PLS-00905:对象SYSTEM.PKG_VIEW_LEDGER无效
---以下代码---
CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS
TYPE cur_view_data is REF CURSOR;
PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data);
END PRG_VIEW_LEDGER;
/
CREATE OR REPLACE PACKAGE BODY PKG_VIEW_LEDGER AS
PROCEDURE sp_view_ledger( person IN VARCHAR2, cur_inout IN OUT cur_view_data)
IS
tmp_cursor cur_view_data;
BEGIN
OPEN tmp_cursor FOR
select * from ledger where person like '%" + myArg.ToUpper + "%';
cur_inout := tmp_cursor;
END sp_view_ledger;
END PKG_VIEW_LEDGER;
/
首先,根据错误,您正在SYSTEM
模式中创建包。不要那样做。SYS
和SYSTEM
是特殊的,只能由Oracle用于Oracle交付的对象。您将需要一个新的模式来创建自己的对象。SYS
和SYSTEM
是特殊的,它们的行为方式并不总是与正常模式相同,因此如果使用这些模式,各种功能将无法正常工作。
其次,在定义包规范时,END
与CREATE
不匹配。您正在创建PKG_VIEW_LEDGER
,同时正在结束PRG_VIEW_LEDGER
。PKG
!=CCD_ 11。如果您在创建包规范后有一个show errors
,则错误会告诉您这一点。
我已经修改了代码,它运行良好。请站在你这边试试,然后告诉我。谢谢
CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS
TYPE cur_view_data is REF CURSOR;
PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data);
END PkG_VIEW_LEDGER;
--------------------------------------------------------------
Package created.
--------------------------------------------------------------
CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS
TYPE cur_view_data is REF CURSOR;
PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data);
END PRG_VIEW_LEDGER;
/
CREATE OR REPLACE PACKAGE BODY PKG_VIEW_LEDGER AS
PROCEDURE sp_view_ledger( person IN VARCHAR2, cur_inout IN OUT cur_view_data)
IS
tmp_cursor cur_view_data;
BEGIN
OPEN tmp_cursor FOR
select * from avrajit;
cur_inout := tmp_cursor;
END sp_view_ledger;
END PKG_VIEW_LEDGER;
/
-----------------------------------------------------
Package Body created.
0.04 seconds