Rya*_*sch 5 php sql postgresql plpgsql postgresql-9.1
我有自定义类型
CREATE TYPE mytype as (id uuid, amount numeric(13,4));
Run Code Online (Sandbox Code Playgroud)
我想将它传递给具有以下签名的函数:
CREATE FUNCTION myschema.myfunction(id uuid, mytypes mytype[])
RETURNS BOOLEAN AS...
Run Code Online (Sandbox Code Playgroud)
如何在postgres查询中调用它,并且不可避免地从PHP中调用?
您可以使用替代语法与字符串文字而不是数组构造函数,这是一个类似Postgres函数的构造,当您需要传递值时可能会导致麻烦- 例如在预准备语句中:
SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
, '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
, "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);
Run Code Online (Sandbox Code Playgroud)
我在数组中的两个行类型之间添加了换行符以供显示.那是合法的.
这是一个演示:
CREATE TEMP TABLE mytype (id uuid, amount numeric(13,4));
INSERT INTO mytype VALUES
('0d6311cc-0d74-4a32-8cf9-87835651e1ee', 25)
,('6449fb3b-844e-440e-8973-31eb6bbefc81', 10);
SELECT ARRAY(SELECT m FROM mytype m);
Run Code Online (Sandbox Code Playgroud)
返回:
{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}
Run Code Online (Sandbox Code Playgroud)
可能应该注意,任何表(包括临时表)都隐式地创建了同名的行类型.
select myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
, ARRAY[('ac747f0e-93d4-43a9-bc5b-09df06593239', '25.00')
, ('6449fb3b-844e-440e-8973-31eb6bbefc81', '10.00')]::mytype[]
);
Run Code Online (Sandbox Code Playgroud)
不过,仍然需要解决此问题的 PHP 部分,仍然不确定如何调用使用自定义数组参数填充的函数。
归档时间: |
|
查看次数: |
2788 次 |
最近记录: |