CREATE OR REPLACE PACKAGE emp_package
IS
  TYPE emp_table_type IS TABLE OF emp%ROWTYPE
  INDEX BY BINARY_INTEGER;
  PROCEDURE read_emp_table (p_emp_table OUT emp_table_type);
END emp_package;CREATE OR REPLACE PACKAGE BODY emp_packageIS
  PROCEDURE read_emp_table (p_emp_table OUT emp_table_type)
  IS
      I BINARY_INTEGER := 0;
  BEGIN
      FOR emp_record IN ( SELECT * FROM emp ) LOOP
      P_emp_table(i) := emp_record;
      I := I + 1;
      END LOOP;
  END read_emp_table;
END emp_package;
报错如下:Compilation errors for PACKAGE SCOTT.EMP_PACKAGEError: PLS-00103: Encountered the symbol "CREATE"
Line: 8
Text: CREATE OR REPLACE PACKAGE BODY emp_package如果我分开执行的话,就会发现包体没有了,只有声明啊!

解决方案 »

  1.   

    CREATE OR REPLACE PACKAGE emp_package
    IS
      TYPE emp_table_type IS TABLE OF emp%ROWTYPE
      INDEX BY BINARY_INTEGER;
      PROCEDURE read_emp_table (p_emp_table OUT emp_table_type);
    END emp_package;
    /
    CREATE OR REPLACE PACKAGE BODY emp_packageIS
      PROCEDURE read_emp_table (p_emp_table OUT emp_table_type)
      IS
          I BINARY_INTEGER := 0;
      BEGIN
          FOR emp_record IN ( SELECT * FROM emp ) LOOP
          P_emp_table(i) := emp_record;
          I := I + 1;
          END LOOP;
      END read_emp_table;
    END emp_package;
    /这样不可以吗?
      

  2.   


    编译是通过了,但是我在plsql里面看不到包里面的存储过程的内容,而且我执行查询语句的时候报如下错误:
     
    SQL> select scott.emp_package.read_emp_table from dual;
     
    select scott.emp_package.read_emp_table from dual
     
    ORA-00904: "SCOTT"."EMP_PACKAGE"."READ_EMP_TABLE": invalid identifier
      

  3.   

    procedure不能这样查询的若要看是否存在,可以查
    select * from user_objects where OBJECT_TYPE = 'PROCEDURE';
      

  4.   

    declare 
       tmp_tbl  read_emp_table.emp_table_type;
    begin 
       emp_package.read_emp_table(tmp_tbl);
    end;
    /