将多个数组作为输入传递给PostgreSQL中的函数
我需要将2个数组作为输入传递给函数 数组1:账号、工资等 阵列2: {1011,帕拉马塔西部公路100号102单元} {1012,'+61426999888'} 在上面的示例中,数组2可以是动态的,这意味着它们最多可以传递500个键 如何处理每个数组键和值,因为我需要在addresss表中存储地址信息,在phone表中存储电话号码 我需要帮助才能访问数组中的每个元素,但我不知道如何处理数组2中的第二个元素(例如:+61426999888) 然后我使用:将多个数组作为输入传递给PostgreSQL中的函数,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,我需要将2个数组作为输入传递给函数 数组1:账号、工资等 阵列2: {1011,帕拉马塔西部公路100号102单元} {1012,'+61426999888'} 在上面的示例中,数组2可以是动态的,这意味着它们最多可以传递500个键 如何处理每个数组键和值,因为我需要在addresss表中存储地址信息,在phone表中存储电话号码 我需要帮助才能访问数组中的每个元素,但我不知道如何处理数组2中的第二个元素(例如:+61426999888) 然后我使用: SELECT * FROM schema
SELECT *
FROM schema.test(ARRAY['9361030699999'], ARRAY[['1011','Unit 102, 100 Wester highway, Paramataa'],['1012','+61426999888']]);
下面的函数显示了访问多维数组的几种方法。只需使用切片在数组中循环,这是最简单的方法,
c
变量的存在就是为了打印“外部”索引,根本不需要
另一种方法是直接访问值。然而,我不知道如何通过索引访问获取每个“子数组”本身-例如,ar[2:2]
返回{{values}}
,(ar[2:2])[1]
返回NULL,并且(ar[2:2])[1][1]
返回子数组中该索引处的项的值-中间一个返回NULL的值是我得不到的。如果您可以获得它,那么您可以使用ARRAY\u UPPER
动态访问所有值,而无需使用FOREACH/SLICE
还要注意,我没有声明TEXT[][]
——这没有什么区别
CREATE OR REPLACE FUNCTION public.f1(ar TEXT[])
RETURNS VOID AS
$BODY$
DECLARE
_ar TEXT[];
c INTEGER := 0;
BEGIN
FOREACH _ar SLICE 1 IN ARRAY ar LOOP
c := c + 1;
FOR i IN 1..ARRAY_UPPER(_ar, 1) LOOP
RAISE NOTICE '%.%: %', c, i, _ar[i];
END LOOP;
END LOOP;
RAISE NOTICE 'Alternative: %, %', (ar[2:2])[1][1], (ar[2:2])[1][2];
END
$BODY$
LANGUAGE plpgsql IMMUTABLE;
电话:
SELECT*FROM public.f1(数组['1011','unit102,100 Wester highway,Paramataa'],['1012','+61426999888'])代码>
印刷品:
NOTICE: 1.1: 1011
NOTICE: 1.2: Unit 102, 100 Wester highway, Paramataa
NOTICE: 2.1: 1012
NOTICE: 2.2: +61426999888
NOTICE: Alternative: 1012, +61426999888
是的,我同意你的看法,[]没有区别。我将尝试以上线索和更新的结果
NOTICE: 1.1: 1011
NOTICE: 1.2: Unit 102, 100 Wester highway, Paramataa
NOTICE: 2.1: 1012
NOTICE: 2.2: +61426999888
NOTICE: Alternative: 1012, +61426999888