CREATE OR REPLACE TYPE T_TYPE AS OBJECT(VARCH VARCHAR2(20));CREATE OR REPLACE TYPE T_TABLE IS TABLE OF T_TYPE;
函数体:
create or replace function ABCDDD return T_TABLE is
AAA T_TABLE:=T_TABLE();
begin
  AAA.EXTEND(1);
  AAA(1).VARCH:='CC';
  return(AAA);
end ;
测试:
DECLARE
BBB T_TABLE;
BEGIN
BBB:=ABCDDD(1);
FOR I IN 1..BBB.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(BBB(I).VARCH);
END LOOP;
END;
/
返回:
ORA-06530: Reference to uninitialized composite
ORA-06512: at "SCOTT.ABCDDD", line 10
ORA-06512: at line 4
不知函数体定义时哪里出错了。主要是因为T_TABLE是T_TYPE的数组。
可是不知怎么解决。
希望高手帮助

解决方案 »

  1.   

    這個試一下package能否完成 
    先在頭部定義結構再在包體中使用
      

  2.   

    -- 不知道为什么调用函数的时候会有参数“...ABCDDD(1); ...”,最好写在一个PACKAGE里面。TRY IT ..
    SQL> CREATE OR REPLACE PACKAGE FUN_PKG_TEST IS
      2  -- DECLARE THE TYPES
      3    TYPE T_TYPE IS RECORD(VARCH VARCHAR2(20));
      4    TYPE T_TABLE IS TABLE OF T_TYPE;
      5  
      6    -- PUBLIC FUNCTION AND PROCEDURE DECLARATIONS
      7    FUNCTION ABCDDD RETURN T_TABLE;
      8  
      9  END FUN_PKG_TEST;
     10  /Package createdExecuted in 0.093 secondsSQL> CREATE OR REPLACE PACKAGE BODY FUN_PKG_TEST IS
      2  
      3    -- FUNCTION AND PROCEDURE IMPLEMENTATIONS
      4    FUNCTION ABCDDD RETURN T_TABLE IS
      5      AAA T_TABLE:=T_TABLE();
      6    BEGIN
      7      AAA.EXTEND(1);
      8      AAA(1).VARCH:='CC';
      9      RETURN(AAA);
     10    END;
     11  
     12  END FUN_PKG_TEST;
     13  /Package body createdExecuted in 0.016 secondsSQL> DECLARE
      2      BBB FUN_PKG_TEST.T_TABLE;
      3  BEGIN
      4      BBB:=FUN_PKG_TEST.ABCDDD;
      5      FOR I IN 1..BBB.COUNT LOOP
      6      DBMS_OUTPUT.PUT_LINE(BBB(I).VARCH);
      7      END LOOP;
      8  END;
      9  /CCPL/SQL procedure successfully completedExecuted in 0 seconds