将多个数组作为输入传递给PostgreSQL中的函数

将多个数组作为输入传递给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

我需要将2个数组作为输入传递给函数

数组1:账号、工资等

阵列2: {1011,帕拉马塔西部公路100号102单元} {1012,'+61426999888'}

在上面的示例中,数组2可以是动态的,这意味着它们最多可以传递500个键 如何处理每个数组键和值,因为我需要在addresss表中存储地址信息,在phone表中存储电话号码

我需要帮助才能访问数组中的每个元素,但我不知道如何处理数组2中的第二个元素(例如:+61426999888)

然后我使用:

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