首页 > 解决方案 > postgresql plpgsql:无法遍历 varchar[] 类型的数组

问题描述

我正在尝试使用 plpgsql 检查数组中是否存在元素。

我在执行函数时收到“数组下标必须有整数”错误。

select test('IND') 应该返回 true 并且 select test('ING') 应该返回 false

下面是代码

create or replace function test(country varchar) 
returns varchar
language plpgsql
AS $function$
declare
   results varchar;
   countryarr varchar[3];
   i varchar[];
begin  
   countryarr := array['IND','USA','MEX'];

   foreach i slice 1 in array countryarr
    loop
      if countryarr[i]=country
         then results := 'TRUE';
      else
          results := 'FALSE';
      end if;
    end loop;

   return results;
 end;
 $function$
 ;

标签: postgresqlplpgsql

解决方案


您在代码中i被定义为 a varchar[]。它不能用作integer.

你想要这样的东西:

create or replace function test(country varchar) 
returns varchar
language plpgsql
AS $function$
declare
   countryarr varchar[3];
   i text;
begin  
   countryarr := array['IND','USA','MEX'];

   foreach i in array countryarr
    loop
      if i = country
         then return 'TRUE';
      end if;
    end loop;

   return 'FALSE';
 end;
 $function$
 ;

对于您要实现的目标,一个更好的解决方案是:

create or replace function test(country varchar) 
returns varchar
language sql
AS $function$
  select case
           when country = any(array['IND', 'USA', 'MEX']) then 'TRUE' 
           else 'FALSE' 
         end;
$function$;

推荐阅读