【问题标题】:Oracle SQL Developer can't create package bodyOracle SQL Developer 无法创建包体
【发布时间】:2012-01-10 10:30:26
【问题描述】:
 CREATE OR REPLACE PACKAGE packet AS
   TYPE tip IS RECORD(a1 INT,a2 VARCHAR2(20));
   FUNCTION getrow return tip;
   PROCEDURE setrow(v tip);
 END packet;
 /
 CREATE OR REPLACE PACKAGE BODY packet AS

   PROCEDURE setrow(v tip) IS
     BEGIN
     dbms_output.put_line('kikkkk');
     END;
  end packet;

我不断得到: 警告:执行完成并发出警告

并且无法调用该过程:

*错误报告:ORA-04063:包体“IRT.PACKET”有错误 ORA-06508:PL/SQL:找不到被调用的程序单元:
“IRT.PACKET”ORA-06512:第 7 行
04063. 00000 - “%s 有错误”
*原因:尝试执行存储过程或使用具有 错误。对于存储过程,问题可能是语法错误 或引用其他不存在的程序。对于视图, 问题可能是视图定义查询中的参考 一个不存在的表。 也可以是引用不存在或 无法访问的类型。
操作:修复错误和/或根据需要创建引用的对象。

【问题讨论】:

    标签: sql oracle plsql oracle-sqldeveloper


    【解决方案1】:

    您必须在包规范中声明的包体中定义函数GETROW。

    这将使您的包能够编译,然后您应该能够调用它。

    这是在我添加 GETROW 时为我编译的

    CREATE OR REPLACE PACKAGE packet
    AS
       TYPE tip IS RECORD(
          a1 INT,
          a2 VARCHAR2( 20 )
       );
    
       FUNCTION getrow
          RETURN tip;
    
       PROCEDURE setrow( v tip );
    END packet;
    /
    
    CREATE OR REPLACE PACKAGE BODY packet
    AS
       FUNCTION getrow
          RETURN tip
       IS
          v_tip tip;
       BEGIN
          v_tip.a1 := 1;
          v_tip.a2 := 'test';
          RETURN v_tip;
       END;
    
       PROCEDURE setrow( v tip )
       IS
       BEGIN
          DBMS_OUTPUT.put_line( 'kikkkk' );
       END;
    END packet;
    

    【讨论】:

    • 当您尝试编译包时遇到什么错误?是 ORA-24344 吗?
    • Its no error on compile. It s just a warning and I cant 看到它。
    • 复制我添加到答案中的代码,错误是由于缺少 GETROW 定义,正如我添加它所证明的那样,导致包编译得很好。
    【解决方案2】:

    在 SQL Developer 工作表中,您可以运行以下查询:

     select * from user_errors
    

    这将为您提供以下结果:

    NAME    | TYPE         |SEQUENCE |LINE |POSITION |TEXT  ATTRIBUTE                                 |MESSAGE_NUMBER
    --------+--------------+---------+-----+---------+------------------------------------------------+--------------
    PACKET  | PACKAGE BODY |       1 |   3 |      13 |PLS-00323: subprogram or cursor 'GETROW' is decl| ERROR 323
                                                     |ared in a package specification and must be defi
                                                     |ned in the package body  
    

    如您所见,这很容易发现您的灯笼裤:您没有在包体中定义 GETROW。添加这样的存根将允许包编译:

     FUNCTION getrow
         return tip 
     IS
          rv tip;
     BEGIN
          return rv;
     END;
    

    【讨论】:

    • 难以置信..我还必须使用 SCHEMA 定义包体:创建或替换包体 IRT.packet AS ... 现在它可以工作了。 10x
    • 您没有在自己的架构中编译它?
    • “难以置信”:le mot juste
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多