CREATE TYPE PERSON IS VARRAY(4) OF VARCHAR2(30);
/CREATE TYPE PERSON_ARRAY IS VARRAY(4) OF PERSON;
/CREATE OR REPLACE PACKAGE BODY TEST
ASFUNCTION MAIN (BODY1      IN VARCHAR2,
BODY2 IN VARCHAR2,
BODY3 IN VARCHAR2)
RETURN PERSON_ARRAY
IS
BEGIN
    RETURN PERSON_ARRAY(PERSON(BODY1, BODY1, BODY1, to_char(sysdate)), PERSON(BODY2, BODY2, to_char(sysdate), BODY2), PERSON(BODY3, to_char(sysdate), BODY3, BODY3), PERSON(to_char(sysdate), BODY1, BODY1, BODY1));
END MAIN;
END TEST;
/实行后就报错

解决方案 »

  1.   


    -- 楼主是不是没有定义包头,或包头写有的问题
    -- 这是你的代码,我简单的改了改,你参考一下,有问题可以@我SQL> CREATE TYPE PERSON IS VARRAY(4) OF VARCHAR2(30);
      2  /
    Type created
    SQL> CREATE TYPE PERSON_ARRAY IS VARRAY(4) OF PERSON;
      2  /
    Type created
    SQL> CREATE OR REPLACE PACKAGE TEST
      2  AS
      3      FUNCTION MAIN (BODY1      IN VARCHAR2,
      4      BODY2    IN VARCHAR2,
      5      BODY3    IN VARCHAR2)
      6      RETURN PERSON_ARRAY;
      7  END TEST;
      8  /
    Package created
    SQL> CREATE OR REPLACE PACKAGE BODY TEST
      2  AS
      3      FUNCTION MAIN (BODY1      IN VARCHAR2,
      4          BODY2 IN VARCHAR2,
      5          BODY3 IN VARCHAR2)
      6          RETURN PERSON_ARRAY
      7      IS
      8      BEGIN
      9          RETURN PERSON_ARRAY(
     10              PERSON(BODY1, BODY1, BODY1, to_char(sysdate)),
     11              PERSON(BODY2, BODY2, to_char(sysdate), BODY2),
     12              PERSON(BODY3, to_char(sysdate), BODY3, BODY3),
     13              PERSON(to_char(sysdate), BODY1, BODY1, BODY1)
     14          );
     15      END MAIN;
     16  END TEST;
     17  /
    Package body created
    SQL> select test.main(1,2,3) from dual ;
    TEST.MAIN(1,2,3)
    ----------------
    <Object>
    SQL> drop package TEST;
    Package dropped
    SQL> drop type PERSON_ARRAY ;
    Type dropped
    SQL> drop type person;
    Type droppedSQL>