当尝试使用
以下是一个示例脚本:
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
将数据批量插入到用户表类型中。
bulk collect
,您可以使用游标循环代替 (for rec in (select company_t() as comp ...) loop pipe row rec.comp; end loop;
或类似语句)。我想性能会相似。如果您尝试并无法使其正常工作,则应该提出新问题。 - Alex Poolefor x in (select ..) pipe row ( company_t( x.Company, x.ClientCnt) ) )
。我只是想知道,它是否可以更简单一些。无论如何,当前的结果已经很好了,谢谢! - xacinay