为啥批量收集到子句限制了 pl/sql 中嵌套表的大小
Posted
技术标签:
【中文标题】为啥批量收集到子句限制了 pl/sql 中嵌套表的大小【英文标题】:Why bulk collect into clause is limiting the size of nested table in pl/sql为什么批量收集到子句限制了 pl/sql 中嵌套表的大小 【发布时间】:2011-10-22 11:23:51 【问题描述】:declare
type yy is table of t12.name%type;
y yy:=yy();
n number:=1;
begin
y.extend(10);
select name bulk collect into y from t12;
--select name into y(5) from t12 where id=1; If i uncomment this line it gives error
for i in (select name from t12)
loop
dbms_output.put_line(y(n));
n:=n+1;
end loop;
end;
【问题讨论】:
表 t12 中只有 4 行我使用 y.extend(10) 分配了 10 个块。为什么我无法访问 y(5) 注释select name bulk collect
行并取消注释当前注释的行...错误应该消失了...
are nooooooooo....这就是问题所在..我知道它会起作用...但问题是...批量收集..我的嵌套表在做什么。 .为什么我不能在使用批量收集后向此表添加更多元素...
您可以添加更多元素...您尝试访问索引 5 处的元素,而无需首先检查该元素是否存在...builk collect
替换了您的嵌套表 - 它创建了一个新表.
现在这就是我所谓的概念构建...我也这么想..但我没有信心..但现在..一切都很清楚..tnx反正....
【参考方案1】:
你能在不先初始化y
的情况下进行测试吗?嵌套表不应该使用批量收集进行初始化。然后你可以用extend
添加元素。
declare
type yy is table of t12.name%type;
y yy;
begin
select name bulk collect into y from t12;
end;
【讨论】:
您的代码将给出错误..静态...引用未初始化的集合...如果您没看错,我已经使用构造函数初始化了表 y... 我也做了 y.extend(10)..所以实际上我没有使用批量收集初始化它我只是分配一些值 它不会引发错误。请参阅BULK COLLECT Clause 中的示例 12-16。您正在使用y yy:=yy();
对其进行初始化。不应该像您那样使用批量收集。以上是关于为啥批量收集到子句限制了 pl/sql 中嵌套表的大小的主要内容,如果未能解决你的问题,请参考以下文章
oracle ORA-06502:PL/SQL:数字或值错误:批量绑定:截断绑定