1. 호출 과정
- TADOStoredProc 객체를 생성(Create)합니다.
- 저장 프로시저를 호출하기 위한 여러 속성들, 연결(Connection) 및 저장 프로시저 이름(ProcedureName) 등을 설정합니다.
- 파라미터를 초기화합니다.(CreateParameter)
- 저장 프로시저를 실행합니다.(Open / ExecProc)
- 저장 프로시저가 실행된 결과를 받아서 처리합니다.(RecordCount, Eof, Fields, MoveNext 등)
- 사용이 끝난 객체는 닫고 소멸시킨다.
2. Open(또는 Active)과 ExecProc의 차이점
- Open(또는 Active)
- 저장 프로시저를 실행한 결과셋을 받습니다.
- Active 속성이 True로 설정됩니다.
- RecordSet 속성에 결과셋이 있습니다.
- ExecProc
- 저장 프로시저를 서버에서 실행만 시킵니다.
- Active, RecordSet 속성이 변화하지 않습니다.
3. 저장 프로시저의 RETURN 값 받아 처리하기
- 파라미터를 추가할 때, 제일 먼저 "@RETURN_VALUE" 파라미터를 추가합니다.
- 저장 프로시저가 실행되고 난 후의 결과를 파리미터로 받아옵니다.
01.var02.ADOStoredProc1 : TADOStoredProc;03.begin04.ADOStoredProc1 : TADOStoredProc.Create(nil);05.with ADOStoredProc1 do06.try07.ProcedureName := 'usp_stored_proc';08.Connection := FADOConnection;09.Parameters.Clear;10.Parameters.CreateParameter('RETURN_VALUE', ftInteger, pdReturnValue, 0, null);11.Parameters.CreateParameter('@start_temp_no', ftInteger, pdInput, 0, 680000);12. 13.ExecProc;14.ShowMessage('RETURN_VALUE = ' + IntToStr(Parameters[0].Value) + #13#10 +15.'RecordCount = ' + IntToStr(Recordset.RecordCount));16. 17.// Error 발생18.finally19.ADOStoredProc1.Free;20.end;21.end;- 위 예제에서는 마지막 라인에서 오류가 발생합니다. 왜냐하면 ExecProc는 결과셋을 받지 않기 때문에, RecordCount 속성을 접근하려할 때 오류가 발생하게 된다.
- 위와 같이 저장 프로시저의 파라미터를 직접 생성하여 호출할 경우에 있어서 대상 DB가 MS-SQL 서버의 경우 저장 프로시저의 파라미터를 실제 서버의 저장 프로시저 순서대로 생성(CreateParaameter)해 주어야 정상적으로 저장 프로시저가 호출이 됩니다. 그렇지 않은 경우, 전혀 엉뚱한 결과가 나오거나, 알 수 없는 오류가 발생하게 됩니다.
댓글 없음:
댓글 쓰기