답변 감사합니다.
프로시저를 만들었습니다.
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE "GET_ACC2006"
(
"IYEAR" CHAR(4),
"GAEJUNG" CHAR(5),
"TDATE" CHAR(10)
)
RETURNS
(
"COMCODE" VARCHAR(6),
"COMNAME" VARCHAR(40),
"CHA" DOUBLE PRECISION,
"DAE" DOUBLE PRECISION
)
AS
BEGIN EXIT; END ^
ALTER PROCEDURE "GET_ACC2006"
(
"IYEAR" CHAR(4),
"GAEJUNG" CHAR(5),
"TDATE" CHAR(10)
)
RETURNS
(
"COMCODE" VARCHAR(6),
"COMNAME" VARCHAR(40),
"CHA" DOUBLE PRECISION,
"DAE" DOUBLE PRECISION
)
AS
begin
FOR
SELECT ye050, cu030, ye060, ye070
FROM Acc0002 left outer join com0003
on Acc0002.Ye050 = com0003.cu010
where ye010 = :iyear and ye030 = :gaejung
union all
SELECT jp060, cu030, jp080, cast(0 as double precision)
FROM Acc0004 left outer join com0003
on Acc0004.jp060 = com0003.cu010
where jp010 < :tdate and jp050 = :gaejung
and (jp040 = '2' or jp040 = '3')
union all
SELECT jp060, cu030, jp080, cast(0 as double precision)
FROM Acc0004 left outer join com0003
on Acc0004.jp060 = com0003.cu010
where jp010 < :tdate and jp050 = :gaejung
and (jp040 = '1' or jp040 = '4')
INTO :comCode, :comName, :cha, :dae
DO
suspend;
end
^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
위와 같이 프로시저를 만들었습니다.
델5 IBQUERY를 사용하는데
SQL.Add(' select comcode, max(comname) cu030, sum(cha) cha1, sum(dae) dae1 from get_acc2006 ');
//SQL.Add(' where iyear = :iyear and gaejung = :gaejung and tdate = :tdate ');
//SQL.Add(' group by comcode '); 이 두줄은 없애고도 해 봤습니다.
ParamByName('iyear').AsString := Copy(DateF, 1, 4);
ParamByName('gaejung').AsString := trim(edtGj010.Text);
ParamByName('tdate').AsString := DateF;
OPEN;
하면 PARAMETER MISMATCH 오류가 나옵니다.
만든 프로시저가 필요하면 올려드리겠습니다.
한수만 더 부탁드립니다. 첨부파일은 오류 메시지 입니다.
이게 해결되면 지금까지는 소스에서 쿼리한 후 WHILE 문으로 집계를 냈는데 노가다를 안해도 될것같습니다.
|