我正在一個包內創建一個程序,但在執行下面的腳本時得到以下錯誤
CREATE PACKAGE doc_interface AS
code_value VARCHAR2(30 CHAR) ;
PROCEDURE list_doc (
lg_code IN fpl_ref.lang%TYPE,
pl_no IN prt_req.pl_no%TYPE,
cl_no IN prt_req.cl_no%TYPE,
ct_no IN prt_req.ct_no%TYPE,
potab_doc_list OUT custDocTab)
AS
BEGIN[/span
potab_doc_list := NEW custDocTab()。
如果pl_no IS NOT NULL AND cl_no IS NULL
THEN
select *
BULK COLLECT INTO potab_doc_list
from cs_record where req_id = 19736543;
END IF;
例外情況
WHEN OTHERS
THEN
z_error ('Error while fetching records =' || SQLERRM) 。
END list_doc;
END doc_interface。
錯誤:
[Error] 語法檢查(12: 0)。ERROR 第13行,第1列, ending_line 13, ending_col 5, 發現'BEGIN', 期待。外來語言
不明白它期待的是什么,而不是BEGIN。
uj5u.com熱心網友回復:
你不要把實作代碼放在PACKAGE(SPEC)中,你要在PACKAGE BODY中定義。
另外,如果你把 CODE_VALUE 放在規范的正文中,你將無法在包外參考它。
所以更像是-
CREATE PACKAGE DOC_INTERFACE AS
code_value VARCHAR2(30 CHAR) ;
PROCEDURE list_doc (
lg_code IN fpl_ref.lang%TYPE,
pl_no IN prt_req.pl_no%TYPE,
cl_no IN prt_req.cl_no%TYPE,
ct_no IN prt_req.ct_no%TYPE,
potab_doc_list OUT custDocTab)。)
END DOC_INTERFACE。
/
CREATE PACKAGE BODY doc_interface AS
PROCEDURE list_doc (
lg_code IN fpl_ref.lang%TYPE,
pl_no IN prt_req.pl_no%TYPE,
cl_no IN prt_req.cl_no%TYPE,
ct_no IN prt_req.ct_no%TYPE,
potab_doc_list OUT custDocTab)
AS
BEGIN[/span
potab_doc_list := NEW custDocTab()。
如果pl_no IS NOT NULL AND cl_no IS NULL
THEN
select *
BULK COLLECT INTO potab_doc_list
from cs_record where req_id = 19736543;
END IF;
例外情況
WHEN OTHERS
THEN
z_error ('Error while fetching records =' || SQLERRM) 。
END list_doc;
END doc_interface。
/
uj5u.com熱心網友回復:
你所展示的代碼,用`CREATE PACKAGE,是在創建一個包的規范--但你包含了程式主體,而這些都屬于包的主體。你需要分別創建規范和主體:
CREATE PACKAGE doc_interface AS
code_value VARCHAR2(30 CHAR) ;
PROCEDURE list_doc (
lg_code IN fpl_ref.lang%TYPE,
pl_no IN prt_req.pl_no%TYPE,
cl_no IN prt_req.cl_no%TYPE,
ct_no IN prt_req.ct_no%TYPE,
potab_doc_list OUT custDocTab)。)
END doc_interface。
/
then
CREATE PACKAGE BODY doc_interface as
PROCEDURE list_doc (
lg_code IN fpl_ref.lang%TYPE,
pl_no IN prt_req.pl_no%TYPE,
cl_no IN prt_req.cl_no%TYPE,
ct_no IN prt_req.ct_no%TYPE,
potab_doc_list OUT custDocTab)
AS
BEGIN[/span
potab_doc_list := NEW custDocTab()。
如果pl_no IS NOT NULL AND cl_no IS NULL
THEN
select *
BULK COLLECT INTO potab_doc_list
from cs_record where req_id = 19736543;
END IF;
例外情況
WHEN OTHERS
THEN
z_error ('Error while fetching records =' || SQLERRM) 。
END list_doc;
END doc_interface。
/
不清楚你是想讓code_value在包規范中宣告--在那里它將是公共的--還是在包主體中宣告--在那里它將是私有的。
一個包總是有一個規范,它宣告了可以從包外參考的公共專案。
如果公共專案包括游標或子程式,那么該包還必須有一個主體。該主體必須定義公共游標的查詢和公共子程式的代碼。主體還可以宣告和定義不能從包之外參考的私有專案,但這些專案對于包的內部運作是必要的。
如果您確實有/需要規范級變數,也請閱讀包的狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324985.html
標籤:
