数组 – 空数组的array_length()返回NULL

数组 – 空数组的array_length()返回NULL,第1张

概述我正在PL / pgSQL中开发一些存储的程序,其中一些是给我一些问题.我正在开发的sprocs通过参数我在FOR LOOP中使用的数组来获取其所有元素.要定义FOR LOOP的上限,我使用array_length函数. FOR i IN 1..array_length(array,1) LOOP --array[i] something in hereEND LOOP; 当我给spr 我正在PL / pgsql中开发一些存储的程序,其中一些是给我一些问题.我正在开发的sprocs通过参数我在FOR LOOP中使用的数组来获取其所有元素.要定义FOR LOOP的上限,我使用array_length函数.
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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1169724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存