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

前端之家收集整理的这篇文章主要介绍了数组 – 空数组的array_length()返回NULL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在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;
原文链接:https://www.f2er.com/postgresql/192667.html

猜你在找的Postgre SQL相关文章