oracle PLS-00103:遇到符号“CREATE”

vd2z7a6w  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(165)

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

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更多的软件包,我坚持这个错误消息,无论我做什么。我甚至试图剥离一切到最低限度,如上所示,但是错误消息似乎并没有消失。顺便说一句,我在登录到我的Oracle 11 G数据库后,正在命令行SQL Plus会话上执行这个。是的- SET SERVEROUTPUT ON --被执行,错误消息与这个命令无关。
我错过了什么?

92dk7w1h

92dk7w1h1#

第5行缺少一个/
对于;/here之间的差异,有一个很好的答案。
基本上,当通过脚本运行CREATE块时,需要使用/让SQLPlus知道该块何时结束,因为PL/SQL块可以包含许多;的示例。

Further reference第一个字符

SQLPlus处理PL/SQL子程序的方式与处理SQL命令的方式相同,只是分号(;)或空行不会终止和执行块。通过在新行中单独输入句点(.)来终止PL/SQL子程序。也可以通过在新行中单独输入斜杠(/)来终止和执行PL/SQL子程序。
。。
SQL
Plus会将您输入的子程序储存在SQL缓冲区中。请使用RUN或斜扛(/)命令来执行目前的子程序。分号(;)会被视为PL/SQL子程序的一部分,不会执行命令。

cx6n0qe3

cx6n0qe32#

对我来说/不得不在一个新的行。
例如
第一个月
不起作用

create type emp_t;
/
成功了

fv2wmkja

fv2wmkja3#

在我的例子中,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?

3ks5zfa0

3ks5zfa04#

分别运行包声明和包体。

相关问题