2017-10-24 11 views
0
Declare 
    Type Dep_Rec_Typ Is Record (Dep_Id Number 
         , DEP_NAME VARCHAR2(30) 
        ); 
    Type Dep1 Is Table Of Dep_Rec_Typ;      
    Type Emp_Rec_Typ Is Record (Employee_Id Number(6) 
         , First_Name Varchar2(20) 
         , Last_Name Varchar2(25) 
         , Email Varchar2(25) 
         , Dep_Id Number 
         ); 
    Type Emp_Tt Is Table Of Emp_Rec_Typ; 
    Type Class_Grp Is Record (Dep_Det Dep_Rec_Typ 
         , Emp_Dt Emp_Tt 
         ); 

    Type Class_Tt Is Table Of Class_Grp;        
    class_det Class_Tt; 
    Begin 
    Select Dep_Id,Dep_Name 
    bulk collect into class_det.Dep_Det 
    From T_Dep; 
    end; 

エラー エラーレポートの詳細を取得することはできませんよコンポーネントのDEP_DET 'を宣言する必要があります' ORA-06550を宣言しなければならない:行24、列2: PL/SQL:ORA-00904:無効な識別子 ORA-06550:行21、列2: PL/SQL: 06550. 00000を無視するSQLステートメント - "行%s、列%s:\ n%s" *原因:通常はPL/SQLのコンパイル・エラーです。 *処置:PLS-00302なぜ私は

+0

ここでは正確に何をしようとしていますか?なぜあなたは非常に多くのタイプ、レコード、コレクションが必要ですか? 。あなたが何をしたいかについて確実なら、ここで達成しようとしているものより簡単な解決策があります。 –

+0

私は最初の列がレコード型で、2番目がテーブル型であるマルチレベルコレクションを持っています。タイプClass_Grpはレコードです(Dep_Det Dep_Rec_Typ 、Emp_Dt Emp_Tt )。上記のタイプのテーブルにデータをフェッチする必要があります。同じ質問を書く方法を教えてください。 – Narender

答えて

0

この種の構造でバルク収集を使用できるかどうかはわかりませんが、ループで簡単に行うことはできます。

cursor cu_t is 
    Select Dep_Id,Dep_Name 
    From T_Dep; 

    i number; 
Begin 
    i := 1; 
    for rec in cu_t loop 
     class_det(i).Dep_Det := rec; 
     -- dbms_output.put_line(class_det(i).Dep_Det.Dep_Id||' '|| class_det(i).Dep_Det.Dep_name); 
     i := i + 1; 
    end loop; 
end;