database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1431 게시물 읽기
No. 1431
CLI SQC 의 차이점을 알고 싶습니다.
작성자
조명진(bass777)
작성일
2007-09-12 10:40
조회수
10,112

DB2 에 대한 자료를 조사한 결과

C언어에서 DB2를 접근 하는 프로그래밍 방법이

CLI 와 SQC  2가지가 있다고 알게 되었습니다..


이 두가지의 차이점이 머고 각각의 특징에 대해서 알고 싶습니다.^^

부탁 드리겠습니다..

이 글에 대한 댓글이 총 2건 있습니다.

* SQC = Embedded SQL이 포함된 C 또는 C++  

DB2 Call Level Interface(CLI)

Embedded SQL 인터페이스를 사용하는 응용프로그램은 SQL문을 코드로
변환하는 사전 처리 컴파일러를 필요로 하고, 이는 다시 컴파일되고,
데이터베이스로 바인드된 후 실행됩니다. 대비적으로 말해서, DB2 CLI
응용프로그램은 사전 처리 컴파일되거나 바인드될 필요가 없지만, 대신 표준
세트 함수를 사용하여 SQL문 및 관련 서비스를 수행할 때 실행합니다.
이러한 차이점은 사전 처리 컴파일러가 각 데이터베이스 제품마다 다르므로
사용자 응용프로그램을 그 제품에 효율적으로 바인드하므로 중요합니다. DB2
CLI는 특정 데이터베이스 제품과 독립적인 이식 가능한 응용프로그램을 작성할
수 있도록 합니다. 이러한 독립성은 DB2 CLI 응용프로그램을 다시 컴파일하거나
재바인드하여 DRDA 데이터베이스를 포함하여, 다른 DB2 데이터베이스에
액세스할 필요가 없습니다. 이는 런타임시 해당 데이터베이스에 연결합니다. 

Embedded SQL 및 DB2 CLI 비교

DB2 CLI 및 embedded SQL은 다음과 같은 점에서도 다릅니다.
* DB2 CLI에는 명시적인 커서 선언이 필요하지 않습니다. DB2 CLI는
  필요에 따라 사용되는 커서의 제공이 있습니다. 그러면 응용프로그램이
  다중 행 SELECT문 및 위치지정된 UPDATE문 및 DELETE문에 대한 일반
  커서 페치 모델에서 생성된 커서를 사용할 수 있습니다.
* OPEN문은 DB2 CLI에서 사용되지 않습니다. 대신, SELECT 실행은
  자동으로 커서가 열리도록 합니다.
* Embedded SQL과 달리 DB2 CLI는 EXECUTE IMMEDIATE문에 해당되는
  함수(SQLExecDirect() 함수)에서 매개변수 표시문자를 허용합니다.
* DB2 CLI에서 COMMIT 또는 ROLLBACK은 SQL문으로서 전달하는 것이 아닌
  SQLEndTran() 함수 호출을 통해 발행됩니다.
* DB2 CLI는 응용프로그램 대신 명령문 관련 정보를 관리하며, 이를
  추상적 오브젝트로 참조하는 명령문 핸들을 제공합니다. 이 핸들은
  응용프로그램이 제품별 데이터 구조를 사용할 필요를 줄입니다.
* 명령문 핸들과 마찬가지로 환경 핸들 및 연결 핸들은 모든 전역 변수 및
  연결별 정보를 참조하는 방법을 제공합니다. 설명자 핸들은 SQL문의
 매개변수 또는 결과 세트의 컬럼에 대해 설명합니다.
* DB2 CLI는 X/Open SQL CAE 스펙에 의해 정의된 SQLSTATE 값을
  사용합니다. 형식 및 대부분의 값들이 IBM 관계형 데이터베이스 제품이
  사용하는 값과 일치하지 않아도 차이점이 있습니다.(ODBC
  SQLSTATES와 X/Open 정의 SQLSTATES 사이에도 차이가 있습니다.)
* DB2 CLI는 화면 이동 커서를 지원합니다. 화면 이동 커서를 이용하여
  정적 커서로 다음과 같이 화면 이동할 수 있습니다.
  o 한 행 이상 앞으로 이동
  o 한 행 이상 뒤로 이동
  o 첫번째 행에서 한 행 이상
  o 마지막 행에서 한 행 이상
이러한 차이에도 불구하고 Embedded SQL과 DB2 CLI 사이에 중요한 공통
개념이 있습니다. DB2 CLI는 Embedded SQL에서 동적으로 준비될 수 있는
SQL문을 실행할 수 있습니다.
주:DB2 CLI는 복합 SQL문과 같이 동적으로 준비될 수 없는 일부 SQL문도
   허용할 수 있습니다. 

DB2 CLI 사용시 이점

DB2 CLI 인터페이스에는 Embedded SQL을 통해 여러 개의 주요 이점이
있습니다.
* 응용프로그램이 작성될 때 목표 데이터베이스가 알려지지 않은
  클라이언트 서버 환경에 이상적입니다. 어떤 데이터베이스 서버에
  응용프로그램이 연결되어 있는지에 관계없이 SQL문 실행용으로
  일치하는 인터페이스를 제공합니다.
* 사전 처리 컴파일러에 대한 종속성을 제거함으로써 응용프로그램의
  이식성을 증가시킵니다.
* 개별 DB2 CLI 응용프로그램은 각 데이터베이스에 바인드될 필요가
  없습니다. DB2 CLI와 함께 제공된 바인드 파일만 모든 DB2 CLI
  응용프로그램에 대해 한 번 바인드되어야 합니다. 이는 일반용일 경우
  응용프로그램에 필요한 관리 용량을 대폭 절감시킬 수 있습니다.
* DB2 CLI 응용프로그램은 동일한 응용프로그램으로부터 모두, 동일한
  데이터베이스로의 다중 연결을 포함하여 여러 데이터베이스로 연결할 수 
  있습니다. 각 연결마다 고유의 확약 범위가 있습니다. 응용프로그램이
  동일한 결과를 얻기 위해 멀티스레딩을 사용해야 하는 Embedded
  SQL을 사용하는 것보다 CLI를 사용하는 것이 훨씬 더 간단합니다.
* DB2 CLI는 제어되는 응용프로그램, 일반적으로 Embedded SQL
  응용프로그램과 연결된 SQLDA 및 SQLCA와 같은 복합 데이터 영역에
  대한 필요를 줄여 줍니다. 대신, DB2 CLI는 필요한 데이터 구조를 할당
  및 제어하고, 응용프로그램이 참조할 핸들을 제공합니다.
* DB2 CLI는 각 스레드가 자신의 연결을 가질 수 있고 나머지와 분리된
  확약 범위를 가질 수 있는 멀티스레드 스레드 안전 응용프로그램의
  개발을 작동가능하게 합니다. DB2 CLI는 위에서 설명한 데이터 영역을
  감소시키고 특정 핸들과 응용프로그램이 액세스할 수 있는 모든 데이터
  구조를 연결시켜 이를 수행합니다. Embedded SQL과 달리 멀티스레드
  CLI 응용프로그램은 문맥 관리 DB2 API를 호출할 필요가 없습니다.
  이것은 DB2 CLI 드라이버에 의해 자동으로 처리됩니다.
* DB2 CLI는 확장된 매개변수 입력 및 페치 기능을 제공함으로써, 입력시
  데이터 배열이 지정될 수 있도록 하고, 여러 행의 결과 세트를 직접
  배열로 검색하고, 여러 결과 세트를 생성하는 명령문을 실행합니다.
* DB2 CLI는 다양한 DBMS 카탈로그 테이블에 포함된 조회
  카탈로그(테이블, 컬럼, 외부 키, 기본 키 등) 정보에 대한 일관된
  인터페이스를 제공합니다. 리턴되는 결과 세트는 DBMS를 통해
  일치합니다. 그 결과 응용프로그램은 다른 데이터베이스 서버에서의
  카탈로그 차이점 뿐만 아니라 데이터베이스 서버 릴리스에서의 카탈로그
  변경이 이루어지지 못하도록 합니다. 따라서 응용프로그램은 버전별 및
  서버별 카탈로그 조회 작성을 하지 않아도 됩니다.
* 확장 데이터 변환은 DB2 CLI에서도 제공됩니다. 다양한 SQL 및 C
  데이터 유형 사이의 정보 변환시 응용프로그램 코드가 덜 필요합니다.
* DB2 CLI는 ODBC 및 X/Open CLI 함수 모두를 통합합니다. 둘다 산업
  스펙을 따릅니다. DB2 CLI는 새로 도입되는 ISO CLI 표준과 함께
  정렬됩니다. 응용프로그램 개발자가 이러한 스펙에 투자하는 지식은
  직접 DB2 CLI 개발에 적용되거나 그 반대로 적용됩니다. 이 인터페이스는
  함수 라이브러리에 대해 잘 알고 있지만 SQL문을 호스트 언어로
  내포시키는 제품별 메소드에 대한 지식은 거의 없는 프로그래머가
  직관적으로 이해할 수 있게 되어 있습니다.
* DB2 CLI는 DB2 Universal Database(또는 MVS/ESA용 DB2 버전 5 이후)
  서버에 상주하는 저장 프로시듀어로부터 생성된 다중 행 및 결과 세트
  검색 기능을 제공합니다. 그러나, 이 기능은 저장 프로시듀어가
  DataJoiner 버전 2 서버로부터 액세스가능한 서버에 상주할 경우
  Embedded SQL을 사용하여 버전 5 DB2 Universal Database
 클라이언트용입니다.
* DB2 CLI는 배열 출력과 함께 사용할 수 있는 서버측 스크롤가능 커서를
  지원합니다. 이는 Page Up, Page Down, Home 및 End 키를 사용하는
  스크롤 상자에 데이터베이스 정보를 표시하는 GUI 응용프로그램에
  유용합니다. 읽기 전용 커서를 스크롤 가능으로 선언할 수 있고, 결과
  세트를 통해 한 행 이상 앞뒤로 이동합니다. 또한 다음으로부터 옵셋을
  지정하여 행을 페치할 수도 있습니다.
  o 현재 행
  o 결과 세트의 시작 또는 끝
  o 북마크로 이전에 설정한 특정 행.
* DB2 CLI 응용프로그램은 CLI 및 Embedded SQL 응용프로그램이 결과
  세트를 설명하는 것과 같은 방식으로 SQL문에 있는 동적으로
  매개변수를 설명할 수 있습니다. 이를 통해 CLI 응용프로그램은 미리
  이러한 매개변수 표시문자의 데이터 유형을 알지 못한 채 매개변수
  표시문자가 포함된 SQL문을 동적으로 처리할 수 있도록 합니다.
  SQL문이 준비될 때 매개변수의 데이터 유형을 상세하게 설명하는
  정보가 리턴됩니다. 

Embedded SQL 또는 DB2 CLI에 대한 결정

선택할 인터페이스는 사용자 응용프로그램에 따라 다릅니다.
DB2 CLI는 이식성이 필요한 조회에 기반을 둔 그래픽 사용자
인터페이스(GUI)에 이상적입니다. 위에 나열된 DB2 CLI 사용시 이점들로 인해
응용프로그램이 확실하게 선택할 수 있는 항목이 될 수 있습니다. 그러나 한
가지 반드시 고려해야 할 사항이 있는데, 바로 정적 SQL과 동적 SQL 사이의
비교입니다. 내포된 응용프로그램에서는 정적 SQL을 사용하는 것이 훨씬
쉽습니다.
CLI 응용프로그램에서 정적 SQL을 사용하는 방법에 대해서는 다음 웹 페이지를
참조하십시오.
http://www.ibm.com/software/data/db2/udb/staticcli 

정적 SQL에는 다음과 같은 이점이 있습니다.
* 성능
  동적 SQL은 런타임시 준비되고, 정적 SQL은 사전 처리 컴파일시
  준비됩니다. 보다 나은 처리가 필요할 분만 아니라 준비 단계는 런타임시
  추가 네트워크 통신량을 야기시킬 수 있습니다. 그러나 이러한 추가
  단계(및 네트워크 통신)는 DB2 CLI 응용프로그램이 지연된 준비를 사용할
  경우 필요하지 않습니다.
  정적 SQL이 동적 SQL보다 항상 성능이 나은 것은 아닙니다. 동적
  SQL은 새 색인과 같은 데이터베이스로의 변경을 사용할 수 있고, 현재
  데이터베이스 통계를 사용하여 최적의 액세스 플랜을 선택할 수
  있습니다. 또한, 명령문이 캐쉬될 경우 사전 처리 컴파일을 피할 수
  있습니다.
* 캡슐화 및 보안
  정적 SQL에서 (테이블, 뷰와 같은) 오브젝트에 대한 권한 부여가
  패키지와 연관되어 있고 패키지 바인딩시 검증됩니다. 이는
  데이터베이스 관리자가 각 데이터베이스 오브젝트에 대한 명시적인
  액세스를 권한 부여할 필요 없이, 특정 패키지에 대한 실행을 사용자
  세트에게 부여(함으로써 패키지에서 그들의 특권을 캡슐화)하기만 하면
  됨을 의미합니다. 동적 SQL에서 권한 부여는 명령문 각각에 대해
  런타임시 검증됩니다. 따라서 사용자에게는 각 데이터베이스 오브젝트에
  대한 명시적인 액세스가 부여되어야 합니다. 이로써 이 사용자들은
  액세스할 필요가 없는 오브젝트 부분들에 액세스할 수 있습니다.
* Embedded SQL은 C 또는 C++가 아닌 언어로 지원됩니다.
* 고정 조회 선택의 경우 Embedded SQL은 더 간단합니다. 

응용프로그램에 두 인터페이스 모두의 이점이 필요한 경우, 정적 SQL이 포함된
저장 프로시듀어를 작성하여 DB2 CLI 응용프로그램 내에 정적 SQL을 사용할
수 있습니다. 저장 프로시듀어는 DB2 CLI 응용프로그램 내부로부터 호출되고
서버에서 실행됩니다. 일단 저장 프로시듀어가 작성되면 DB2 CLI 또는 ODBC
응용프로그램이 이를 호출할 수 있습니다. CLI Guide and Reference에서
자세한 내용을 참조하십시오. 

또한, 각각의 장점을 이용하여 DB2 CLI 및 embedded SQL 모두를 사용하는
혼합 응용프로그램을 작성하는 것도 가능합니다. 이런 경우 DB2 CLI를
사용하여 기본 응용프로그램을 제공할 수 있고, 이 때 성능 또는 보안상의
이유로 정적 SQL을 사용하여 키 모듈을 이용할 수 있습니다. 이것은
응용프로그램 설계를 복잡하게 하고, 저장 프로시듀어가 응용프로그램 요건을
충족시키지 못하는 경우에만 사용되어야 합니다. 자세한 내용은 CLI Guide and
Reference에 있는 Embedded SQL 및 DB2 CLI 혼합 절을 참조하십시오.
결과적으로, 각 인터페이스 사용 시기에 대한 결정은 어떤 한 요인이 아닌,
개인적인 선호사항이나 이전 경험에 기초할 것입니다.

박진복(pjb708)님이 2007-09-12 13:29에 작성한 댓글입니다.
이 댓글은 2007-09-12 13:31에 마지막으로 수정되었습니다.

감사합니다...(--)(__)(^^) 꾸벅

조명진(bass777)님이 2007-09-12 14:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1434db2 service name 알아내는 법 [1]
조명진
2007-09-14
8897
1433OUTER JOIN이 안되네요 ㅠ.ㅠ [2]
짱가
2007-09-13
9306
1432마이너스 붙은 숫자를 sum하는 방법좀 ... [1]
도승현
2007-09-12
8695
1431CLI SQC 의 차이점을 알고 싶습니다. [2]
조명진
2007-09-12
10112
1430DB2 접속 (v8 , v9) [1]
최영준
2007-09-11
10317
1429DB2 DBA 모집(신입, 경력)
Jack
2007-09-11
9040
1428DB2Client설치시 오류!! [1]
김정수
2007-09-10
8852
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다