加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:27:59 所属栏目:百科 来源:网络整理
导读:我正在PL / pgSQL中开发一些存储的程序,其中一些是给我一些问题.我正在开发的sprocs通过参数我在FOR LOOP中使用的数组来获取其所有元素.要定义FOR LOOP的上限,我使用array_length函数. FOR i IN 1..array_length(array,1) LOOP --array[i] something in here
我正在PL / pgSQL中开发一些存储的程序,其中一些是给我一些问题.我正在开发的sprocs通过参数我在FOR LOOP中使用的数组来获取其所有元素.要定义FOR LOOP的上限,我使用array_length函数.
FOR i IN 1..array_length(array,1) LOOP

   --array[i] something in here

END 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读