tbESQL/C 프리컴파일러 옵션

tbESQL/C 프리컴파일러를 동작시킬 때 사용할 수 있는 옵션에 대해 설명합니다.

개요

tbESQL/C 프리컴파일러 옵션은 프리컴파일러를 동작시킬 때 프리컴파일러가 추가적인 기능을 수행하도록 설정하기 위해서 사용됩니다.

프리컴파일러를 사용하려면, 다음과 같이 입력합니다.

[예 1] tbESQL/C 프리컴파일 실행

tbpc test1.tbc

위 예를 보면 tbpc 유틸리티를 통해 프리컴파일을 하게 됩니다. 'test1.tbc'은 프리컴파일을 실행할 대상 파일의 이름입니다. 프리컴파일을 실행할 때 대상 파일의 확장자가 '.tbc'일 경우 확장자를 생략하고 사용해도 무방합니다.'test1.tbc'는 tbESQL/C에서 제공하는 프리컴파일러의 옵션 중 하나인 INAME에 해당합니다. 모든 프리컴파일러의 옵션 중에서 옵션의 이름을 생략할 수 있는 것은 INAME 하나뿐입니다.

따라서 INAME을 생략하지 않고, 다음과 같이 사용해도 위의 예와 동일한 의미를 갖습니다.

tbpc INAME=test1.tbc

다음은 INAME과 INCLUDE 옵션을 사용한 예입니다.

[예 2] tbESQL/C 프리컴파일러의 옵션을 사용한 프리컴파일 실행

tbpc test1.tbc INCLUDE=/home/tibero/include

위의 예는 tbESQL/C에서 제공하는 프리컴파일러 옵션 2개를 함께 사용한 것입니다. 앞서 언급했듯이 'IN AME='은 생략할 수 있습니다. INCLUDE 옵션은 'test1.tbc' 안에서 사용된 각종 Include 파일이 같은 디렉터리에 있지 않을 경우 프리컴파일을 실행할 때 에러를 발생하게 됩니다. 따라서 이런 Include 파일들이 존재하는 디렉터리를 지정해줄 때 사용하는 옵션입니다.

tbESQL/C 프리컴파일러 옵션 지정

프리컴파일러 옵션은 명령 프롬프트에서 직접 입력할 수도 있지만, 환경설정 파일이나 프로그램 내부에서도 지정할 수 있습니다. 옵션의 종류에 따라 지정할 수 있는 장소가 다릅니다. 어떤 곳에서도 옵션을 지정하지 않았을 경우 기본값이 적용됩니다.

옵션이 적용되는 순서는 다음과 같습니다.

  1. 기본값

  2. 환경설정 파일

  3. 명령 프롬프트

  4. 프로그램 내부

하나의 항목만을 허용하는 동일한 한 가지 옵션에 여러 번에 걸쳐 다른 항목이 지정되었을 경우 항상 마지막에 지정된 내용만 유효합니다. 또한 옵션을 프로그램 내부에서 지정할 경우 옵션의 영향 범위는 C 프로그래밍 언어의 문법에서의 변수의 영향 범위와는 무관합니다. 무조건 프로그램의 소스 코드의 진행 순서에서가장 마지막에 지정된 옵션이 적용됩니다. INAME의 경우는 다른 옵션과 달리, 두 번 이상 INAME이 나타날 경우 에러가 발생합니다.

환경설정 파일

옵션을 지정할 때 환경설정 파일을 사용하는 방법에는 다음의 두 가지가 있습니다.

기본 환경설정 파일

tbESQL/C에서는 기본적으로 tbpc.cfg라는 환경설정 파일을 $TB_HOME/client/config 디렉터리에 두고 있습니다. 이 환경설정 파일을 수정해서 원하는 옵션을 지정할 수 있습니다. 만약 별도의 환경설정 파일이 지정되지 않으면 tbpc 유틸리티는 자동으로 이 환경설정 파일을 먼저 읽습니다.

다음은 tbpc.cfg 파일을 사용하여 프리컴파일러 옵션을 지정하는 예입니다.

위의 예에서처럼 #을 이용해서 행 전체에 대해 주석 처리를 할 수 있습니다. 환경설정 파일에서도 하나의 항목만 허용하는 옵션이 두 번 이상 나타났을 경우 마지막에 지정된 옵션이 적용됩니다.

사용자 환경설정 파일

사용자가 환경설정 파일을 임의로 생성하여 사용할 수도 있습니다. 파일의 위치와 파일의 이름 등을 사용자가 임의로 정할 수 있습니다. 이 경우 명령 프롬프트를 통해 사용할 환경설정 파일을 지정합니다. 이렇게 환경설정 파일을 지정하면, tbpc.cfg 파일은 사용되지 않습니다.

다음은 사용자 환경설정 파일을 지정하는 예입니다.

명령 프롬프트

tbESQL/C 프리컴파일러 옵션은 명령 프롬프트에서 지정할 수도 있습니다.

명령 프롬프트에서는 다음과 같은 형태로 옵션을 지정할 수 있습니다.

다음은 명령 프롬프트에서 프리컴파일러 옵션을 지정하는 예입니다.

프로그램 내부

프로그램 내부에서도 프리컴파일러 옵션을 지정할 수 있습니다.

이 방법은 프리컴파일을 실행하는 도중에 옵션을 변경하고자 할 때 유용하게 사용할 수 있습니다. 또한 운영체 제에 따라 입력할 수 있는 글자 길이의 제한으로 인해 명령 프롬프트에서 옵션을 지정할 수 없는 경우가 있습니다. 이러한 경우 환경설정 파일을 사용할 수도 있지만 프로그램 내부에서 옵션을 지정할 수도 있습니다.

프로그램 내부에서는 다음과 같은 형태로 옵션을 지정할 수 있습니다.

프로그램 내부에서 프리컴파일러의 옵션을 지정할 때 한 가지 주의할 점은 프로그램 내부에서 지정한 옵 션은 C 프로그래밍 언어의 문법에 따른 변수의 영향 범위와는 전혀 무관하다는 것입니다. 즉, EXEC TIBERO OPTION으로 프로그램 내부에 준 옵션 값은 소스 프로그램에서 그 문장 이후에 나오는 tbESQL/C 문장에 만 영향을 미칩니다.

예를 들면 다음과 같습니다. '

tbESQL/C 프리컴파일러 옵션 목록

본 절에서는 Tibero에서 제공하는 프리컴파일러 옵션을 알파벳 순으로 설명합니다.

다음은 tbESQL 프리컴파일러 옵션을 요약한 목록입니다.

옵션
설명

CHAR_MAP

문자 배열(Character Array)을 호스트 변수로 사용할 때 남는 공간을 어떻게 채울지를 지정

CLOSE_ON_COMMIT

커밋할 때 커서를 닫을 것인지를 지정

CODE

전처리기로 전처리하여 생성되는 결과 파일의 코드를 지정

CONFIG

옵션이 기록될 환경설정 파일을 지정

CPOOL

Connection Pool 기능 사용 여부를 지정

CMAX

커넥션 풀에 담을 수 있는 연결의 최대 개수를 지정

CMIN

커넥션 풀에서 유지할 최소 연결 개수를 지정

CINCR

추가 연결이 필요할 때 한 번에 늘어나는 연결 수를 지정

CTIMEOUT

풀 내부에서 사용하지 않는 유휴 상태의 연결을 종료하기까지의 시간(초)을 지정

CNOWAIT

커넥션 풀이 최대 연결 수(CMAX)에 도달했을 때, 새 커넥션 요청이 대기(0)할지 또는 즉시 실패할지 설정

CPP_SUFFIX

생성되는 C++ 결과 파일 이름의 Suffix를 지정

DEF_SQLCODE

SQLCODE 매크로를 생성할 것인지를 지정

DEFINE

directives 전처리를 할 때 필요한 이름들을 지정

DYNAMIC

Dynamic SQL 문장의 타입을 지정

END_OF_FETCH

END-OF-FETCH 상황에 대한 SQLCODE 값을 지정

ERROR_CODE

ESQL 애플리케이션에서 많이 사용되는 3개의 에러 코드를 Tibero와 Oracle 중 어느 것으로 사용할지 지정

HOLD_CURSOR

커서가 닫힌 후 커서 정보를 유지할 것인가를 지정

IGNORE_ERROR

존재하지 않는 객체에 대한 TBR-15044 에러를 무시하고 프리컴파일을 계속 진행할지 여부를 지정

INAME

프리컴파일을 실행할 파일의 이름을 지정합니다.

INCLUDE

#include 파일의 경로를 지정

INSERT_NO_DATA_ERROR

INSERT, SELECT 시에도 NO_DATA_FOUND 기능을 사용할 것인지 지정

LAZY_PSTMT_CHECK

컴파일 시점에서 DECLARE CURSOR가 참조하는 Statement의 존재 여부 확인을 생략할지 지정

LINES

디버깅을 위한 #line 정보의 출력 여부를 지정

LOG_LVL

  • 디버깅용 로그 생성 여부를 결정

  • RUNTIME_MODE가 ODBC인 경우에만 유효

MODE

프로그램이 전반적으로 Tibero의 형식을 따를 것인지 아니면 ANSI의 기준을 따를 것인지를 지정

ONAME

출력 파일의 이름을 지정

ORACA

ORACA 구조체 사용 여부를 지정

PARSE

전처리를 할 때 입력 파일의 내용을 어느 범위까지 파싱할 것인지를 지정

PREFETCH

프로그램의 속도 향상을 위해 몇 개의 로우를 미리 가져올지 지정

RELEASE_CURSOR

커서가 닫힌 후 커서 정보의 해제 여부를 지정

RUNTIME_MODE

런타임에 사용할 드라이버를 지정

SELECT_ERROR

주어진 수 보다 많은 로우가 결과로 나왔을 때 에러를 발생시킬 것인가의 여부를 지정

SQLCHECK

SQL 문장의 내용을 어느 범위까지 검사할 것인가를 지정

SQLERRD_INIT

모든 ESQL 문장 수행 전에 SQLERRD[2] 값을 초기화 여부를 지정

STMT_CACHE

Dynamic SQL 문장에 대해 cache size를 지정

SYS_INCLUDE

전처리를 할 때 사용할 시스템 헤더 파일의 경로를 지정

THREADS

멀티 스레드를 지원할 것인가를 지정

TYPE_CODE

Dynamic SQL 문장의 방법 4를 사용하는 방법을 지정

UNSAFE_NULL

지시자 변수가 없더라도 NULL 값을 허용할 것인가를 지정

USERID

SQLCHECK가 SEMANTICS로 지정되었을 때 서버에 접속하기 위한 사용자 정보를 지정

VARCHAR_SIZE

VARCHAR 타입의 메모리 정렬(memory alignment) 적용 여부를 지정

WORDSIZE

생성되는 결과 파일을 사용할 플랫폼의 WORDSIZE를 지정

CHAR_MAP

CHAR_MAP는 문자 배열을 호스트 변수로 사용할 때 남는 공간을 어떻게 채울지를 지정하는 옵션입니다.

기본값은 CHARZ입니다.

CHAR_MAP의 세부 내용은 다음과 같습니다.

  • 문법

다음은 문자 배열을 호스트 변수로 사용할 때 각 항목별로 Null-terminated와 Blank-padded의 여부를 나타낸 표입니다. Null-terminated는 실제 데이터의 마지막에 NULL문자가 삽입 되는 것을 말하고, Blank- padded는 실제 데이터의 마지막 이후에 남는 공간을 빈칸으로 채우는 것을 말합니다.

CHAR_MAP
Null-terminated 여부
Blank-padded 여부

VARCHAR2

X

O

CHARF

X

O

CHARZ

O

O

STRING

O

X

CHARF는 VARCHAR2와 동일하지만 데이터 자체가 NULL인 실제 데이터의 남는 공간을 빈칸으로 채우지 않고 그대로 둡니다.

  • 지정 장소 환경설정 파일, 명령 프롬프트, 프로그램 내부

CLOSE_ON_COMMIT

CLOSE_ON_COMMIT은 커밋을 할 때 커서를 닫을 것인가 아니면 닫지 않을 것인가를 지정하는 옵션입니다.

CLOSE_ON_COMMIT의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

EXEC SQL COMMIT을 실행할 때 해당 트랜잭션이 처리되는 동안에 열려있던 커서를 자동으로 닫음

NO

EXEC SQL CLOSE cursor_name을 사용해서 사용자가 직접 열린 커서를 닫아야 함 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

CODE

CODE는 전처리기로 전처리하여 생성되는 결과 파일의 코드를 지정하는 옵션입니다.

CODE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

C

프리컴파일러는 C 코드를 생성 (기본값)

CPP

프리컴파일러는 C++ 코드를 생성

  • 지정 장소 환경설정 파일, 명령 프롬프트

CONFIG

CONFIG는 옵션이 기록될 환경설정 파일을 지정하는 옵션입니다.

CONFIG의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

filename

  • 옵션이 기록될 환경설정 파일의 이름을 명시

  • 기본값은 $TB_HOME/client/config 디렉터리의 tbpc.cfg 파일

  • 지정 장소 명령 프롬프트

CPOOL

CPOOL은 이 옵션에 따라, 프리컴파일러 연결 풀 기능을 사용하거나 사용하지 않도록 설정하는 적절한 코드를 생성하는 옵션입니다.

CPOOL의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

connection pooling을 지원

NO

다른 connection pooling 옵션들은 프리컴파일러에 의해 무시 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

CMAX

CMAX는 데이터베이스에 대해 열 수 있는 물리 연결의 최대 개수를 지정하는 옵션입니다. 이 값에 도달하면 더 이상 물리 연결을 열 수 없다. CMAX 값은 항상 CMIN+CINCR 이상이어야 합니다.

이 옵션들은 CPOOL=YES 로 설정된 경우에만 의미가 있습니다.

  • 문법

항목
설명

integer

  • 유효 범위: 1 ~ 65535

  • 기본값: 100

  • 데이터베이스에 대해 동시에 열 수 있는 물리 연결의 최대 개수를 지정

  • 일반적인 애플리케이션에서는 100개의 동시 작업으로 충분하며, 필요에 따라 적절히 설정

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 CPOOL=YES일 때만 적용됩니다.

CMIN

CMIN는 커넥션 풀에서 유지할 최소 물리 연결 개수를 지정합니다. 초기에는 CMIN 개수만큼의 물리 연결이 미리 열리고, 이후에는 필요할 때만 추가로 연결을 연다. 최적의 성능을 위해 애플리케이션에서 동시에 실행될 계획/예상 문장 수에 맞게 설정하는 것이 좋다. 이 옵션들은 CPOOL=YES로 설정된 경우에만 의미가 있습니다.

  • 문법

항목
설명

integer

  • 유효 범위: 1 ~ (CMAX - CINCR)

  • 기본값: 1

  • 커넥션 풀에서 유지할 최소 물리 연결 개수

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 CPOOL=YES일 때만 적용됩니다.

항목
설명

integer

  • 유효 범위: 1 ~ (CMAX - CMIN)

  • 기본값: 1

  • 추가로 열 물리 연결의 증가 단위

CINCR

CINCR는 현재 열린 물리 연결 수가 CMAX보다 작은 경우, 데이터베이스에 추가로 열 물리 연결의 증가 단위를 지정합니다. 불필요한 연결 생성을 피하기 위해 기본값은 1입니다. 이 옵션들은 CPOOL=YES로 설정 된 경우에만 의미가 있습니다.

  • 문법

항목
설명

integer

  • 유효 범위: 1 ~ (CMAX - CMIN)

  • 기본값: 1

  • 추가로 열 물리 연결의 증가 단위

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 CPOOL=YES일 때만 적용됩니다.

CTIMEOUT

CTIMEOUT는 지정된 시간(초) 이상 유휴 상태인 물리 연결을 종료하여, 열린 물리 연결의 수를 적정하게 유지하기 위한 옵션입니다. 설정하지 않으면 유휴 연결을 타임아웃하지 않는다. 이 옵션들은 CPOOL=YES 로 설정된 경우에만 의미가 있습니다.

  • 문법

항목
설명

integer

  • 유효 범위: 1 ~ 65535

  • 기본값: 0 (미설정, 타임아웃하지 않음)

  • 지정된 시간(초) 이상 유휴 상태인 물리 연결을 종료

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 CPOOL=YES일 때만 적용됩니다. 새로운 물리 연결 생성에는 서버 왕복 비용이 수반됩니다.

CNOWAIT

CNOWAIT는 커넥션 풀에서 모든 물리 연결이 바쁘고 총 물리 연결 수가 이미 최대치(CMAX)에 도달한 상 황에서, 즉시 오류를 반환할지 아니면 자유 연결이 생길 때까지 대기할지를 결정합니다. 기본적으로 설정하 지 않으면 대기합니다. 이 옵션은 CPOOL=YES로 설정된 경우에만 의미가 있습니다.

  • 문법

항목
설명

integer

  • 유효 범위: 1 ~ 65535

  • 기본값: 0 (미설정, 대기)

  • 설정 시, 사용 가능한 연결이 없고 더 이상 생성할 수 없으면 즉시 에러를 반환

  • 미설정 시에는 자유 연결을 획득할 때까지 대기

  • 지정 장소 환경설정 파일, 명령 프롬프트

CPP_SUFFIX

CPP_SUFFIX 옵션은 CODE=CPP 옵션이 지정되어 있을 때 생성되는 C++ 파일 이름 앞에 붙여줄 SUFFIX를 지정하는 옵션입니다.

CPP_SUFFIX의 세부 내용은 다음과 같습니다.

  • 문법

다음은 CPP_SUFFIX의 항목에 대한 설명입니다.

항목
설명

filename_extension

예를 들어 CPP_SUFFIX=cpp 또는 CPP_SUFFIX=cc (기본값: 없음)

  • 지정 장소 명령 프롬프트

DEF_SQLCODE

DEF_SQLCODE는 프리컴파일 후 생성된 코드에 SQLCODE 매크로를 포함할 것인지를 지정하는 옵션입니다.

DEF_SQLCODE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

SQLCODE 매크로를 포함시킴

NO

SQLCODE 매크로를 포함시키지 않음 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 DEF_SQLCODE를 'YES'로 설정하면 다음의 코드가 생성됩니다.

위의 sqlca.sqlcode는 SQL 문장의 수행 결과를 나타내는 상태 변수입니다.

sqlca.sqlcode를 사용하기 위해서는 다음의 두 가지 방법 중 한 가지를 사용해 헤더 파일을 프로그램 소 스 코드에 추가해야 합니다. 만약 이 두 가지 방법 중 하나라도 헤더 파일에 포함시키지 않는다면, tbESQL/C 프로그램을 프리컴파일할 때 에러가 발생합니다.

– 프로그램 내부

– 명령 프롬프트

DEFINE

DEFINE 옵션은 전처리를 할 때 필요한 매크로 이름을 지정하는 옵션입니다.

DEFINE의 세부 내용은 다음과 같습니다.

  • 문법

다음은 DEFINE의 항목에 대한 설명입니다.

항목
설명

name

이 명령행 옵션은 코드 내에 directives에 대해 처리해줌

  • 지정 장소 명령 프롬프트

DYNAMIC

DYNAMIC은 Dynamic SQL 문장의 타입을 지정하는 옵션입니다.

DYNAMIC의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

ANSI

  • ANSI 타입의 동적 SQL을 사용하도록 지정

  • 이 옵션 값이 지정되을 경우 Tibero 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ISO

ANSI와 같은 결과를 가짐

TIBERO

  • Tibero 타입의 동적 SQL을 사용하도록 지정(기본값)

  • 이 옵션 값이 지정되었을 경우 ANSI 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ORACLE

TIBERO와 같은 결과를 가짐

ANSI 타입과 ISO 타입은 실제로 동작 방법이 완전히 일치합니다. 또한 TIBERO 타입과 ORACLE 타입도 동작 방법이 같습니다.

Dynamic SQL 문장에 대한 자세한 내용은 “Dynamic SQL”을 참고합니다.

  • 지정 장소 환경설정 파일, 명령 프롬프트

END_OF_FETCH

END_OF_FETCH는 SQL 문장의 수행 후 END-OF-FETCH 상황에서 사용자에게 반환할 SQLCODE 값을 지정하는 옵션입니다.

END_OF_FETCH의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

1403

설정하지 않을 경우 1403이 SQLCODE 값이 됨 (기본값)

100

ANSI 모드 또는 사용자를 지정할 경우 100이 SQLCODE 값이 됨NSI 모드 또는 사용자를 지정할 경우 100이 SQLCODE 값이 됨

  • 지정 장소 환경설정 파일, 명령 프롬프트

ERROR_CODE

ERROR_CODE는 ESQL Application에서 많이 사용되는 3개의 에러 코드를 Tibero와 Oracle 중에 어느 것으로 사용할지 지정합니다.

관련된 에러 코드는 다음과 같습니다.

ERROR_CODE의 사용법은 다음과 같습니다.

  • 문법

항목
설명

TIBERO

Tibero 에러 코드를 사용

ORACLE

Oracle 에러 코드를 사용 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

HOLD_CURSOR

HOLD_CURSOR는 커서가 닫힌 후 커서 정보를 유지할 것인가를 지정하는 옵션입니다.

HOLD_CURSOR의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

커서가 닫힌 후 커서의 정보를 유지

NO

커서가 닫힌 후 커서의 정보를 삭제 (기본값)

  • 지정 장소 명령 프롬프트, 프로그램 내부

IGNORE_ERROR

IGNORE_ERROR는 SQLCHECK가 SEMANTICS 또는 FULL로 설정된 경우, 존재하지 않는 객체(프로시 저, 함수 등)를 참조할 때 발생하는 TBR-15044 에러를 무시하고 프리컴파일을 계속 진행할지 여부를 지정하는 옵션입니다.

IGNORE_ERROR의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

  • TBR-15044 에러가 발생해도 프리컴파일을 계속 진행

  • 에러 메시지는 여전히 출력되지만 프리컴파일은 성공적으로 완료

NO

TBR-15044 에러가 발생하면 프리컴파일을 중단(기본값)

  • 지정 장소 명령 프롬프트

  • 사용법

PSM 블록에서 존재하지 않는 프로시저나 함수를 호출하는 경우, TBR-15044 에러를 무시하고 오라클 Pro*C와 유사한 동작을 위해 이 옵션을 YES로 설정할 수 있습니다.

INAME

INAME은 프리컴파일을 실행할 대상 파일을 지정하는 옵션입니다.

INAME의 세부 내용은 다음과 같습니다.

  • 문법

다음은 INAME의 항목에 대한 설명입니다.

항목
설명

filename

프리컴파일을 실행할 대상 파일의 이름을 명시 (기본값: 없음)

  • 지정 장소 명령 프롬프트

  • 사용법

파일의 이름을 지정할 때 'INAME= 부분'과 파일의 확장자가 tbc일 경우 .tbc도 생략할 수 있습니다.

따라서 다음의 예는 모두 같은 의미입니다.

INCLUDE

INCLUDE는 Include 파일이 위치한 경로를 지정하는 옵션입니다. 프로그램 소스 내부에 사용된 각종 Include 파일이 같은 디렉터리에 있지 않은 경우 프리컴파일할 때 에러가 발생합니다. 따라서 Include 파일이 존재하는 디렉터리를 지정해 주어야 하며, 그때 이 옵션을 사용합니다.

INCLUDE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

항목

설명

pathname

Include 파일이 존재하는 디렉터리를 명시 (기본값: 없음)

  • 지정 장소 환경설정 파일, 명령 프롬프트

INSERT_NO_DATA_ERROR

현재 no data found 처리는 UPDATE와 DELETE 문에 대해서만 적용되고 있습니다. INSERT_NO_DATA_ERROR는 insert, select 구문을 사용하는 경우에도 no data found 처리를 할 것인지 지정하는 옵션입니다.

INSERT_NO_DATA_ERROR의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

EXEC SQL INSERT, SELECT 사용 시에 선택된 row가 없으면 NO_DA TA_FOUND를 반환

NO

선택된 row가 없어도 NO_DATA_FOUND 처리 없이 진행됨(기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

LAZY_PSTMT_CHECK

LAZY_PSTMT_CHECK는 컴파일 시점에서 DECLARE CURSOR 구문이 참조하는 Statement의 존재 여부를 확인하지 않는 옵션입니다. 이 옵션을 YES로 설정하면 DECLARE CURSOR와 PREPARE 구문의 실 행 순서에 관계없이 코드를 작성할 수 있습니다. 그러나 컴파일 단계에서 PREPARE 구문의 누락을 감지할 수 없어 런타임에 정의되지 않은 동작(undefined behavior)이 발생할 위험이 있습니다.

따라서 OPEN 구문을 실행하기 전에 반드시 PREPARE 구문을 포함해야 합니다. 참고로 EXECUTE 구문에는 이 옵션이 적용되지 않습니다.

LAZY_PSTMT_CHECK의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

  • 컴파일 시점에서 DECLARE CURSOR 구문이 참조하는 Statement 존재 여 부를 확인하지 않음

  • DECLARE, PREPARE 순서로 사용 가능하지만, OPEN 이전에 PREPARE를 하지 않으면 컴파일은 문제없지만 런타임 시점에 Undefined Behavior가 발생할 수 있음

NO

컴파일 시점에서 Declare CURSOR 구문이 참조하는 Statement 존재 여부를 확인 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법

LINES

LINES는 디버깅을 위한 #line 정보를 프리컴파일의 결과 파일에 출력할 것인지 여부를 지정하는 옵션입니다.

LINES의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

  • #line 정보를 출력

  • YES로 설정하고 프리컴파일할 경우 생성되는 파일(일반적으로 .c 파일)에 #line 정보를 추가됨

  • 따라서 GDB 등의 디버깅 툴을 사용할 때 원본 파일 (일반적으로 .tbc 파일)을 참고하면서 디버깅 작업을 할 수 있습니다.

NO

#line 정보를 출력하지 않음(기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

LOG_LVL

LOG_LVL은 디버깅용 로그 생성 여부를 결정하는 옵션으로, RUNTIME_MODE가 ODBC인 경우에만 유효합니다. 구체적으로 ESQL 런타임에서 tbertl_odbc 라이브러리를 사용할 때만 동작합니다.

LOG_LVL의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

NONE

로그를 생성하지 않음 (기본값)

TRACE

TRACE 레벨의 로그를 stdout으로 출력

DEBUG

DEBUG 레벨의 로그를 stdout으로 출력

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법

이 옵션은 RUNTIME_MODE=ODBC로 설정된 경우에만 적용됩니다. stdout에 로그가 출력됩니다.

ODBC아닌 경우에 로그를 출력하는 방법은 ESQL_LOG_DIR과 ESQL_LOG_LVL 환경변수를 사용하 여 로그 파일을 생성이 가능하며, 이 경우에 stdout에 로그가 출력되는 것이 아니라 파일에 저장됩니다.

다음은 LOG_LVL=TRACE로 설정했을 때의 사용 예입니다.

위와 같이 설정하면 다음과 같은 형태의 로그가 stdout으로 출력됩니다.

MODE

MODE는 tbESQL/C 프로그램이 전반적으로 Tibero의 형식을 따를 것인지 아니면, ANSI의 기준을 따를 것인지를 지정하는 옵션입니다. 이 옵션은 여러 가지 옵션을 한꺼번에 지정해 주는 역할을 합니다. 이 옵션으로 CLOSE_ON_COMMIT, DYNAMIC, TYPE_CODE 등의 옵션 값을 한꺼번에 지정할 수 있으며, 추가로 다른 조건을 지정할 수도 있습니다.

MODE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

ANSI

  • ANSI 타입의 동적 SQL을 사용하도록 지정

  • 이 옵션 값이 지정되었을 경우 Tibero 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ISO

ANSI와 같은 결과를 가짐

TIBERO

  • Tibero 타입의 동적 SQL을 사용하도록 지정 (기본값)

  • 이 옵션 값이 지정되었을 경우 ANSI 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ORACLE

TIBERO와 같은 결과를 가짐

다음은 MODE 옵션에 지정된 값에 따라 설정되는 세부 옵션입니다.

옵션
ANSI
TIBERO

CLOSE_ON_COMMIT

YES

NO

DYNAMIC

ANSI

TIBERO

TYPE_CODE

ANSI

TIBERO

ANSI는 ISO와, TIBERO는 ORACLE과 동일한 기능을 합니다.

  • 지정 장소 환경설정 파일, 명령 프롬프트

ONAME

ONAME은 프리컴파일러의 결과물로 나오는 출력 파일의 이름을 지정하는 옵션입니다.

ONAME의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

filename

원하는 출력 파일의 이름을 명시

(기본값: 입력된 파일 이름에서 확장자만 .c로 바꿈)

  • 지정 장소 환경설정 파일, 명령 프롬프트

ORACA

ORACA는 Oracle Communications Area 구조체를 사용할지 여부를 지정하는 옵션입니다.

ORACA의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

프로그램 내에 EXEC SQL INCLUDE ORACA나 #include oraca.h 문장이 존재해야 함

NO

기본값

  • 지정 장소 환경설정 파일, 명령 프롬프트

PARSE

PARSE는 tbESQL/C 문장의 내용을 전처리할 때 어느 범위까지 파싱할 것인가를 지정하는 옵션입니다.

PARSE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

NONE

EXEC SQL {BEGIN | END} DECLARE SECTION 안에 있는 호스트 변수 선언들과 매크로 명령들만을 처리

PARTIAL

  • EXEC SQL {BEGIN | END} DECLARE SECTION 안에 있는 호스트 변수 선언들과 모든 매크로 명령들을 처리

  • Windows 환경과 C++ 언어를 사용할 때는 반드시 이 값을 사용해야 함

FULL

전처리기에 내장되어 있는 c parser가 EXEC SQL {BEGIN | END} DECLARE SECTION 안에 뿐만 아니라 밖에 선언된 변수들도 처리를 하며, include되는 헤더 파일의 매크로, 변수까지도 처리를 함. (기본값)

  • 지정 장소 명령 프롬프트, 프로그램 내부

PREFETCH

PREFETCH는 속도 향상을 위해 몇 개의 로우를 미리 가져올지를 지정하는 옵션입니다.

PREFETCH의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

integer

미리 가져올 로우의 개수를 지정 (기본값: 1)

  • 지정 장소 환경설정 파일, 명령 프롬프트

RELEASE_CURSOR

RELEASE_CURSOR는 커서가 닫힌 후 커서에 저장된 정보의 해제 여부를 지정하는 옵션입니다.

RELEASE_CURSOR의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

커서가 닫히면 커서의 정보를 해제

NO

커서가 닫혀도 커서의 정보를 해제하지 않음 (기본값)

  • 지정 장소 명령 프롬프트, 프로그램 내부

RUNTIME_MODE

RUNTIME_MODE는 런타임에 사용할 드라이버를 지정하는 옵션입니다.

RUNTIME_MODE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

ODBC

  • odbc 함수를 사용

  • 컴파일과 링크 과정에서 tbERTL 라이브러리 이외에 odbc 라이브러리를 함께 링크해야 함

TIBERO

  • tbCLI 함수를 사용

  • 컴파일과 링크 과정에서 tbERTL 라이브러리 이외에 tbCLI 라이브러리를 함께 링크해야 함 (기본값)

  • 지정 장소 명령 프롬프트, 프로그램 내부

SELECT_ERROR

SELECT_ERROR는 호스트 변수 등으로 인해 주어진 수행 결과 개수보다 실제로 질의를 수행한 결과가 더 많이 반환된 경우 에러를 발생시킬 것인가를 지정하는 옵션입니다.

SELECT_ERROR의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

더 많은 로우가 반환되었을 경우 에러를 발생시킴 (기본값)

NO

더 많은 로우가 반환되어도 에러를 발생시키지 않음

  • 지정 장소 명령 프롬프트, 프로그램 내부

  • 사용법

다음은 tbESQL/C 프로그램의 예입니다.

위 예에서 만약 질의를 수행한 결과가 더 많은 로우를 반환하는 경우 SELECT_ERROR 옵션에 지정된 값에 따라 다음과 같이 나타나는 결과가 다릅니다.

항목
결과

YES

ERROR_ESQL_TOO_MANY_ROW_IN_SELECT 에러가 발생

NO

  • 수행된 질의 결과의 첫 번째 로우를 호스트 변수에 할당

  • 이때 에러는 발생하지 않음

SQLCHECK

SQLCHECK는 tbESQL/C 문장의 내용을 어느 범위까지 검사할 것인가를 지정하는 옵션입니다.

SQLCHECK의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

SEMANTICS

  • SEMANTICS로 지정되면, 프리컴파일러는 서버에 접속을 시도

  • 따라서 SEMANTICS로 설정하기 위해서는 USERID 옵션이 반드시 필요

  • 접속이 성공하면 프리컴파일러는 SQL 문장을 서버로 보내 문법뿐만 아니라 SQL 문장이 참조하는 스키마 객체의 내용까지 검사하며, 컬럼의 타입 정보 등을 바탕으로 올바른 타입끼리 호스트 변수에 바인딩 되는지도 검사

  • tbESQL/C 문장뿐만 아니라 DDL이나 PSM일 경우에도 문법과 내용을 모두 검사

FULL

SEMANTICS와 동일한 의미를 가짐

SYNTAX

tbpc 유틸리티는 서버에 접속하지 않고 자체적으로 ESQL 문법과 SQL 문법 을 검사(기본값)

  • 지정 장소 명령 프롬프트, 프로그램 내부

SQLERRD_INIT

SQLERRD_INIT은 모든 ESQL 문장의 수행 전에 이전 ESQL 문장 수행에 의해 남아있는 SQLCA.SQLER RD[2] 값의 초기화 여부를 지정하는 옵션입니다.

SQLERRD_INIT의 세부 내용은 다음과 같습니다.

  • 문법

YES

SQLCA.SQLERRD[2]의 값을 초기화 (기본값)

NO

SQLCA.SQLERRD[2]의 값을 초기화하지 않음

  • 지정 장소 환경설정 파일, 명령 프롬프트

STMT_CACHE

STMT_CACHE는 Dynamic SQL 문장에 대해 cache size를 지정하는 옵션입니다.

STMT_CACHE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

integer

애플리케이션에서 distinct한 Dynamic SQL 문에 대해 cache size를 지정(기본값: 10)

  • 지정 장소 환경설정 파일, 명령 프롬프트

SYS_INCLUDE

SYS_INCLUDE는 system header 파일이 위치한 경로를 지정하는 옵션입니다.

SYS_INCLUDE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

pathname

system header 파일이 존재하는 디렉터리를 명시 (기본값: 없음)

  • 지정 장소 환경설정 파일, 명령 프롬프트

THREADS

THREADS는 멀티 스레드를 지원 여부를 지정하는 옵션입니다.

THREADS의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

멀티 스레드를 지원

NO

멀티 스레드를 지원하지 않음(기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법 다음과 같은 문장에 멀티 스레드를 사용하려면, THREADS 옵션의 값은 반드시 'YES'로 설정되어 있어야 합니다.

    • ENABLE THREADS

    • CONTEXT USE

    • CONTEXT ALLOCATE

    • CONTEXT FREE

TYPE_CODE

TYPE_CODE는 Dynamic SQL 문장을 사용하는 방법 중에 방법 4를 사용하는 방법을 지정하는 옵션입니다.Dynamic SQL 문장에 대한 자세한 내용은 “Dynamic SQL”을 참고합니다.

TYPE_CODE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

항목

설명

ANSI

  • ANSI 타입의 동적 SQL을 사용하도록 지정

  • 이 옵션 값이 지정되을 경 우 Tibero 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ISO

ANSI와 같은 결과를 가짐

TIBERO

  • Tibero 타입의 동적 SQL을 사용하도록 지정(기본값)

  • 이 옵션 값이 지정되었을 경우 ANSI 타입의 동적 SQL을 사용하면 프리컴파일러에서 문법 에러를 발생

ORACLE

TIBERO와 같은 결과를 가짐

ANSI 타입은 ISO 타입과 동작 방법이 동일하며, TIBERO 타입은 ORACLE 타입과 동작 방법이 동일합니다.

  • 지정 장소 환경설정 파일, 명령 프롬프트

UNSAFE_NULL

UNSAFE_NULL은 지시자 변수가 없을 때 NULL 값을 허용할 것인지의 여부를 지정하는 옵션입니다.

NULL데이터가 예상되는 경우에도 편의상 지시자 변수 사용을 생략하고 싶을 때 이 옵션을 사용합니다.

UNSAFE_NULL의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

  • NULL을 허용

  • 지시자 변수 없이 NULL 데이터를 호스트 변수로 받아도 에러는 발생하지 않음

NO

  • NULL을 허용하지 않음 (기본값)

  • 지시자 변수 없이 NULL 데이터를 호스트 변수로 받으면 1405 에러를 발생

  • 1405 에러는 가져온 데이터가 NULL이나 지시자 변수가 존재하지 않아 tbESQL/C 런타임 라이브러리가 개발자에게 NULL 값의 존재 여부를 알려줄 방법이 없을 경우 발생되는 에러

  • 지정 장소 환경설정 파일, 명령 프롬프트

USERID

USERID는 서버 접속을 할 때 필요한 사용자 계정의 정보를 지정하는 옵션입니다. 이 옵션은 SQL 문장의 내용을 검사하기 위한 접속 정보일 뿐이며, 실제 데이터베이스를 실행할 때의 접속 정보와는 무관합니다.

USERID의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

username

사용자의 이름을 명시

password

사용자의 패스워드를 명시

  • 지정 장소 명령 프롬프트

  • 사용법 SQLCHECK를 SEMANTICS나 FULL로 지정할 경우 반드시 이 옵션을 사용해야 합니다.

VARCHAR_SIZE

VARCHAR_SIZE는 VARCHAR 타입의 메모리 정렬(memory alignment)을 적용할지 여부를 지정하는 옵션입니다. 이 옵션을 YES로 설정하면 효율적인 메모리 사용을 위해 VARCHAR 생성 크기가 조정됩니다.

VARCHAR_SIZE의 세부 내용은 다음과 같습니다.

  • 문법

항목
설명

YES

  • VARCHAR 크기에 대해 메모리 정렬을 적용

  • 선언된 크기를 4바이트 경계에 맞게 조정하여 효율적인 메모리 사용을 제공

NO

  • VARCHAR 크기에 대해 메모리 정렬을 적용하지 않음

  • 선언된 크기 그대로 사용 (기본값)

  • 지정 장소 환경설정 파일, 명령 프롬프트

  • 사용법

VARCHAR_SIZE=YES로 설정하면 다음과 같은 크기 조정이 적용됩니다.

크기 조정 규칙: (조정된 크기 + 2)가 4의 배수가 되도록 조정됩니다. VARCHAR_SIZE=NO인 경우 선언한 크기가 그대로 유지됩니다:

circle-exclamation

WORDSIZE

WORDSIZE는 64bits에서 32bits용 소스 또는 그 반대로도 프리컴파일러로 소스를 생성할 수 있도록 하는 옵션입니다. (기본값: 64)

WORDSIZE의 세부 내용은 다음과 같습니다.

  • 문법

  • 지정 장소 환경설정 파일, 명령 프롬프트

Last updated