데이터를 얻으려고하는 ECPG 클라이언트가 있습니다. 그것은 4 개의 인수를 취하는 저장 함수 "getsipid"를 사용하여 subselect 절이있는 prepared statement를 사용합니다. 나는 이것을 간단한 varchar로 선언 된 네 번째 인수와 함께 작업하게했습니다. 그러나 4 번째 인수를 배열로 선언하려고 시도했지만 ecpg는 배열의 첫 번째 인수를 4 번째 인수에 전달하는 것이지 모든 인수를 전달하는 것은 아닙니다.배열 인수가있는 저장 프로 시저의 ECPG 호출
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;
저장된 기능이 문제는 일반적으로는 PostgreSQL의 문자열 표현에있을 배열을 처리 할 필요가있다
CREATE OR REPLACE FUNCTION getsipid(cca character varying, tgrp character varying,
dhost character varying, usr character varying[]) RETURNS INTEGER AS
(psst ... 여기서 사용한 것과 동일한 자격 증명을 사용하여 DBA에 등록 할 수 있습니까? 그런 식으로 DBA는 내가 마이그레이션 한 게시물을 소유 한 사용자로 인식합니다.) – Will