create or replace type wordtype as object (z varchar2(50));
/
 
create or replace type word as table of wordtype 
/

解决方案 »

  1.   

    to zzzsssccc(籍秋风) :
    word&wordtype怎么使用,能否详细一些,谢谢!to  beckhambobo(beckham) and luckysxn(风花雪) :
    嵌套表怎么使用,能否给一个例子?谢谢!
      

  2.   

    oracle 有数组类型,但在使用之前必须先进行初始化,而且在例如pb之类的前端开发中不能把数组作为参数传入或传出,数组只能在oracle 的procedure里面作为参数传送,下面是一个例子,因为没有对v_list(4)进行初始化所以出错。
    DECLARE
          TYPE Strings IS VARRAY(5) OF VARCHAR2(10);
       
          -- Declare a varray with three elements
         v_List Strings := Strings('One', 'Two', 'Three');
        BEGIN
          -- Subscript between 1 and 3, so this is legal.
          v_List(2) := 'TWO';
      
         -- Subscript beyond count, raises ORA-6533.
         v_List(4) := 'bbb';
       END;
      

  3.   

    --创建可以返回纪录集的函数(不传入表名参数)
    create or replace function testrerecordnotabname (tableid in number)
      return word
        as
          l_data mytabletype :=word();
        begin
          for i in (select * from a where id>=tableid)  loop
            l_data.extend;
            l_data(l_data.count) := wordtype (i.z);
            exit when i.id = 62;
         end loop;  
         return l_data;     
       end;   
    /
    commit;
      

  4.   

    这里有一个索引表的例子,
    其实索引表,嵌套表,数组都是oracle collection的例子
    其中索引表是最灵活的,但是不能用于数据表.
    ----------------------
    CREATE  OR  REPLACE  PACKAGE  packperson  
       AS  
           TYPE  tssn  is  TABLE  of    NUMBER(10)  
           INDEX  BY  BINARY_INTEGER;  
           TYPE  tfname  is  TABLE  of  VARCHAR2(15)  
           INDEX  BY  BINARY_INTEGER;  
           TYPE  tlname  is  TABLE  of  VARCHAR2(20)  
           INDEX  BY  BINARY_INTEGER;  
     
           PROCEDURE  allperson  
                           (ssn        OUT          tssn,  
                             fname    OUT          tfname,  
                             lname    OUT          tlname);  
           PROCEDURE  oneperson  
                   (onessn  IN            NUMBER,  
                     ssn        OUT          tssn,  
                             fname    OUT          tfname,  
                             lname    OUT          tlname);  
    END  packperson;  
    /      
    Create  the  following  package  body  on  your  Oracle  server:  
     
    CREATE  OR  REPLACE  PACKAGE  BODY  packperson  
    AS  
     
    PROCEDURE  allperson  
                           (ssn        OUT          tssn,  
                             fname    OUT          tfname,  
                             lname    OUT          tlname)  
    IS  
           CURSOR  person_cur  IS  
                           SELECT  ssn,  fname,  lname  
                           FROM  person;  
     
           percount  NUMBER  DEFAULT  1;  
     
    BEGIN  
           FOR  singleperson  IN  person_cur  
           LOOP  
                           ssn(percount)  :=  singleperson.ssn;  
                           fname(percount)  :=  singleperson.fname;  
                           lname(percount)  :=  singleperson.lname;  
                           percount  :=  percount  +  1;  
           END  LOOP;  
    END;  
     
    PROCEDURE  oneperson  
               (onessn    IN        NUMBER,  
                             ssn          OUT      tssn,  
                             fname      OUT      tfname,  
                             lname      OUT      tlname)  
    IS  
     CURSOR  person_cur  IS  
                         SELECT  ssn,  fname,  lname  
                         FROM  person  
                         WHERE  ssn  =  onessn;  
     
           percount  NUMBER  DEFAULT  1;  
     
    BEGIN  
           FOR  singleperson  IN  person_cur  
           LOOP  
                           ssn(percount)  :=  singleperson.ssn;  
                           fname(percount)  :=  singleperson.fname;  
                           lname(percount)  :=  singleperson.lname;  
                           percount  :=  percount  +  1;  
           END  LOOP;  
    END;  
    END;  
      

  5.   

    to hepp(皮皮) :
      
      TYPE Strings IS VARRAY(5) OF VARCHAR2(10);
      Strings能否被用作表的字段类型?
      

  6.   

    create or replace type studentlist as table of number(5);
    /
    create table library_catalog(
    catalog_number number(4),
    foreign dey(catalog_number) references books(catalog_number),
    num_copies   number,
    checked_out  studentlist)
    nested table checked_out store as co_tab;
    /
    注意:最后一行的作用.