본문 바로가기
delphi

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

by doran365 2024. 7. 31.

MSSQL의 저장프로시저와 델파이를 이용한 데이터베이스 통합은 개발자들에게 매우 유용한 방법입니다. 이 글에서는 MSSQL 저장프로시저를 통해 값을 리턴하고, 델파이에서 이를 받는 방법을 자세히 설명하겠습니다.

MSSQL 저장프로시저 측

저장프로시저는 데이터베이스에서 복잡한 작업을 수행하고 결과를 리턴하는 데 사용됩니다. MSSQL에서 저장프로시저를 작성하고 이를 통해 값을 리턴하는 방법을 살펴보겠습니다.

저장프로시저에서 값 리턴하기

저장프로시저에서 값을 리턴하려면 RETURN 문을 사용합니다. 예를 들어, 자동증가형 Key 필드를 Insert 문을 통해 저장한 후, 마지막 키 번호를 얻고자 할 경우 다음과 같이 작성할 수 있습니다.

CREATE PROCEDURE usp_InsertRecord
AS
BEGIN
    -- Insert 문
    INSERT INTO TableName (Column1, Column2)
    VALUES ('Value1', 'Value2');

    -- 마지막 키 번호 리턴
    RETURN @@IDENTITY;
END;
 

RETURN 문 사용 예시

DECLARE @returnValue INT;

EXEC @returnValue = usp_InsertRecord;

SELECT @returnValue AS '마지막 키 번호';

위의 예시에서 usp_InsertRecord 저장프로시저는 새로운 레코드를 삽입한 후, 마지막으로 삽입된 레코드의 키 값을 RETURN 문을 통해 반환합니다. 이를 통해 호출 측에서 해당 값을 받을 수 있습니다.

델파이 측

델파이에서 MSSQL 저장프로시저를 호출하고 리턴 값을 받기 위해서는 몇 가지 단계를 거쳐야 합니다. 이 과정에서 중요한 점은 첫 번째 파라미터 선언에서 @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;

델파이 코드 설명

  1. ADOStoredProc 생성: eyeDM.CreateADOStoredProc를 사용하여 ADOStoredProc 객체를 생성합니다.
  2. 저장프로시저 설정: ads.ProcedureName 속성을 통해 호출할 저장프로시저 이름을 설정합니다.
  3. 파라미터 선언: 저장프로시저의 파라미터를 선언합니다. 이때 @RETURN_VALUE는 반드시 첫 번째 파라미터로 선언해야 합니다.
  4. 파라미터 값 설정: 선언된 파라미터에 값을 할당합니다.
  5. 저장프로시저 실행: ads.ExecProc를 사용하여 저장프로시저를 실행합니다.
  6. 리턴 값 수신: ads.Parameters.ParamByName('@RETURN_VALUE').Value를 통해 저장프로시저에서 리턴한 값을 받아옵니다.

MSSQL과 델파이를 이용한 데이터베이스 작업의 장점

MSSQL 저장프로시저와 델파이를 이용한 데이터베이스 작업은 여러 가지 장점을 제공합니다.

효율적인 데이터 처리

저장프로시저를 사용하면 데이터베이스 서버에서 직접 데이터를 처리하므로, 클라이언트와 서버 간의 데이터 전송을 최소화할 수 있습니다. 이는 네트워크 부하를 줄이고, 데이터 처리 속도를 높이는 데 도움이 됩니다.

보안 강화

저장프로시저를 사용하면 데이터베이스 액세스를 제한하고, SQL 인젝션과 같은 보안 위협을 줄일 수 있습니다. 저장프로시저 내부에서만 데이터 조작이 이루어지기 때문에, 외부에서 직접 SQL 쿼리를 실행하는 것보다 안전합니다.

코드 재사용성

저장프로시저는 여러 애플리케이션에서 재사용할 수 있는 독립적인 코드 블록입니다. 이를 통해 코드의 중복을 줄이고, 유지보수성을 높일 수 있습니다.

결론

MSSQL 저장프로시저를 이용하여 값을 리턴하고, 델파이에서 이를 받는 방법을 자세히 살펴보았습니다. 저장프로시저의 효율적인 데이터 처리와 보안 강화, 코드 재사용성 등의 장점을 활용하여 보다 나은 데이터베이스 통합 작업을 수행할 수 있습니다. 이러한 방법을 통해 개발자는 더욱 안정적이고 효율적인 애플리케이션을 개발할 수 있을 것입니다.