У меня есть клиент ECPG, пытающийся получить данные.Он использует подготовленный оператор с предложением subselect, используя хранимую функцию getsipid, которая принимает 4 аргумента.У меня была эта работа с 4-м аргументом, объявленным как простой varchar.Я пытался объявить 4-й аргумент как массив, однако, ecpg передает только первый аргумент массива в 4-м аргументе, а не все из них.
Какова хитрость, чтобы пройти весь набор requsr (s).Этот размер массива обычно может содержать до 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