질문입니다. 프로시져에서 건수 가져오기 0 5 9,786

by 하늘의바람 [SQL Query] 프로시져 이행 건수 건수 컬럼명 건수 [2011.05.02 15:16:29]


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;

이렇게 하면 셋이던, 간단한 건수던 다 적용이 되는데...

아래분과 친구 고맙습니다.

by 知音 [2011.05.02 16:00:58]
SQL%ROWCOUNT 사용하시면 됩니다..

보통
w_rowcount NUMBER;
w_rowcount := SQL%ROWCOUNT;
이렇게 사용하죠..

by 하늘의바람 [2011.05.02 17:37:47]
저가 실수 했는지 모르겠는데요
여기서 리턴 값을 받아야 되는데..

그냥 실행은 되는데 여기서 리턴 값이 어떻게 넘어 오는지요

리턴 값의 형태 좀 가르쳐 주세요

by 마농 [2011.05.02 17:52:27]
1. 단순 결과를 화면에 출력하는 것이라면?
-- dbms_output 패키지를 이용하면 됩니다.
dbms_output.put_line('Count : ' || w_rowcount);

2. 프로시져 호출자에게 결과값을 Return 해야 하는 것이라면?
-- 출력변수 선언해서 값을 대입해주면 됩니다.
create or replace procedure udp_accept_agyt(arg_ct IN integer, v_rtn OUT Number)
...
v_rtn := SQL%RowCount;
END;

by 하늘의바람 [2011.05.02 18:29:51]
님들 고맙습니다..

그런데.. 델파이에서 결과 값을 못가져 오네요...

혹시 알고 계신분 힌트 좀 주세요

by 마농 [2011.05.03 08:18:59]
결과값을 받을 변수를 선언하신후 변수를 이용해 프로시져를 호출하세요.
프로시져명(입력변수, 출력변수)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입