ECPGクライアントがデータを取得しようとしています。これは、4つの引数を取るストアド関数 "getsipid"を使用して、subselect句でプリペアドステートメントを使用します。私はこれを単純なvarcharとして宣言された4番目の引数で動作させました。4番目の引数を配列として宣言しようとしましたが、ecpgは4番目の引数で配列の最初の引数のみを渡し、すべてではありません。
requsr(s)のすべてのarryを渡すための秘訣は何ですか。この配列サイズには、通常、最大5つの引数しか含まれません。この問題を克服するために、関数に引数を追加するだけでよいことに気付きました。私は、ソリューションがよりエレガントになることを望んでいました。
コメントしてくれてありがとう
デイブ
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ファイルは上記のホスト変数を準備し、エフェクトの呼び出しがあります。
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