PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;

Posted

技术标签:

【中文标题】PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;【英文标题】:PLS-00103: Encountered the symbol "TEST_PKG" when expecting one of the following: ; 【发布时间】:2015-10-25 16:11:32 【问题描述】:

我收到这个错误

错误:检查编译器日志 6/3 PLS-00103:遇到 预期以下之一时的符号“BEGIN”:语言

17/1 PLS-00103:遇到符号“PROCEDURE”时 期待以下之一:

end not pragma final 可实例化顺序覆盖静态成员 构造函数映射符号“static”被“PROCEDURE”替换为 继续。

27/5 PLS-00103:遇到符号“TEST_PKG”时 期待以下之一:

;.

请任何人都可以提供帮助。

SET serveroutput ON SIZE 10000;
CREATE OR REPLACE PACKAGE test_pkg
AS
  FUNCTION test_item_fcn(item_name in varchar2) 
     RETURN BOOLEAN
     AS
  BEGIN
  for c1 in (select * from test_item_ref where test_item_ref.item_id = item_name and rownum = 1) loop
    res := true;
    exit; -- only care about one record, so exit.
  end loop;
  return( res );
  EXCEPTION
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
  END test_item_fcn;

PROCEDURE test_PROC1(p_string IN VARCHAR2) 
  AS
  BEGIN
    DBMS_OUTPUT.PUT_LINE('Output: ' || TO_CHAR(test_item_fcn(p_string)));

  EXCEPTION
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
  END test_PROC1;

END test_pkg;
/
SHOW ERRORS;

【问题讨论】:

【参考方案1】:

Oracle 包由两部分组成 - PACKAGEPACKAGE BODY。您应该只在PACKAGE 中定义函数/过程标头。 PACKAGE BODY 将包含实现。

所以您的代码更像PACKAGE BODY 规范 - 只需使用 CREATE OR REPLACE PACKAGE BODY test_pkg

但在此之前 - 创建PACKAGE 规范,如下所示:

CREATE OR REPLACE PACKAGE test_pkg
AS
  FUNCTION test_item_fcn(item_name in varchar2) 
     RETURN BOOLEAN;

  PROCEDURE test_PROC1(p_string IN VARCHAR2);

END test_pkg;
/


CREATE OR REPLACE PACKAGE BODY test_pkg
AS
  FUNCTION test_item_fcn(item_name in varchar2) 
     RETURN BOOLEAN
     AS
  BEGIN
  for c1 in (select * from test_item_ref where test_item_ref.item_id = item_name and rownum = 1) loop
    res := true;
    exit; -- only care about one record, so exit.
  end loop;
  return( res );
  EXCEPTION
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
  END test_item_fcn;

PROCEDURE test_PROC1(p_string IN VARCHAR2) 
  AS
  BEGIN
    DBMS_OUTPUT.PUT_LINE('Output: ' || TO_CHAR(test_item_fcn(p_string)));

  EXCEPTION
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
  END test_PROC1;

END test_pkg;
/

【讨论】:

以上是关于PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;的主要内容,如果未能解决你的问题,请参考以下文章

PLS00103:在预期以下情况之一时遇到符号“I”

PLS-00103:在预期以下情况之一时遇到符号“ON”

为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”:

PLS-00103:在预期以下情况之一时遇到符号“END”

错误:PLS-00103:在预期以下情况之一时遇到符号“END”

错误:PLS-00103:在预期以下情况之一时遇到符号“AS”:返回