본문 바로가기

프로그래밍/Delphi

MSSQL StoredProcedure로부터 리턴 값 받기

Keyword : MSSQL, Delphi, TADOStoredProc, @RETURN_VALUE

MSSQL의 저장프로시저(Stored Procedure)를 이용하여 쿼리를 호출 한 후에 저장 프로시저에서 리턴하는 값을 델파이에서 받기

1. MSSQL 저장프로시저 측
   프로시저의 마지막에 RETURN을 사용하여 값을 전달
          RETURN @val
   자동증가형 Key 필드를 Insert 문을 이용하여 저장하는 프로시저에서 저장된 마지막 키 번호를 얻고자 할 경우

         RETURN @@IDENTITY


2. 델파이 측
   핵심은 첫번째 파라미터 선언에서 "@RETURN_VALUE"를  선언해 주어야 함

 
  procedure TMedia_Section.Insert;
var
  ads : TADOStoredProc;
begin
  ads := eyeDM.CreateADOStoredProc;
  try
    ads.ProcedureName := 'usp_mediasection_update';
    ads.Parameters.CreateParameter('@RETURN_VALUE',ftInteger,pdReturnValue,0,0);   // <-- 반드시 첫번재 파라미터로 선언
    ads.Parameters.CreateParameter('@SNo', ftInteger, pdInput, 4, 0);
    ads.Parameters.CreateParameter('@SCT', ftString, pdInput, 5, '');
    ads.Parameters.CreateParameter('@Section_Name', ftString, pdInput, 200, '');
    ads.Parameters.CreateParameter('@Priority', ftInteger, pdInput, 4, 0);
    ads.Parameters.CreateParameter('@Note', ftString, pdInput, 255, '');
    ads.Parameters.CreateParameter('@NCT', ftString, pdInput, 4, '');
    ads.Parameters.CreateParameter('@filterStr', ftString, pdInput, 100, '');
    ads.Parameters.CreateParameter('@regExpr', ftString, pdInput, 100, '');

    ads.Parameters.ParamByName('@SNo').Value := FSNo;
    ads.Parameters.ParamByName('@SCT').Value := FSCT;
    ads.Parameters.ParamByName('@Section_Name').Value := FSection_Name;
    ads.Parameters.ParamByName('@Priority').Value := FPriority;
    ads.Parameters.ParamByName('@Note').Value := FNote;
    ads.Parameters.ParamByName('@NCT').Value := FNCT;
    ads.Parameters.ParamByName('@filterStr').Value := FFilterStr;
    ads.Parameters.ParamByName('@regExpr').Value := FRegExpr;

    ads.ExecProc;

   FSNo := ads.Parameters.ParamByName('@RETURN_VALUE').value; // <-- 리턴 값을 받아온다
 finally
    ads.Free;
  end;
end;