--创建类型
CREATE OR REPLACE TYPE COUNTRYLANGUAGE AS OBJECT(
COUNTRY_NAME VARCHAR2(400),
LANGUAGE_NAME VARCHAR2(100),
OFFICIAL_COMMENT CHAR(1));
--创建数组类型
CREATE OR REPLACE TYPE COUNTRY_LANGUAGE_TYPE IS TABLE OF COUNTRYLANGUAGE;
--函数体
create or replace function all_dependent_objects(OBJECT_NAME VARCHAR2) 
return  DEPENDENT_OBJECT_ARRAY 
is
  DEPENDENT_ARRAY DEPENDENT_OBJECT_ARRAY:=DEPENDENT_OBJECT_ARRAY();
begin
     FOR REC IN(SELECT NAME,TYPE,REFERENCED_NAME,REFERENCED_TYPE 
                FROM USER_DEPENDENCIES
                WHERE NAME=UPPER(OBJECT_NAME)) LOOP
     DEPENDENT_ARRAY.EXTEND(1);
     DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT):=DEPENDENT_ARRAY(null,null,null,null);
     DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT).NAME:=REC.NAME;
     DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT).TYPE:=REC.TYPE;
     DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT).REFERENCED_NAME:=REC.REFERENCED_NAME;
     DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT).REFERENCED_TYPE:=REC.REFERENCED_TYPE;
     END LOOP;
     FOR K IN 1..DEPENDENT_ARRAY.COUNT LOOP
         DBMS_OUTPUT.PUT_LINE(DEPENDENT_ARRAY(K).REFERENCED_NAME);
     END LOOP;
  return DEPENDENT_ARRAY;
end ;
红色的地方报错:
PLS-00316:PL/SQL TABLEs must use a single index
不知道这里的单索引是指什么?
改为一个null时,编译ok,
但是执行时说uninitialized composite

解决方案 »

  1.   

    红色部分代码去掉试试看。
    http://topic.csdn.net/u/20081006/16/f0a09bd5-a440-4a4c-a3fa-a835a353b40d.html
      

  2.   

    DEPENDENT_ARRAY.COUNT的值是多少?
    你用一个数值(比如3或4)代替DEPENDENT_ARRAY.COUNT,试看看
      

  3.   

    你这里给出的类型有错误,并且你的对象名称似乎用了type name.看我的这个:
    CREATE OR REPLACE TYPE DEPENDENT_ARRAY AS OBJECT( 
    NAME VARCHAR2(400), 
    TYPE VARCHAR2(100), 
    REFERENCED_NAME varchar2(100),
    REFERENCED_TYPE VARCHAR2(100)
    ); 
    --创建数组类型 
    CREATE OR REPLACE TYPE DEPENDENT_OBJECT_ARRAY IS TABLE OF DEPENDENT_ARRAY; 
    --函数体 
    create or replace function all_dependent_objects(OBJECT_NAME VARCHAR2) 
    return  DEPENDENT_OBJECT_ARRAY 
    is 
      a_DEPENDENT_ARRAY DEPENDENT_OBJECT_ARRAY:=DEPENDENT_OBJECT_ARRAY(); 
      x number;
    begin 
        FOR REC IN(SELECT NAME,TYPE,REFERENCED_NAME,REFERENCED_TYPE 
                    FROM USER_DEPENDENCIES 
                    WHERE NAME=UPPER(OBJECT_NAME)) LOOP 
        a_DEPENDENT_ARRAY.EXTEND; 
        x := a_DEPENDENT_ARRAY.COUNT;
        a_DEPENDENT_ARRAY(x):=DEPENDENT_ARRAY('', '', '', ''); 
        a_DEPENDENT_ARRAY(x).NAME:=REC.NAME; 
        a_DEPENDENT_ARRAY(x).TYPE:=REC.TYPE; 
        a_DEPENDENT_ARRAY(x).REFERENCED_NAME:=REC.REFERENCED_NAME; 
        a_DEPENDENT_ARRAY(x).REFERENCED_TYPE:=REC.REFERENCED_TYPE; 
        END LOOP; 
        FOR K IN 1..a_DEPENDENT_ARRAY.COUNT LOOP 
            DBMS_OUTPUT.PUT_LINE(a_DEPENDENT_ARRAY(K).REFERENCED_NAME); 
        END LOOP; 
      return a_DEPENDENT_ARRAY; 
    end ; 
      

  4.   

    DEPENDENT_ARRAY DEPENDENT_OBJECT_ARRAY:=DEPENDENT_OBJECT_ARRAY(); DEPENDENT_ARRAY(DEPENDENT_ARRAY.COUNT):=DEPENDENT_ARRAY(null,null,null,null); 这2句,后面的DEPENDENT_ARRAY应该是type 名,前面的DEPENDENT_ARRAY是一个变量名