1
我有一個ECPG客戶端試圖獲取數據。它使用一個準備語句和一個使用存儲函數「getsipid」的子查詢子句,該函數接受4個參數。 我有這個工作與第四個參數聲明爲一個簡單的varchar。我曾嘗試將第四個參數聲明爲一個數組,但是,ecpg僅在第四個參數中傳遞數組的第一個參數,而不是全部。ECPG使用數組參數調用存儲過程
傳遞請求者的整個詭計是什麼。這個數組大小通常只包含多達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
(psst ...你可以用DBA註冊你在這裏使用的相同憑據嗎?這樣DBA就會認可你是擁有我遷移後的用戶,謝謝!) – Will