刚刚学创建包,写了个超简单的怎么就出错了不知怎么回事找不出问题所在
分割线后面是show error显示的错误SQL> create or replace package body my_package is
  2  procedure my_procedure(name varchar2,num number);
  3  function my_function(name varchar2) return number;
  4  end;
  5  /
 
Warning: Package body created with compilation errors -------------------------------------------------------
SQL> show error;
Errors for PACKAGE BODY SCOTT.MY_PACKAGE:
 
LINE/COL ERROR
-------- -----------------------------------------------------
1/14     PLS-00905: 对象 SCOTT.MY_PACKAGE 无效
1/14     PLS-00304: 如果没有说明,则无法编译 'MY_PACKAGE' 主体
0/0      PL/SQL: Compilation unit analysis terminated

解决方案 »

  1.   

    package  分为“声明”和“包体”两个部分,你只写了包体部分 所以报错
      

  2.   

    示例:
    --package
    CREATE OR REPLACE PACKAGE PCK_DOMAIN
    IS
    FUNCTION GET_DEPTNO(IN_DNAME VARCHAR2) RETURN VARCHAR2;
    PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2) ;
    END PCK_DOMAIN ;--package body
    CREATE OR REPLACE PACKAGE BODY PCK_DOMAIN IS
    --存储过程实现
      PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2)
      IS
      IN_DEPNO VARCHAR2(10);
      BEGIN
        IN_DEPNO:=GET_DEPTNO(IN_NAME);
        UPDATE EMP SET HIREDATE=TRUNC(SYSDATE)-7 WHERE DEPTNO = IN_DEPNO ;
        COMMIT;
        EXCEPTION WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('PROC->ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm));
          ROLLBACK;
      END UPDATE_HIREDATE ;
    END PCK_DOMAIN;
      

  3.   

    明白了,还问下是不是在创建包时,必须先不用body声明后用body实现呢?
      

  4.   

    必须先声明包头
    CREATE OR REPLACE PACKAGE pk1 is
    ............
    end pk1;然后包体实现
    CREATE OR REPLACE PACKAGE BODY pk1 is
    ............
    end pk1;光写包体是无法编译的!!
      

  5.   


    对,包头是不包含关键字body的,只是包体的实现部分才用关键字body进行区别。
    这只是一个逻辑关系。