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.
var
02.
ADOStoredProc1 : TADOStoredProc;
03.
begin
04.
ADOStoredProc1 : TADOStoredProc
.
Create(
nil
);
05.
with
ADOStoredProc1
do
06.
try
07.
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.
finally
19.
ADOStoredProc1
.
Free;
20.
end
;
21.
end
;
- 위 예제에서는 마지막 라인에서 오류가 발생합니다. 왜냐하면 ExecProc는 결과셋을 받지 않기 때문에, RecordCount 속성을 접근하려할 때 오류가 발생하게 된다.
- 위와 같이 저장 프로시저의 파라미터를 직접 생성하여 호출할 경우에 있어서 대상 DB가 MS-SQL 서버의 경우 저장 프로시저의 파라미터를 실제 서버의 저장 프로시저 순서대로 생성(CreateParaameter)해 주어야 정상적으로 저장 프로시저가 호출이 됩니다. 그렇지 않은 경우, 전혀 엉뚱한 결과가 나오거나, 알 수 없는 오류가 발생하게 됩니다.
댓글 없음:
댓글 쓰기