ms-sql 에서의 프로시져
Create procedure udp_accept_agyt(@arg_ct integer)
begin
Insert into mcagyt(ct_gbn,from_amt, to_amt, rcv_gbn)
Select ct_gbn, a.from_amt, a.to_amt, a.rcv_gbn
From mcagyt a
where a.ct_gbn = @arg_ct
commit;
select @@rowcount as cnt -- <<= 실행 되었던 건수를 컬럼명(cnt)로 치환해서 결과 보여주는 부분
end
오라클에서는
create or replace procedure udp_accept_agyt(arg_ct integer, arg_cnt out number)
is
v_cnt number := 0;
begin
Insert into mcagyt(ct_gbn, from_amt, to_amt, rcv_gbn)
Select a.ct_gbn, a.from_amt, a.to_amt, a.rcv_gbn
From mcagyt a
where a.ct_gbn = arg_ct
commit;
arg_cnt := SQL%ROWCOUNT;
end udp_accept_agyt;
결과는
100
이렇게 나오는 것이 정상
델파이에서 사용하는 방법
StoredProc 컴퍼넌트를 이용한다. (BDE, ADO 텝에 있음)
컴퍼넌트 속성에서
CursorType : ctDynamic 변경
ProcedureName : udp_accept_agyt // 프로시져 명만 입력한다.
Parameters : (name, datatype, direction, size, value) 파라미터 입력
실제 데이타 입력 및 실행
StoredProc.Parameters.items[0].value := 2; //데이타 입력
StoredProc.ExecProc; //실행
i := StoredProc.Parameters.items[0].value; //결과 받아오기
오라클을 보고 있으니 참 짜증이 나는데....
프로시져에서 데이타 셋을 가져올려면 셋 처리하는 방법도 따로 지정해야하고
간단한 결과를 받기 위해서 또 스토어드프로시져라는 것을 따로 해야 되고..
MS-SQL 이 작업하기 간단하다...
Qurey.Sql.Text := 'execute udp_accept_agyt 2;
Qurey.open;
이렇게 하면 셋이던, 간단한 건수던 다 적용이 되는데...
아래분과 친구 고맙습니다.