0

我正在尝试使用 PostgreSQL 数据库维护一个 PHP 应用程序。在某一时刻,一个存储过程被调用,比如说function_x在里面function_xfunction_y被调用;function_y传入一个名为 的变量parameter_1,parameter_1 的定义为:

parameter_1 numeric[][3] := {};

我正在尝试直接在命令行(或 pgadmin)上执行 select function_y,但在将空数组传递给函数时遇到问题。根据您必须使用的文档variadic,但我尝试了:

select function_y(581, 'CPN-00000000001-0000', 'TPN-00000000001-0001', 100, 2013, variadic arr := array[]);

但我得到了这个错误:

ERROR:  cannot determine type of empty array

我尝试了不同的方法,但没有任何效果。如何在查询中将多维数组作为参数传递?

4

1 回答 1

2

1)可以,但不必为数组变量使用VARIADIC参数。不过,您必须在函数声明中使用它,而不是在调用中。

2) Postgres 数组变量忽略定义中的维度。我在这里引用手册

当前的实现也不强制声明的维数。无论大小或维数如何,特定元素类型的数组都被认为是同一类型。因此,在其中声明数组大小或维数 CREATE TABLE只是文档;它不会影响运行时行为。

3) 这是无效的语法:

parameter_1 numeric[][3] := {};

需要单引号:

parameter_1 numeric[][3] := '{}';

这实际上与

parameter_1 numeric[] := '{}';

这个密切相关的答案中的更多详细信息、代码示例和链接:
Return rows matching elements of input array in plpgsql function

于 2013-09-10T02:10:55.920 回答