批量收集到表类型的对象
Posted
技术标签:
【中文标题】批量收集到表类型的对象【英文标题】: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;
是什么原因?
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于批量收集到表类型的对象的主要内容,如果未能解决你的问题,请参考以下文章