【问题标题】:PLS-00302: component 'DEP_DET' must be declared - Why am i not able to fetch detailsPLS-00302:必须声明组件“DEP_DET”-为什么我无法获取详细信息
【发布时间】:2018-04-05 10:48:03
【问题描述】:
 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;

错误 错误报告: ORA-06550:第 23 行,第 30 列: PLS-00302:必须声明组件“DEP_DET” ORA-06550:第 24 行,第 2 列: PL/SQL: ORA-00904: : 无效标识符 ORA-06550:第 21 行,第 2 列: PL/SQL:忽略 SQL 语句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

【问题讨论】:

  • 你到底想在这里做什么。?为什么需要这么多类型、记录和集合? .如果您确定自己想要做什么,那么会有一个比您在这里尝试实现的更简单的解决方案。
  • 我有一个多级集合,第一列是记录类型,第二列是表类型。类型 Class_Grp 是记录 ( Dep_Det Dep_Rec_Typ , Emp_Dt Emp_Tt );我必须将数据提取到上述类型的表中。能否请您告诉我如何编写相同的查询

标签: oracle plsql


【解决方案1】:

我不确定你是否可以在这种结构中使用批量收集,但你可以很容易地使用循环。

   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;

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多