FOR i IN 1..array_length(array,1) LOOP --array[i] something in hereEND LOOP;
当我给sprocs一个空数组时,会出现这些问题.而不是不进入循环,sproc只是返回一个错误,指出FOR LOOP的上限为NulL.不应该是0吗
我正在做FOR LOOP吗?
在使用空数组时没有返回NulL的情况下,是否有其他方法在LOOP中使用相同的边界?
注意:我知道我可以在LOOP之前总是使用一个条件,像这样:
IF array_length(array,1) IS NOT NulL THEN
但问题是:这个sproc应该在最短的时间内处理数千个呼叫.因此,我不是在为处理增加不必要的开销.我只是想看看有没有办法“循环”一个LOOP中的一个空数组.
和往常一样,如果要对NulL值有不同的行为,请使用coalesce结构:FOR i IN 1..coalesce(array_length(array,1),0) LOOP RAISE NOTICE '%',array[i];END LOOP;
对于返回值:array_length(x,N)返回第N维的元素数.由于空数组没有维,所以返回NulL.你是对的,如果你只考虑简单的数组,但对于多维数组来说是有意义的.
编辑:像Erwin Brandstetter在评论中写道,使用array_lower / upper来循环数组索引更为正确.这些将适用于不是基于1的数组.这些也采取维度论证并要求合并:
FOR i IN coalesce(array_lower(array,1)..coalesce(array_upper(array,1) LOOP RAISE NOTICE '%',array[i];END LOOP;总结
以上是内存溢出为你收集整理的数组 – 空数组的array_length()返回NULL全部内容,希望文章能够帮你解决数组 – 空数组的array_length()返回NULL所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)