PLSQL 废话 (?) 包和包正文中的错误 PLS-00103
Posted
技术标签:
【中文标题】PLSQL 废话 (?) 包和包正文中的错误 PLS-00103【英文标题】:PLSQL Nonsense (?) Error PLS-00103 in Package and Package Body 【发布时间】:2018-04-12 23:31:20 【问题描述】:我得到了一个我认为是一个程序的荒谬错误。
CREATE OR REPLACE PACKAGE reg AS
TYPE ref_cursor IS ref cursor;
...
FUNCTION show_enrollments RETURN ref_cursor;
PROCEDURE return_prereqs
(param_dept_code IN prerequisites.dept_code%type,
param_course_no IN prerequisites.course_no%type);
> PROCEDURE enroll
> (param_sid IN enrollments.sid%type,
> param_classid IN enrollments.classid%type,
> err_msg OUT varchar(76));
PROCEDURE delete_student
(param_sid IN enrollments.sid%type);
...
END;
/
show errors
我收到的包裹错误
LINE/COL ERROR
-------- -------
31/23 PLS-00103: Encountered the symbol "(" when expecting one of the
following:
:= . ) , @ % default character
The symbol ":=" was substituted for "(" to continue.
我得到的包体错误
LINE/COL ERROR
-------- -------
328/23 PLS-00103: Encountered the symbol "(" when expecting one of the
following:
:= . ) , @ % default character
The symbol ":=" was substituted for "(" to continue.
这是包体中的过程
PROCEDURE enroll
(param_sid IN enrollments.sid%type,
param_classid IN enrollments.classid%type,
err_msg OUT varchar(76))
IS...
我在这里做傻事吗?我看不出有什么问题,这很令人沮丧。
【问题讨论】:
【参考方案1】:我很确定它是 err_msg OUT varchar(76)
,因为 Oracle 中没有 VARCHAR
数据类型,而只有 VARCHAR2
。
试试:
PROCEDURE enroll
(param_sid IN enrollments.sid%type,
param_classid IN enrollments.classid%type,
err_msg OUT varchar2(76))
IS...
更多信息请参见SQL Data Types in the PL/SQL Language Reference。
【讨论】:
当我最初收到错误时,我将它从 varchar2 更改为 varchar。把它改回来给了我一些关于 PROCEDURE 被静态或其他东西取代的信息。我将它回滚到它工作的时候并重新实现了添加,现在它似乎正在工作。感谢您的尝试:)【参考方案2】:您好,请按以下方式从程序中删除尺寸:
PROCEDURE enroll
(param_sid IN enrollments.sid%type,
param_classid IN enrollments.classid%type,
err_msg OUT varchar2);
这里我也改了名字,但你可以保留你的
有大小:
删除大小后:
【讨论】:
以上是关于PLSQL 废话 (?) 包和包正文中的错误 PLS-00103的主要内容,如果未能解决你的问题,请参考以下文章