gpt4 book ai didi

oracle - 批量收集到对象表中

转载 作者:行者123 更新时间:2023-12-04 17:36:38 26 4
gpt4 key购买 nike

尝试使用 BULK COLLECT 时声明我收到错误 ORA-00947: not enough values .

一个示例脚本:

CREATE OR REPLACE 
TYPE company_t AS OBJECT (
Company VARCHAR2(30),
ClientCnt INTEGER );
/

CREATE OR REPLACE
TYPE company_set AS TABLE OF company_t;
/

CREATE OR REPLACE
FUNCTION piped_set (
v_DateBegin IN DATE,
v_DateEnd IN DATE
)
return NUMBER /*company_set pipelined*/ as
v_buf company_t := company_t( NULL, NULL);
atReport company_set;
sql_stmt VARCHAR2(500) := '';
begin

select * BULK COLLECT INTO atReport
from (
SELECT 'Descr1', 1 from dual
UNION
SELECT 'Descr2', 2 from dual ) ;

return 1;
end;

错误发生在行 select * BULK COLLECT INTO atReport .

顺便说一句,直接 PL/SQL 工作正常(因此无需将其作为解决方案提及)。 BULK COLLECT的用法成用户表类型是个问题。

最佳答案

您的 company_set是一个对象表,您选择的是值,而不是由这些值组成的对象。这将编译:

select * BULK COLLECT INTO atReport
from (
SELECT company_t('Descr1', 1) from dual
UNION
SELECT company_t('Descr2', 2) from dual ) ;

...但是运行时会抛出 ORA-22950: cannot ORDER objects without MAP or ORDER method因为 union隐式排序来识别和删除重复项,所以使用 union all反而:
select * BULK COLLECT INTO atReport
from (
SELECT company_t('Descr1', 1) from dual
UNION ALL
SELECT company_t('Descr2', 2) from dual ) ;

关于oracle - 批量收集到对象表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com