PLS-00103:遇到符号“CREATE”

时间:2013-12-02 17:17:33

标签: oracle pls-00103

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

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> show errors
Errors for PACKAGE PKG_SHOW_CUST_DETAILS:

LINE/COL ERROR
-------- -----------------------------------------------------------------
6/1      PLS-00103: Encountered the symbol "CREATE"

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

我错过了什么?

4 个答案:

答案 0 :(得分:45)

第5行缺少/

;/ here之间的差异有一个很好的答案。

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

答案 1 :(得分:1)

对我来说/必须换行。

例如

create type emp_t;/

没用

但是

create type emp_t;

/

工作。

答案 2 :(得分:0)

就我而言,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?

答案 3 :(得分:-3)

分别运行包声明和正文。