Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[DocWiki 번역] 명령 묶음 (FireDAC)


Recommended Posts

Docwiki에 있는 "Command Batches (FireDAC)"를 번역한 글: 번역일: 2022년 3월 29일)

위로 가기: [DocWiki 번역] 명령(command)을 가지고 작업하기 (FireDAC)

목차


1 일반 사항 (General)

명령 묶음 (Command Batch)은 애플리케이션이 DBMS에서 실행을 요청할 때 한번에 전송하는 SQL 명령문 묶음이다. DBMS는 묶음 안에 있는 명령문을 단일 실행 계획으로 컴파일한다. 그런 다음 실행 계획에 따라 한번에 하나씩 명령문을 실행한다. 따라서 네트워크 트래픽과 데이터베이스 서버의 부담이 최소화된다. 실행 후에 DBMS는 명령문들의 결과 세트들을 클라이언트에게 반환한다. 

 

2 결과 세트를 처리하기 (Processing Result Sets)

FireDAC에서 NextRecordSet 메소드를 사용하면, 프로그래머는 모든 결과 세트들을 한번에 하나씩 처리할 수 있다. 결과 세트들를 모두 처리할 수 있으려면,  FetchOptions.AutoClose를  False로 지정하고 난 후에 명령(command)를 실행해야 한다. 그렇지 않으면, 첫번째 커서가 EoF에 도달하면, 닫히고, 다른 커서들이 모두 버려진다. 

MS-SQL 서버를 예로 들면,

FDQuery1.FetchOptions.AutoClose := False;
FDQuery1.SQL.Add('select * from [Orders]');
FDQuery1.SQL.Add('select * from [Order Details]');
FDQuery1.Open; // 이제 [Orders] 테이블에 있는 행(row)들을 접근할 수 있다. 
FDQuery1.NextRecordSet; // 이제 [Order Details] 테이블에 있는 행(row)들을 접근할 수 있다. 

애플리케이션에서 각 결과 세트를 각 데이터셋에 저장하려면,  TFDMemTableData 프로퍼티를 사용한다. 예를 들면,
 

FDQuery1.FetchOptions.AutoClose := False;
FDQuery1.SQL.Text := 'select * from orders; select * from customers';

FDQuery1.Open;
FDQuery1.FetchAll;
// orders 레코드를 FDMemTable1에 저장하자.
FDMemTable1.Data := FDQuery1.Data;

FDQuery1.NextRecordSet;
FDQuery1.FetchAll;
// customers 레코드를 FDMemTable2에 저장하자.
FDMemTable2.Data := FDQuery1.Data;

컬럼(column)과 행(row)가 없는 빈 결과 세트가 있으면, FireDAC는 빈 세트를 자동으로 건너뛴다.

 

3 DMBS과 명령 묶음 (DMBS and Batches)

DBMS가 반드시 "FireDAC을 사용하여 실행하는 명령 묶음(command batch)"을 지원할 수 있어야 한다. 만약 DBMS가 명령 묶음(command batch)을 지원하지 않으면, SQL 스크립트를 사용해야 한다. DBMS 별 명령 묶음(command batch) 지원은 다음과 같다.

DBMS 참고사항
IBM DB2 명령은 ';'로 구분되어야 한다.
Firebird EXECUTE BLOCK 구조를 사용한다.
Informix 명령은 ';'로 구분되어야 한다. 해당 묶음은 오직 단일 DB를 액세스하는 명령만 담을 수 있다.
MS-SQL Server 옵션으로, 명령은 ';'로 구분되어야 한다.
MySQL 명령은 ';'로 구분되어야 한다.
Oracle BEGIN END 익명 블록 (anonymous block) 구조를 사용한다.
PostgreSQL 명령은 ';'로 구분되어야 한다.
파라미터가 없는 명령 묶음 인경우, ResourceOptions.DirectExecuteTrue로 지정하여 실행할 수 있다. PostgreSQL v >= 9.0 인 경우, DO BEGIN END 익명 블록 (anonymous block) 구조를 사용한다.
SQLite 명령은 ';'로 구분되어야 한다.
SQLite 옵션으로, 명령은 ';'로 구분되어야 한다.
Teradata Database 명령은 ';'로 구분되어야 한다.

또한, FireDAC은 결괴 세트 여러 개를 반환하는 명령(command)를 완전하게 지원한다. 예를 들면,

  • REF CURSOR가 있는 Oracle 저장 프로시저.
  • 충접 커서들이 있는 Oracle 결과 세트.
  • PostgreSQL의 다양한 커서 반환 명령문.

주의: INSERT/UPDATE/DELETE 명령 여러 개를 실행하려면, Array DML 기능을 사용하는 것이 좋다. 묶음의 규모가 크면 훨씬 더 효과적이다.

 

4 기타 자료 (See Also)

 

4.1 예제(Samples)

FireDAC TFDQuery Batch 예제
FireDAC TFDQuery Batch Error Handling 예제
FireDAC IFDPhysCommand Batch 예제

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.