首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组参数调用存储过程的ECPG

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

Stack Overflow用户
提问于 2011-09-03 02:12:06
回答 1查看 356关注 0票数 1

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

通过整个requsr(s)的诀窍是什么?此数组大小通常最多只包含5个自变量。我意识到我可以向函数添加更多参数来克服这个问题。我希望这个解决方案会更优雅。

感谢您的评论

戴夫

代码语言:javascript
复制
EXEC SQL BEGIN DECLARE SECTION;
const char* cid = connid;
const char* tgrp;      // group key ( trk )
const char* cca;       // call control agent key ( trk )
const char* dhost;     // dest host key (trk)
const char* regusr[MAX_USRS];   // Registration user (lin)
EXEC SQL END DECLARE SECTION;

pgc文件准备了上面的主机变量,并且有一个调用来实现这个效果。

代码语言:javascript
复制
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;

存储的函数被声明为

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION getsipid(cca character varying, tgrp character varying, 
    dhost character varying, usr character varying[]) RETURNS INTEGER AS
EN

回答 1

Stack Overflow用户

发布于 2013-03-22 10:20:01

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

这实际上在很多环境中都很典型,不仅仅是ecpg。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7287588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档