将多维数组作为参数传递给Postgresql函数

时间:2013-09-09 21:39:31

标签: arrays postgresql plpgsql variadic-functions

我正在尝试使用PostgreSQL数据库维护一个Php应用程序。有一次,调用存储过程,让我们说function_x,在function_x内,调用function_y; function_y传递名为parameter_1的变量,parameter_1的定义为:

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

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

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

但我收到了这个错误:

ERROR:  cannot determine type of empty array

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

1 个答案:

答案 0 :(得分:2)

1)你可以,但你不必使用VARIADIC parameters来表示数组变量。但是,您必须在函数声明中使用它,而不是在调用中使用它。

2)Postgres数组变量忽略定义中的维度。我引用the manual here

  

当前实现不强制声明的数量   尺寸要么。特定元素类型的数组都是   被认为属于同一类型,无论大小或数量   尺寸。因此,声明数组的大小或维数   CREATE TABLE只是文档;它不会影响运行时行为。

3)这是无效的语法:

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

需要单引号:

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

实际上与

相同
parameter_1 numeric[] := '{}';

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