【问题标题】:bulk collect into table type of objects批量收集到表类型的对象
【发布时间】:2014-05-26 02:28:03
【问题描述】:

我在尝试对对象表使用 BULK COLLECT 语句 ORA-00947: not enough values 时出错。

错误发生在from (select jta.nobject_id,这一行

CREATE OR REPLACE TYPE "T_PPW_WORK"  as object                                     
    (          
      nObjectKey   number,  
      cJobType     varchar2(500),  
      dPlanStart   date,
      dPlanEnd     date,
      cExecutor    varchar2(500),
      cComment     varchar2(4000)
    )

    CREATE OR REPLACE TYPE "T_PPW_WORK_TABLE" as table of T_PPW_WORK;                                         


      function getPlannedOverdueJobs(in_nPlanKey number) return T_PPW_WORK_TABLE is
        l_oWorks T_PPW_WORK_TABLE;    
        l_oWork T_PPW_WORK;    
      begin

        select * bulk collect
          into l_oWorks
          from (select jta.nobject_id,
                       jt.cjobtype_name,                           
                       jta.dactual_start,
                       jta.dactual_finish,
                       st.familiya,
                       jta.ccomment
                  from ppw_jobtype_assign jta
                  left join pgts_sotrudnik st
                    on jta.nworkerid = st.npgts_sotrudnikkey
                  join ppw_jobtype jt
                    on jta.njobtype_id = jt.njobtype_key);
        return l_oWorks;
      end getPlannedOverdueJobs;

是什么原因?

【问题讨论】:

    标签: oracle plsql object-type bulk-collect


    【解决方案1】:
        select * bulk collect
          into l_oWorks
          from (select t_ppw_work(jta.nobject_id,
                       jt.cjobtype_name,                           
                       jta.dactual_start,
                       jta.dactual_finish,
                       st.familiya,
                       jta.ccomment)
                  from ppw_jobtype_assign jta
                  left join pgts_sotrudnik st
                    on jta.nworkerid = st.npgts_sotrudnikkey
                  join ppw_jobtype jt
                    on jta.njobtype_id = jt.njobtype_key);
    

    您需要先使用您定义的对象类型 (t_ppw_work) 转换您的结果集。

    【讨论】:

    • 怎么样?当我有单组数据但使用多组时,我知道该怎么做。
    • 这是您如何定义结果的单行,并使用适当的对象。
    【解决方案2】:

    您可以改为执行以下操作。

    CREATE OR REPLACE EDITIONABLE TYPE  "F_OBJ" AS OBJECT (
    Employee_name VARCHAR2(100),
    Employee_id VARCHAR2 ( 100 ))
    
    CREATE OR REPLACE EDITIONABLE TYPE  "F_TAB" as table of F_OBJ
    
    create or replace function "fname"
    return f_tab
    is
     l_f_tab f_tab;
    
    begin
    SELECT f_obj(employee_name, employee_id) bulk collect into f_tab from employee_table;
    return f_tab;
    end;
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2015-08-10
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2022-11-03
      • 2018-02-20
      相关资源
      最近更新 更多