我正在尝试使用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
我尝试了不同的方法,但没有任何效果。如何在查询中将多维数组作为参数传递?
答案 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