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的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 编程(三 )程序包和包体,触发器,视图,索引

PL/SQL 编程(三 )程序包和包体,触发器,视图,索引

如何运行使用旧版本包和最新 R 版本和包中的 R 编写的 R 脚本? [关闭]

ODBC的JAR包和PLSQL

包和包体简介

SQL记录-PLSQL-DBMS输出