Postgresql 使用数组参数调用存储过程的ECPG

Postgresql 使用数组参数调用存储过程的ECPG,postgresql,embedded-sql,ecpg,Postgresql,Embedded Sql,Ecpg,我有一个ECPG客户端试图获取数据。它使用一个带有subselect子句的准备语句,该子句使用一个存储函数getsipid,该函数接受4个参数。 我已经将第四个参数声明为一个简单的varchar。我试图将第四个参数声明为数组,但是,ecpg只在第四个参数中传递数组的第一个参数,而不是全部参数 通过所有需求的诀窍是什么。此数组大小通常最多只包含5个参数。我意识到我可以在函数中添加更多参数来克服这个问题。我希望这个解决方案会更加优雅 谢谢你的评论 戴夫 pgc文件准备了上述主机变量,并调用了相应的效

我有一个ECPG客户端试图获取数据。它使用一个带有subselect子句的准备语句,该子句使用一个存储函数getsipid,该函数接受4个参数。 我已经将第四个参数声明为一个简单的varchar。我试图将第四个参数声明为数组,但是,ecpg只在第四个参数中传递数组的第一个参数,而不是全部参数

通过所有需求的诀窍是什么。此数组大小通常最多只包含5个参数。我意识到我可以在函数中添加更多参数来克服这个问题。我希望这个解决方案会更加优雅

谢谢你的评论

戴夫

pgc文件准备了上述主机变量,并调用了相应的效果

EXEC SQL AT :cid PREPARE ps_portdataviasip FROM
       "SELECT * FROM port LEFT JOIN linesip USING (id)\
                           LEFT JOIN trunksip USING (id)\
                           LEFT JOIN customer USING (cid)\
                       WHERE port.id =  (SELECT getsipid(?, ?, ?, ?))\
                       ORDER BY registersip.expiration DESC"; 
EXEC SQL AT :cid DECLARE cur_portsip CURSOR FOR ps_portdataviasip;
EXEC SQL AT :cid OPEN cur_portsip USING :cca, :tgrp, :dhost, :regusr;
EXEC SQL AT :cid FETCH NEXT FROM cur_portsip INTO DESCRIPTOR sqlda;
存储的函数声明为

CREATE OR REPLACE FUNCTION getsipid(cca character varying, tgrp character varying, 
    dhost character varying, usr character varying[]) RETURNS INTEGER AS

通常的问题是,您需要处理PostgreSQL字符串表示形式中的数组。通常这意味着将其转换为CSV并用适当的括号括起来。所以你会得到类似“{myuser2,myuser1,myuser321}”

这在很多环境中都非常典型,不仅仅是ecpg


第二种方法可能是使函数可变,并以这种方式传递参数。然后它们将以数组的形式出现,您可以使用它们,但您可以将它们作为单独的参数传递。

psst。。。你能用你在这里使用的相同凭证在DBA上注册吗?这样,DBA会将您识别为我迁移的帖子的所有者。谢谢
CREATE OR REPLACE FUNCTION getsipid(cca character varying, tgrp character varying, 
    dhost character varying, usr character varying[]) RETURNS INTEGER AS