CREATE OR REPLACE FUNCTION f_test_array(in _colname text)
returns text as $body$
DECLARE colnames text[];
begin
colnames := ARRAY(
SELECT column_name FROM information_schema.columns WHERE table_name='customer'
);
if exists(select _colname = any(colnames))
then return format('%s it exits.', _colname);
else return format('%s not exits.', _colname);
end if;
end
$body$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION f_test_array1(in _colname text)
returns text as $body$
DECLARE colnames text;
begin
colnames := (SELECT string_agg(column_name,',') FROM information_schema.columns WHERE table_name='customer')::text;
if exists(select colnames ilike '%' || quote_literal(_colname) ||'%')
then return format('column %s exits.', _colname);
else return format('column %s does not exits.', _colname);
end if;
end
$body$
LANGUAGE plpgsql;
6条答案
按热度按时间nvbavucw1#
有两种方法。一种是聚合:
另一种是使用数组构造函数:
我假设这是针对plpgsql的。在这种情况下,你可以像这样分配它:
5tmbdcev2#
我遇到了完全相同的问题。只是对Denis给出的解决方案进行了一次修改(必须指定类型):
xyhw6mcr3#
常规:
使用
ARRAY_AGG
:ttvkxqim4#
转换为数据类型“TEXT”将确保您的查询将运行没有任何问题。在plpgsql中,当我们分配给数组变量时,我们不需要使用类型转换。我的要求是获得特定表的所有列名的CSV。我在plpgsql中使用了以下代码。
mjqavswn5#
检查该列是否存在。要点:
if exists(select _colname = any(colnames))
我们也可以使用string_agg
String_agg用法:avkwfej46#
在函数中声明colnames text[]数组,然后在开始中编写以下查询:
SELECT column_name转换为列名FROM信息.SCHEMA.columns WHERE表名= 'aean'