【问题标题】:PLS-00103: Encountered the symbol "CREATE"PLS-00103:遇到符号“CREATE”
【发布时间】:2013-12-02 17:17:33
【问题描述】:

这个包有什么问题,因为它给出了错误?

CREATE OR REPLACE PACKAGE PKG_SHOW_CUST_DETAILS 
AS
    PROCEDURE SHOW_CUST_DETAILS( myArg VARCHAR2);
END PKG_SHOW_CUST_DETAILS;

CREATE OR REPLACE PACKAGE BODY PKG_SHOW_CUST_DETAILS 
AS
    PROCEDURE SHOW_CUST_DETAILS(myArg VARCHAR2)
    IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE(myArg);        
    END SHOW_CUST_DETAILS;

END PKG_SHOW_CUST_DETAILS;
/

在编译上述脚本时,我收到以下错误:

SQL> 显示错误 PACKAGE PKG_SHOW_CUST_DETAILS 的错误: LINE/COL 错误 -------- ------------------------------------------ ---------------------- 6/1 PLS-00103:遇到符号“CREATE”

这个包很简单,我无法编译它。我搜索了有关此错误消息的早期答案,但没有一个确实解决了我的问题。 对于另外 2 个包,我一直收到此错误,无论我做什么,我都会遇到此错误消息。如上所示,我什至尝试将所有内容都剥离到最低限度,但错误消息似乎并没有消失。 顺便说一句,我在登录到我的 Oracle 11G 数据库后在命令行 SQL plus 会话上执行此操作。 YES- SET SERVEROUTPUT ON -- 执行,错误信息与此命令无关。

我错过了什么?

【问题讨论】:

  • 您在包定义的create 之后缺少/
  • 是的,在新行上添加一个'/'作为定义后的第一个字符后解决了问题。谢谢
  • 顺便说一句,代码是作为脚本执行的,只有这样才能成功。

标签: oracle pls-00103


【解决方案1】:

在第 5 行,缺少一个 /

关于;/here之间的区别有一个很好的答案。

基本上,当通过脚本运行CREATE 块时,您需要使用/ 让SQLPlus 知道块何时结束,因为一个PL/SQL 块可以包含; 的许多实例。

【讨论】:

  • 人们在使用 Liquibase 创建包后因为PLS-00103 来到这里:如果您使用<sql> 来执行此操作,则必须将包定义放在一个<sql> 块,然后是另一个 <sql> 块中的实际包体。
【解决方案2】:

对我来说 / 必须换行。

例如

create type emp_t;/

没用

但是

create type emp_t;

/

工作。

【讨论】:

    【解决方案3】:

    就我而言,EXECUTE IMMEDIATE ('CREATE TABLE ...') 有效,例如:

    DECLARE 
       myVar INT;
    BEGIN
    SELECT 2 INTO myVar FROM dual;
    IF myVar > 1 THEN
        EXECUTE IMMEDIATE('Create Global Temporary Table TestTemp ( id VARCHAR2(2) ) ON COMMIT PRESERVE ROWS');
    END IF;
    END;
    

    参考Create Table As within PL/SQL?

    【讨论】:

      【解决方案4】:

      分别运行包声明和主体。

      【讨论】:

      • 我认为,OP 将不胜感激。
      • 这将解决这个问题,而无需真正解释原始代码示例的问题。一些团队理所当然地将规范和正文分成单独的文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2020-09-10
      • 2018-01-23
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多