41

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

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 -- 执行,错误信息与此命令无关。

我错过了什么?

4

4 回答 4

68

在第 5 行有一个/缺失。

;关于和/ 这里的区别有一个很好的答案。

基本上,当通过脚本运行CREATE块时,您需要/让 SQLPlus 知道块何时结束,因为 PL/SQL 块可以包含许多;.

于 2013-12-02T17:33:48.883 回答
1

对我来说 / 必须换个新线。

例如

create type emp_t;/

没用

create type emp_t;

/

工作。

于 2020-08-07T10:16:23.303 回答
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;

参考在 PL/SQL 中创建表?

于 2021-03-16T02:43:03.800 回答
-3

分别运行包声明和正文。

于 2015-04-22T23:50:29.883 回答