postgresql - 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$
;
解决方案
您在代码中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$;
推荐阅读
- spotfire - 如何计算 spotfire 前 8 个月生产中的最佳 6
- android - Android Studio Kotlin 代码覆盖率未在装订线中显示突出显示
- r - 将一列数据转换为R中的多列
- c# - Dev express C# 按钮编辑
- c++ - 在 C++ 中使用 enum 而不是 struct 进行标记调度
- android - Flutter TabBarView 不断调用构建器
- python - 为什么我的 Django 表单输入仅在单击提交按钮时呈现?
- swift - Xcode,由多个对象组成的设计元素
- postgresql - Postgres 更新不使用主键索引
- azure - Cosmos DB 中的索引