我正在解决PL / pgSQL函数的问题,但仍然找不到明确的要求。
我需要在PHP(7.2)中调用我的函数并发送一个像这样的数组。它是数组的数组。
[
[value1(numeric), value2(timestamp)],
[value1(numeric), value2(timestamp)]
];
然后我需要遍历此数组并访问每个值。
有人知道如何解决吗?
总的来说,我知道PHP(PDO)仍无法很好地应对这些情况。
非常感谢您的回答和建议
答案 0 :(得分:1)
可以将数组值创建为文字或函数或数组构造函数结果。您必须知道:
因此,出于您的目的,您可能应该创建自己的自定义类型,也许是该自定义类型的构造函数。
CREATE mytype AS(value1 numeric, value2 timestamp);
CREATE OR REPLACE FUNCTION mytype_new(numeric, timestamp)
RETURNS mytype AS $$
SELECT ROW($1, $2)::mytype;
$$ LANGUAGE sql IMMUTABLE;
CREATE OR REPLACE FUNCTION myfunc(a mytype[])
RETURNS void AS $$
DECLARE i mytype;
BEGIN
FOREACH i IN ARRAY a
LOOP
RAISE NOTICE '%', i;
END LOOP;
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
您可以使用类型构造函数创建一个数组:
postgres=# select myfunc(array[mytype_new(1, current_timestamp::timestamp), mytype_new(2, current_timestamp::timestamp)]);
NOTICE: (1,"2018-11-04 05:32:55.579313")
NOTICE: (2,"2018-11-04 05:32:55.579313")
或者您可以将值输入为文字(注意,这些值应正确加引号并转义):
postgres=# select myfunc('{"(1,2018-11-04 05:32:28.44918)","(2,2018-11-04 05:32:28.44918)"}');
NOTICE: (1,"2018-11-04 05:32:28.44918")
NOTICE: (2,"2018-11-04 05:32:28.44918")
这最后两个选择可以从PHP运行。