tbESQL/C 문장

tbESQL/C 프로그램에서 데이터베이스 처리를 위해 사용하는 tbESQL/C 문장을 설명합니다.

개요

tbESQL/C 프로그램은 C 프로그래밍 언어의 소스 코드와 tbESQL/C 문장이 혼합되어 있습니다. tbESQL/C 문 장(tbESQL/C Statement)은 tbESQL/C 프로그램 내에서 SQL 질의, 로우의 삽입과 갱신, 제거 등과 같은 데이터베이스와 관련된 처리를 하는 문장을 말합니다.

tbESQL/C 문장은 크게 다음과 같이 두 가지로 구성됩니다.

  • 실행 문장(Executable Statements) 실행 문장은 말 그대로 데이터베이스에 어떠한 동작을 실행하기 위한 문장입니다.

  • 지시어(Directive) 지시어는 tbESQL/C 프로그램의 실행을 설정하기 위한 것으로 데이터베이스에 대한 실행은 이루어지지 않습니다.

tbESQL/C 문장 문법

다음은 tbESQL/C 문장의 문법을 나타내는 그림입니다.

[그림 1] tbESQL/C 문장의 문법

[그림 1]을 기준으로 tbESQL/C 문장의 문법을 해석하는 방법은 다음과 같습니다.

항목
설명

ESQL/C 문장의 문법을 대표하는 이름은 왼쪽 위에 나타냄(예: esql_stmt)

타원 안의 포함되는 문자는 키워드(Keyword)이며, 반드시 tbESQL/C 문장 내에 포함되어 있어야 함 (예: EXEC SQL, STMT)

사각형 안의 문자는 tbESQL/C 문장에 포함된 문법의 구성요소이며, 구성요소에 맞는 적절한 문자열로 바꾸어야 함 (예: option, param, choice1, choice2)

원 안의 문자는 tbESQL/C 문장의 기호이며, 반드시 tbESQL/C 문장 내에 포함되어 있어야 함 (예: 소괄호(( )), 콤마(,))

  • tbESQL/C 문장을 완성하는 순서는 화살표를 따라가면 됨

  • 여러 갈래로 갈라지면서 순방향으로 이동하는 화살표는 두 가지 형태로 띔

  • 이는 [그림 1]에서 option은 포함되거나 포함되지 않은 경우이며, choice1, choice2는 여러 가지 중에 하나만이 tbESQL/C 문장에 포함되어야 하는 경우

  • 또는 역방향으로 이동하는 화살표는 포함되지 않거나 한번 이상 포함되는 경우

  • [그림 1]에서 콤마(,)에 해당되며, param은 반드시 한번 이상 포함되어야 함

다음의 tbESQL/C 문장은 [그림 1]에 따라 모두 유효한 예입니다.

tbESQL/C 문장 공통 문법

본 절에서는 tbESQL/C 문장에서 공통적으로 자주 사용되는 부분을 설명합니다.

AT

AT 절은 이름이 있는 데이터베이스 연결을 사용해 tbESQL/C 문장을 수행할 때 사용합니다.

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

  • 문법

  • 구성요소

구성요소
설명

database_name

  • 사용할 데이터베이스의 이름을 명시

  • 여러 개의 데이터베이스 접속을 구분하여 관리하고 싶을 때 database_name을 사용

  • 데이터베이스의 이름은 DECLARE DATABASE를 사용해 미리 선언되어 있어야 함

  • 만약 선언되어 있지 않은 이름을 사용할 경우 에러가 발생

:host_variable

  • 사용할 데이터베이스의 이름이 저장된 호스트 변수를 명시

  • 데이터베이스의 이름은 미리 선언되어 있어야 함

FOR 절

FOR 절은 tbESQL/C 문장을 반복해서 수행할 필요가 있을 때 사용합니다.

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

  • 문법

  • 구성요소

구성요소
설명

integer

반복 횟수를 명시

:host_variable

  • 반복 횟수가 저장된 호스트 변수를 명시

  • 호스트 변수는 int 등의 숫자를 저장할 수 있는 타입이면 됨

DESCRIPTOR 이름

DESCRIPTOR 이름은 Dynamic SQL을 사용할 때 필요한 DESCRIPTOR를 가리키는 이름입니다.

DESCRIPTOR 이름은 프리컴파일러 옵션 즉 MODE, DYNAMIC의 값에 따라 다음과 같이 사용될 수 있습니다.

옵션 값
설명

ANSI

ansi_descriptor_name이 사용됨

ANSI 외

normal_descriptor_name이 사용됨

DESCRIPTOR 이름의 세부 내용은 다음과 같습니다.

  • 문법

  • 구성요소

- descriptor_name

구성요소
설명

normal_descriptor_name

MODE가 TIBERO(ORACLE)일 때 사용

ansi_descriptor_name

MODE가 ANSI(ISO)일 때 사용

- normal_descriptor_name

구성요소
설명

identifier

서술자의 이름을 정의한 식별자

- ansi_descriptor_name

구성요소
설명

:host_variable

  • 서술자의 이름이 저장된 호스트 변수를 명시합니다.

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등의 문자열을 저장할 수 있는 타입

string literal

서술자의 이름을 작은따옴표(' ')로 감싸서 사용

tbESQL/C 문장 목록

본 절에서는 Tibero에서 제공하는 tbESQL/C 문장을 알파벳 순으로 설명합니다. 단, 각 tbESQL/C 문장의 구성요소를 설명할 때 키워드는 특별한 경우가 아니면 설명하지 않습니다.

다음은 tbESQL/C 문장을 요약한 목록입니다.

  • 실행문장

tbESQL/C 문장
설명

ALLOCATE

PL/SQL 블록에서 커서변수를 사용하기 위해 커서를 할당

ALLOCATE DESCRIPTOR

서술자에 메모리를 할당

CALL

저장된 프러시저를 호출하여 해당 프러시저를 수행

CLOSE

커서를 닫고 더 이상 사용하지 않음

COMMIT

트랜잭션을 커밋

CONNECT

Tibero의 데이터베이스에 접속

CONTEXT ALLOCATE

컨텍스트에 메모리를 할당

CONTEXT FREE

컨텍스트에 할당된 메모리를 해제

CONTEXT USE

지정된 컨텍스트를 사용

DEALLOCATE DESCRIPTOR

서술자에 할당된 메모리를 해제

DELETE

로우를 삭제

EXECUTE

준비된 Dynamic SQL 문장을 실행

EXECUTE DESCRIPTOR

준비된 Dynamic SQL 문장을 실행 (ANSI)

EXECUTE ... END-EXEC

PL/SQL 블록을 실행

EXECUTE IMMEDIATE

Dynamic SQL 문장을 바로 실행

FETCH

커서를 이용하여 다음 로우를 읽음

FETCH DESCRIPTOR

커서를 이용하여 다음 로우를 읽는다. (ANSI)

GET DESCRIPTOR

지정한 서술자에서 원하는 정보를 가져옴

INSERT

로우를 삽입

LOB CLOSE

오픈된 LOB 대용량 객체를 닫음

LOB CREATE TEMPORARY

TEMPORARY LOB을 생성

LOB DESCRIBE

대용량 객체형의 데이터 타입의 속성을 얻어옴

LOB FREE TEMPORARY

생성된 TEMPORARY LOB의 메모리를 해제

LOB OPEN

LOB 대용량 객체를 오픈

LOB READ

LOB 지시자(LOB locator)를 사용하여 내용을 읽음

LOB WRITE

LOB 지시자가 가리키는 위치에 내용을 기록

OPEN

커서를 열고 연관된 SQL 문장을 실행

PREPARE

Dynamic SQL 문장을 준비

ROLLBACK

트랜잭션에 롤백을 수행

SAVEPOINT

저장점(Savepoint)을 설정

SELECT

SQL 질의를 수행

UPDATE

로우를 갱신

  • 지시어

tbESQL/C 문장
설명

DECLARE CURSOR

SQL 문장과 연관된 커서를 선언

DECLARE DATABASE

새로운 데이터베이스 접속을 선언

DECLARE STATEMENT

SQL 문장이나 PL/SQL 문장을 identifier를 통해 선언.

DESCRIBE

서술자를 초기화

DESCRIBE DESCRIPTOR

서술자에 호스트 변수의 정보를 저장

ENABLE THREADS

멀티 스레드를 사용

SET DESCRIPTOR

지정한 서술자에 사용자가 입력해야 할 정보를 씀

TYPE

사용자가 지정한 데이터 타입을 외부 테이터 타입으로 동격화

VAR

특정 호스트 변수의 데이터 타입을 외부 데이터 타입으로 동격화

WHENEVER

에러가 발생했을 때 해당 에러에 대한 처리 방법을 지정

ALLOCATE

ALLOCATE는 PL/SQL 블록에서 cursor variable을 사용하기 위한 문장입니다. cursor variable은 ALLOCATE 문장을 사용하기 전에 SQL_CURSOR를 통해 선언되어야 합니다.

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

  • 문법

  • 구성요소

- allocate_statement

구성요소
설명

at_clause

  • 커밋을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

alloc_dest

커서를 할당할 변수를 명시

- alloc_dest

구성요소
설명

:host_variable

커서 변수를 저장하고 있는 호스트 변수

indicator

지시자 변수를 명시할 때 사용

  • 예제

다음은 ALLOCATE DESCRIPTOR를 사용하는 예입니다.

ALLOCATE DESCRIPTOR

ALLOCATE DESCRIPTOR는 서술자에 메모리를 할당할 때 사용하는 문장입니다. 단, 이 문장은 ANSI 타입 의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

구성요소
설명

for_clause

  • 반복 횟수를 지정

  • 자세한 내용은 “FOR 절”을 참고

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

WITH MAX integer

사용할 호스트 변수의 최대 개수를 지정 (기본값: 100)

  • 예제

다음은 ALLOCATE DESCRIPTOR를 사용하는 예입니다.

CALL

CALL은 저장된 프러시저를 호출하여 해당 프러시저를 수행하는 문장입니다. 이 문장을 사용하기 위해선 먼저 프러시저가 저장된 데이터베이스에 접속한 상태여야 합니다.

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

  • 문법

  • 구성요소

– call_statement

구성요소
설명

schema

프러시저를 가지고 있는 스키마를 명시

pkg

프러시저가 저장된 패키지를 명시

dblink

프러시저가 위치한 database link 이름을 명시

proc_param

프러시저의 input으로 쓰이는 파라미터를 명시

host_var

프러시저의 return value를 저장할 host variable을 명시

indicator_clause

indicator를 명시

– indicator_clause

구성요소

host_var

indicator 정보를 저장할 host variable을 명시

  • 예제 다음은 CALL를 사용하는 예입니다.

CLOSE

CLOSE는 커서를 닫을 때 사용하는 문장입니다. 이 문장은 현재 열려 있는 커서에만 사용할 수 있습니다.

커서를 닫으면 커서를 생성할 때 할당되었던 모든 시스템 리소스가 반환됩니다.

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

  • 문법

  • 구성요소

- close_statement

구성요소
설명

cursor_name

닫으려는 커서의 이름을 명시

- cursor_name

identifier

커서의 이름을 정의한 식별자

  • 예제

다음은 CLOSE를 사용하는 예입니다.

COMMIT

COMMIT은 현재 진행 중인 트랜잭션을 커밋하고 트랜잭션에 의해 갱신된 모든 내용을 데이터베이스에 반영할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

구성요소
설명

at_clause

  • 커밋을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

WORK

기존 ESQL 프로그램과의 호환성을 위한 키워드로 별도의 기능적 의미는 없음

RELEASE

모든 리소스를 반환하고 데이터베이스 접속을 종료

  • 예제

다음은 COMMIT을 사용하는 예입니다.

CONNECT

CONNECT는 데이터베이스에 접속할 때 사용하는 문장입니다. 이 문장을 사용할 때는 사용자 이름과 패스 워드를 반드시 명시해야 합니다. 데이터베이스 관리자(DBA: Database Administrator, 이하 DBA)로 접속할 수도 있습니다.

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

  • 문법

  • 구성요소

- connect_statement

구성요소
설명

user_and_passwd

사용자 이름과 패스워드를 명시

at_clause

  • 접속할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있

  • 자세한 내용은 “AT 절”을 참고

using_clause

데이터베이스의 별칭을 명시

- user_and_passwd

구성요소
설명

user_password

  • 사용자 이름과 패스워드를 명시

  • 사용자 이름과 패스워드의 중간에 슬래시(/)를 포함해 하나의 문자열로 표현(예: 'tibero/tibero')

user_id

  • 사용자 이름을 명시

  • 호스트 변수이며, 문자열이 직접 올 수 없음

passwd

  • 패스워드를 명시

  • 호스트 변수이며, 문자열이 직접 올 수 없음

- user_passwd

구성요소
설명

:host_variable

사용자 이름과 패스워드를 저장하고 있는 호스트 변수

- user_id

구성요소
설명

:host_variable

사용자의 계정을 저장하고 있는 호스트 변수

- passwd

구성요소
설명

:host_variable

패스워드를 저장하고 있는 호스트 변수

- using_clause

구성요소
설명

db_alias

데이터베이스의 별칭을 명시

- database_name

구성요소
설명

identifier

데이터베이스의 이름을 정의한 식별자

  • 예제

다음은 CONNECT를 사용하는 예입니다.

CONTEXT ALLOCATE

CONTEXT ALLOCATE는 tbESQL/C 문장의 실행 정보를 담고 있는 컨텍스트를 위한 메모리를 할당할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

– context_allocate_statement

구성요소
설명

context

  • 할당할 컨텍스트 변수

  • sql_context 타입의 포인터로 미리 선언해둔 호스트 변수여야 함

– context

구성요소
설명

:host_variable

sql_context 타입의 포인터로 선언한 호스트 변수

  • 예제

다음은 CONTEXT ALLOCATE를 사용하는 예입니다.

CONTEXT FREE

CONTEXT FREE는 컨텍스트에 할당된 메모리를 해제할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

구성요소
설명

context

  • 해제할 컨텍스트 변수

  • sql_context 타입의 포인터로 미리 선언되어 있어야 하며, CONTEXT ALLO CATE를 통해 이미 할당되어 있어야 함

  • 예제

다음은 CONTEXT FREE를 사용하는 예입니다.

CONTEXT USE

CONTEXT USE는 여러 개의 컨텍스트 중에서 사용하려는 컨텍스트를 지정할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

구성요소
설명

context

  • 사용할 컨텍스트 변수를 명시

  • sql_context 타입의 포인터로 미리 선언되어 있어야 하며, CONTEXT ALLO CATE를 통해 이미 할당되어 있어야 함

DEFAULT

  • DEFAULT로 선언할 경우 디폴트 컨텍스트를 사용하게 됨

  • 디폴트 컨텍스트는 할당과 해제를 할 필요 없이 그대로 사용할 수 있음

  • 예제

다음은 CONTEXT USE를 사용하는 예입니다.

DEALLOCATE DESCRIPTOR

DEALLOCATE DESCRIPTOR는 ALLOCATE DESCRIPTOR를 사용해 할당된 서술자의 메모리를 해제 할 때 사용하는 문장입니다. 단, 이 문장은 ANSI 타입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

구성요소
설명

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

  • 예제

다음은 DEALLOCATE DESCRIPTOR를 사용하는 예입니다.

DECLARE CURSOR

DECLARE CURSOR는 커서를 선언할 때 사용하는 문장입니다. 이 문장을 사용해 스크롤 가능 커서(Scrollable Cursor)를 선언할 수도 있습니다. 커서를 선언할 때는 커서의 이름을 반드시 명시하여야 하며, SELECT 문장과 연관시켜야 합니다.

Dynamic SQL 문장에 대한 커서인 경우에는 문장 이름(Statement Name)과 연관시킵니다. 이때 문장 이름 은 PREPARE를 통해 준비되어 있어야 합니다.

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

  • 문법

  • 구성요소

– declare_cursor_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “8.3.1. AT 절” 을 참고

cursor_name

  • 커서의 이름을 명시

SCROLL

  • 스크롤 가능 커서로 선언

cursor_specification

  • 커서로 수행할 문장을 명시

statement_name

  • 준비된 문장의 이름을 명시

  • 사용될 문장은 PREPARE를 통해 준비 되어 있어야 함

– cursor_specification

구성요소
설명

query_expression

  • SELECT 문장을 명시

  • INTO 절을 포함할 수 없음

  • 예제

다음은 DECLARE CURSOR를 사용한 예입니다.

DECLARE DATABASE

DECLARE DATABASE는 데이터베이스를 선언할 때 사용하는 문장입니다.

여러 개의 데이터베이스 접속을 사용할 때 각각의 접속은 데이터베이스의 이름으로 관리됩니다. DECLARE DATABASE로 선언한 데이터베이스의 이름을 CONNECT 문장이나 COMMIT 문장의 RELEASE를 통해 각각을 구분하여 관리할 수 있습니다.

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

  • 문법

  • 구성요소

구성요소
설명

database_name

선언할 데이터베이스 이름을 명시

  • 예제

다음은 DECLARE DATABASE를 사용한 예입니다.

DECLARE STATEMENT

DECLARE STATEMENT는 SQL 문장이나 PL/SQL 문장을 identifier로 지정하기 위해 사용하는 문장입니다.

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

  • 문법

  • 구성요소

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장 된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

statement_name

  • 준비된 문장의 이름을 명시

  • 이 때의 이름은 identifier로 사용할 수 있음

  • 예제

다음은 DECLARE STATEMENT를 사용한 예입니다.

DELETE

DELETE는 테이블 또는 뷰에서 로우를 삭제할 때 사용하는 문장입니다.

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

  • 문법 DELETE의 문법에 대한 자세한 내용은 "Tibero SQL 참조 안내서"를 참고합니다.

  • 특권 DELETE를 사용하려면, 대상이 되는 테이블 또는 뷰에 대한 DELETE 객체 특권을 갖고 있거나 DELETE ANY TABLE 시스템 특권을 갖고 있어야 합니다.

  • 구성요소

구성요소
설명

FOR

  • 입력 배열 변수와 함께 사용될 경우 FOR 절을 이용하여 DELETE를 실행할 입력 배열 변수의 크기를 정할 수 있음

  • FOR 절이 포함되어 있지 않거나 실행할 배열의 크기가 입력 배열 변수의 크 기보다 크면, 배열 전체에 대하여 DELETE를 실행

CURRENT OF

  • DELETE를 커서와 함께 사용할 수도 있음

  • 현재 커서가 가리키는 로우를 삭제하려면 WHERE 절에 CURRENT OF와 커서 이름을 포함시킴

  • 이때 커서는 닫혀 있지 않아야 함

  • 예제

다음은 DELETE를 사용하는 예입니다.

위의 예에서 알 수 있듯이 DELETE 문장은 EXEC SQL로 시작합니다는 것을 제외하면, 일반적인 SQL 문장의 문법과 크게 다르지 않습니다.

DESCRIBE

DESCRIBE는 호스트 변수의 서술자를 초기화할 때 사용하는 문장입니다. 이 문장에는 Dynamic SQL 문장 이 사용되는데, 사용될 문장은 미리 PREPARE를 통해 준비해야 합니다.

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

  • 문법

  • 구성요소

구성요소
설명

BIND VARIABLES FOR

  • 입력으로 사용되는 호스트 변수의 서술자를 초기화하고, 바인드 변수를 바인딩하기 위해 사용

  • 이 부분을 명시하지 않으면 SELECT LIST FOR가 디폴트

SELECT LIST FOR

  • SELECT 문장의 SELECT 리스트의 정보를 위한 서술자를 초기화

  • 명시 하지 않을 경우 기본값

statement_name

  • 사용될 문장의 이름을 명시

  • 사용될 문장의 이름은 이미 PREPARE를 통해 준비되어 있어야 함

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

  • 예제

다음은 DESCRIBE를 사용하는 예입니다.

DESCRIBE DESCRIPTOR

DESCRIBE DESCRIPTOR는 서술자에 호스트 변수의 정보를 저장할 때 사용하는 문장입니다. 단, 이 문장은 ANSI 타입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

구성요소
설명

INPUT

  • 서술자가 입력과 출력 중에 어느 곳에 사용될지 지정

  • 생략이 가능하며 기본값은 INPUT

  • 사용자가 바인드 변수에 값을 직접 입력하여, tbESQL/C 라이브러리에서 사용될 수 있도록 함

OUTPUT

  • 서술자가 입력과 출력 중에 어느 곳에 사용될지 지정합니다. 생략이 가능하며 기본값은 INPUT

  • 사용자가 바인드 변수의 멤버를 통해 tbESQL/C 라이브러리가 동작하면서 저장된 결과 값의 메타데이터(metadata)를 확인하고, 적합한 대응을 할 수 있도록 해줌

statement_name

  • 사용될 문장의 이름을 명시

  • 사용될 문장의 이름은 이미 PREPARE를 통 해 준비되어 있어야 함

SQL

기존 ESQL 프로그램과의 호환성을 위한 키워드로 특별한 의미는 없음

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

  • 예제

다음은 DESCRIBE DESCRIPTOR를 사용하는 예입니다.

ENABLE THREADS

ENABLE THREADS는 멀티 스레드를 사용하기 전에 반드시 호출되어야 하는 문장입니다. 이 문장을 사용하지 않고 컨텍스트 관련 문장을 사용할 경우 에러가 발생합니다.

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

  • 문법

  • 예제

다음은 ENABLE THREADS를 사용하는 예입니다.

EXECUTE

EXECUTE는 Dynamic SQL 문장을 실행할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

- execute_statement

구성요소
설명

for_clause

  • for_clause를 사용해 EXECUTE를 수행할 횟수를 지정할 수 있음

  • 자세한 내용은 “FOR 절”을 참고합니다.

statement_name

  • 실행할 문장의 이름을 명시

  • 실행할 문장의 이름은 PREPARE 문장을 통해 이미 준비되어 있어야 함

USING using_param_clause

  • USING 절을 이용하여 입력 변수를 지정

  • 또는 입력 배열 변수를 사용할 수도 있음

psm_statement

실행할 anonymous psm block 문장의 내용을 서술

- using_param_clause

구성요소
설명

identifier

입력 변수를 정의한 식별자

:host_variable

  • 입력 변수를 명시

  • 입력 변수의 개수는 하나 이상이고, 준비된 문장 내에 포함된 입력 변수의 개수와 같아야 함

indicator

지시자 변수를 명시할 때 사용

  • 예제

다음은 EXECUTE를 사용하는 예입니다.

EXECUTE DESCRIPTOR

EXECUTE DESCRIPTOR는 Dynamic SQL 문장을 실행할 때 사용하는 문장입니다. 단, 이 문장은 ANSI 타 입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

- ansi_execute_statement

구성요소
설명

for_clause

  • for_clause를 사용해 EXECUTE를 수행할 횟수를 지정할 수 있음

  • 자세한 내용은 “FOR 절”을 참고

statement_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 서술자 이름을 문자열로 가지고 있어야 함

- ansi_using_and_into_clause

구성요소
설명

USING

입력 호스트 변수의 정보를 가지고 있는 서술자를 사용해야 할 경우 명시

INTO

문장 수행 결과가 출력 값을 가지고 있을 경우 사용할 서술자를 명시

SQL

기존 ESQL 프로그램과의 호환성을 위한 키워드로 특별한 의미는 없음

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타 입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

  • 예제

다음은 EXECUTE DESCRIPTOR를 사용하는 예입니다.

EXECUTE ... END-EXEC

EXECUTE ... END-EXEC는 PL/SQL 문장을 실행할 때 사용하는 문장입니다.

EXECUTE ... END-EXEC의 세부 내용은 다음과 같습니다.

  • 문법

  • 구성요소

- execute_psm_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

pl_sql_block

사용자가 작성한 PL/SQL 블록을 사용

  • 예제

다음은 EXECUTE ... END-EXEC를 사용하는 예입니다.

EXECUTE IMMEDIATE

EXECUTE IMMEDIATE는 Dynamic SQL 문장을 준비하지 않고 바로 실행할 때 사용하는 문장입니다. 이 문장을 통해 실행할 SQL 문장은 입력 변수가 포함되지 않아야 합니다.

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

  • 문법

  • 구성요소

구성요소
설명

:host_variable

실행할 Dynamic SQL 문장을 호스트 변수를 사용해 명시

string literal

실행할 문장을 문자열 리터럴을 사용해 명시

'literal'

실행할 문장을 문자열을 사용해 명시

  • 예제

다음은 EXECUTE IMMEDIATE를 사용하는 예입니다.

FETCH

FETCH는 커서가 현재 가리키고 있는 로우의 데이터를 읽어 올 때 사용하는 문장입니다. 이 문장을 사용할 때 출력 변수로 배열 변수를 사용할 수 있습니다. 배열 변수를 사용할 경우 여러 개의 로우 데이터를 동시에 읽어 올 수 있습니다.

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

  • 문법

  • 구성요소

- fetch_statement

구성요소
설명

for_clause

  • 입력 배열 변수를 사용할 때 for_clause를 사용해 동시에 읽을 로우의 개수를 지정할 수 있음

  • for_clause가 포함되어 있지 않거나, for_clause에 지정된 로우의 개수가 입력 배열 변수의 크기보다 크면, 배열 변수의 크기만큼 로우를 읽음

  • 자세한 내용은 “FOR 절”을 참고

fetch_type_clause

스크롤 커서일 경우 스크롤 타입을 명시

cursor_name

커서의 이름을 명시합니다. 사용될 커서는 열려있어야 함

fetch_target

결과 값을 저장할 호스트 변수를 명시

USING DESCRIPTOR

서술자의 이름을 명시할 경우 서술자의 이름 앞에 붙이는 키워드

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “8.3.3. DESCRIPTOR 이름”을 참고

- fetch_type_clause

구성요소
설명

NEXT

  • 현재 커서가 가리키고 있는 로우의 다음 로우에 액세스

  • PRIOR 옵션과 반대 (생략 가능)

PRIOR

  • 현재 커서가 가리키고 있는 로우의 이전 로우에 액세스

  • NEXT 옵션과 반대

FIRST

  • 맨 처음에 위치한 로우에 액세스

  • LAST 옵션과 반대

LAST

  • 맨 마지막에 위치한 로우에 액세스

  • FIRST 옵션과 반대

CURRENT

현재 로우에 액세스 함

ABSOLUTE position_clause

전체 로우 중에서 position_clause번째 로우에 액세스

RELATIVE position_clause

  • 현재 커서가 가리키고 있는 로우의 다음 position_clause번째에 위치한 로우에 액세스

  • position_clause의 값이 음수라면 커서가 현재 위치에서 앞으로 이동

  • 예를 들어 현재 커서가 8번째 로우를 가리키고 있는데, 'FETCH RELATIVE -3'을 실행한다면 커서는 5번째 로우를 가리키게 됨

- fetch_target

구성요소
설명

identifier

출력 변수를 정의한 식별자

:host_variable

  • 출력 변수를 명시

  • 출력 변수의 개수는 하나 이상이고, 준비된 문장 의 결과로 출력될 SELECT 리스트의 컬럼 개수와 동일해야 함

indicator

지시자 변수를 명시할 때 사용

  • 예제

다음은 FETCH를 사용하는 예입니다.

FETCH DESCRIPTOR

FETCH DESCRIPTOR는 커서가 현재 가리키고 있는 로우 데이터를 읽어 올 때 사용하는 문장입니다.

FETCH와 거의 동일하게 동작합니다. 단, 이 문장은 ANSI 타입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

구성요소
설명

for_clause

  • 입력 배열 변수를 사용할 때 for_clause를 사용해 동시에 읽을 로우의 개수를 지정할 수 있음

  • for_clause가 포함되어 있지 않거나, for_clause에 지정된 로우의 개수 가 입력 배열 변수의 크기보다 크면, 배열 변수의 크기만큼 로우를 읽음

  • 자세한 내용은 “FOR 절”을 참고

fetch_type_clause

FETCH의 fetch_type_clause와 동일

cursor_name

커서의 이름을 명시합니다. 사용될 커서는 열려있는 커서이어야 함

SQL

기존 ESQL 프로그램과의 호환성을 위한 키워드로 특별한 의미는 없음

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

  • 예제

다음은 FETCH DESCRIPTOR를 사용하는 예입니다.

GET DESCRIPTOR

GET DESCRIPTOR는 지정한 서술자에서 원하는 정보를 가져올 때 사용하는 문장입니다. 단, 이 문장은 ANSI 타입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

– get_descriptor_statement

구성요소
설명

for_clause

  • 음입력 배열 변수를 사용할 때 for_clause를 사용해 동시에 읽을 로우의 개수를 지정할 수 있음

  • for_clause가 포함되어 있지 않거나, for_clause에 지정된 로우의 개수가 입력 배열 변수의 크기보다 크면, 배열 변수의 크기만큼 로우를 읽음

  • 자세한 내용은 “FOR 절”을 참고

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장 할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

VALUE value

정보를 가져올 호스트 변수의 순서를 지정

get_item_clause

가져올 정보의 항목과 정보를 저장할 호스트 변수를 명시

count

사용된 호스트 변수의 개수를 알고자 할 경우 그 개수를 저장할 호스 트 변수를 명시

- value

구성요소
설명

:host_variable

값이 들어 있는 호스트 변수를 사용할 때 명시

integer

값을 직접 정수로 입력할 때 사용

- get_item_clause

구성요소
설명

:host_variable

해당 항목을 가져올 호스트 변수를 명시

item_name

값을 가져올 구체적인 항목을 명시

- item_name

구성요소
설명

TYPE

데이터의 타입을 가져오고자 할 때 사용

LENGTH

데이터의 최대 길이를 가져오고자 할 때 사용

INDICATOR

데이터 연관된 지시자 값을 가져오고자 할 때 사용

DATA

데이터 값을 가져오고자 할 때 사용

CHARACTER_SET_NAME

데이터가 저장된 컬럼의 문자 세트를 가져오고자 할 때 사용

OCTET_LENGTH

데이터 길이를 Byte 단위로 환산해 가져오고자 할 때 사용

RETURNED_LENGTH

FETCH를 할 때 실제로 받아올 데이터 길이를 가져오고자 할 때 사용

RETURNED_OCTET_LENGTH

FETCH를 할 때 실제로 받아올 데이터 길이를 Byte 단위로 환산해 가져오고자 할 때 사용

PRECISION

받아올 데이터의 정밀도를 가져오고자 할 때 사용

SCALE

받아올 데이터의 스케일을 가져오고자 할 때 사용

NULLABLE

해당 컬럼의 데이터가 NULL이 될 수 있는지 여부를 알고자 할 때 사용

  • 이 값이 1이면, 해당 컬럼은 NULL값을 가질 수 있음

  • 이 값이 0이면, 해당 컬럼은 NULL값을 가질 수 없는 키이거나 NOT NULL 제약조건을 가지고 있는 컬럼

NAME

해당 컬럼의 이름을 가져오고자 할 때 사용

  • 예제

다음은 GET DESCRIPTOR를 사용하는 예입니다.

INSERT

INSERT는 테이블 또는 뷰에 로우를 삽입할 때 사용하는 문장입니다. 전체 컬럼 또는 일부 컬럼에 데이터를 삽입할 수 있습니다. INSERT를 사용할 때, 입력 변수로 배열 변수를 사용할 수도 있으며, 지시자 변수를 함께 사용할 수 있습니다. 또한 입력할 데이터의 값을 사용자가 직접 지정할 수도 있고, 부질의를 통하여 지정할 수 도 있습니다. 부질의를 이용하는 경우 부질의의 결과 로우 모두가 테이블이나 뷰에 삽입됩니다.

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

  • 문법 INSERT의 문법에 대한 자세한 내용은 "Tibero SQL 참조 안내서"를 참고합니다.

  • 특권 INSERT를 사용하려면, INSERT의 대상 테이블 또는 뷰에 대하여 INSERT 객체 특권을 갖거나 INSERT ANY TABLE 시스템 특권을 갖고 있어야 합니다.

  • 구성요소

구성요소
설명

FOR

  • 입력 배열 변수와 함께 사용될 경우 FOR 절을 이용하여 삽입할 데이터의 개수를 지정할 수 있음

  • FOR 절이 포함되어 있지 않거나 FOR 절에서 지정한 크기가 입력 배열 변수의 크기보다 크면, 전체 배열 변수에 저장된 데이터가 테이블에 삽입

  • 예제

다음은 INSERT를 사용하는 예입니다.

위의 예에서 알 수 있듯이 INSERT 문장은 EXEC SQL로 시작합니다는 것을 제외하면, 일반적인 SQL 문장의 문법과 크게 다르지 않습니다.

LOB CLOSE

LOB CLOSE는 OPEN 된 LOB 사용이 끝난 후 닫아주기 위해 사용하는 문장입니다. 이미 닫힌 LOB에 대해 또 다시 닫으려 할 경우 에러가 발생하고, 또한 사용자에 의해 닫히기 전에 COMMIT 이 발생할 경우에도 에러가 발생합니다.

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

  • 문법

  • 구성요소

- lob_close_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

lob_src

대상이 되는 대용량 객체형의 데이터의 LOB 지시자 변수

- lob_src

구성요소
설명

:host_variable

사용할 LOB 지시자 변수를 명시

  • 예제

다음은 LOB CLOSE를 사용하는 예입니다.

LOB CREATE TEMPORARY

LOB CREATE TEMPORARY는 temporary LOB을 생성하기 위해 사용하는 문장입니다.

LOB CREATE TEMPORARY의 세부 내용은 다음과 같습니다.

  • 문법

  • 구성요소

- lob_create_temp_statement

구성요소소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

lob_src

대상이 되는 대용량 객체형 데이터의 LOB 지시자 변수

- lob_src

구성요소
설명

:host_variable

사용할 LOB 지시자 변수를 명시

  • 예제

다음은 LOB CREATE TEMPORARY를 사용하는 예입니다.

LOB DESCRIBE

LOB DESCRIBE는 대용량 객체형의 데이터 타입의 속성을 받아올 때 사용하는 문장입니다. 이 문장은 LOB READ를 실행하기 전 버퍼를 마련하기 위해서 대용량 객체형의 데이터의 길이를 알아내는 등의 용도로 사용합니다.

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

  • 문법

  • 구성요소

- lob_describe_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

lob_src

속성을 받아올 대상이 되는 대용량 객체형의 데이터의 LOB 지시자 변수

lob_attribute

가져올 대용량 객체형의 데이터 타입의 속성을 지정

fetch_target

대용량 객체형의 데이터 타입의 속성이 저장될 변수

- lob_src

구성요소
설명

::host_variable

사용할 LOB 지시자 변수를 명시

- lob_attribute

구성요소
설명

LENGTH

LOB의 길이를 알고자 할 때 사용

– fetch_target

구성요소
설명

identifier

길이 값을 받아올 호스트 변수를 콜론(:) 없이 사용할 수 있음

:host_variable

길이 값을 받아올 호스트 변수를 명시

indicator

지시자 변수를 명시할 때 사용

  • 예제

다음은 LOB DESCRIBE를 사용하는 예입니다.

LOB FREE TEMPORARY

LOB FREE TEMPORARY는 생성된 temporary LOB에 할당된 메모리를 해제하기 위해 사용하는 문장입니다.

LOB FREE TEMPORARY의 세부 내용은 다음과 같습니다.

  • 문법

  • 구성요소

  • lob_free_temp_statement

구성요소
설명

at_clause

문장을 실행할 데이터베이스를 명시

128 Tibero tbESQL/C 안내서

구성요소
설명

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “8.3.1. AT 절”을 참고

lob_src

대상이 되는 대용량 객체형 데이터의 LOB 지시자 변수

– lob_src

구성요소
설명

:host_variable

사용할 LOB 지시자 변수를 명시

  • 예제

다음은 LOB FREE TEMPORARY를 사용하는 예입니다.

LOB OPEN

LOB OPEN은 LOB이나 BFILE을 열기 위해 사용하는 문장입니다. LOB OPEN 문장 이후에 READ ONLY를 통해 읽기 모드를, WRITE ONLY를 통해 쓰기 모드를 사용할 수 있습니다. 지정하지 않으면 기본값으로 2가지 모드를 모두 사용할 수 있습니다.

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

  • 문법

  • 구성요소

- lob_open_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

lob_src

속성을 받아올 대상이 되는 대용량 객체형의 데이터의 LOB 지시자 변수

– lob_src

구성요소
설명

::host_variable

사용할 LOB 지시자 변수를 명시

  • 예제

다음은 LOB OPEN를 사용하는 예입니다.

LOB READ

LOB READ는 LOB 지시자가 가리키고 있는 위치의 대용량 객체형의 데이터의 내용을 읽어 올 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

- lob_read_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

lob_amount

  • 읽어올 대용량 객체형의 데이터의 길이를 명시

  • 데이터를 읽어 온 후에는 실제로 읽어 온 길이가 기록됨(0~2GB)

lob_src

속성을 받아올 대상이 되는 대용량 객체형의 데이터의 LOB 지시자 변수

lob_offset

대용량 객체형의 데이터를 읽기 시작할 위치를 명시

lob_buffer

  • 대용량 객체형의 데이터를 읽어 올 때 사용할 버퍼의 이름을 명시

  • 버퍼로 사용될 메모리는 미리 할당되어 있어야 함

lob_buflen

  • 대용량 객체형의 데이터를 읽어 올 버퍼의 길이를 명시

  • 이곳에 명시된 길이 만큼만 읽음(0~2GB)

- lob_amount

구성요소
설명

:host_variable

대용량 객체형의 데이터의 길이를 값으로 갖는 호스트 변수를 명시

- lob_offset

구성요소
설명

:host_variable

대용량 객체형의 데이터를 읽기 시작할 위치를 값으로 갖는 호스트 변수를 명시

- lob_buffer

구성요소
설명

:host_variable

대용량 객체형의 데이터를 읽어 올 때 사용할 버퍼의 이름을 값으로 갖는 호스트 변수를 명시

– lob_buflen

구성요소
설명

:host_variable

대용량 객체형의 데이터를 읽어 올 때 사용할 버퍼의 길이를 값으로 갖는 호스트 변수를 명시

  • 예제

다음은 LOB READ를 사용하는 예입니다.

LOB WRITE

LOB WRITE는 LOB 지시자가 가리키는 위치에 명시된 해당 내용에 쓰기를 실행할 때 사용하는 문장입니다.

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

  • 문법

  • 구성요소

– lob_write_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “8.3.1. AT 절”을 참고

APPEND

  • 쓰고자 하는 내용이 이미 있는 LOB 데이터의 가장 마지막에 더해짐

  • 이 경우 에 별도의 offset이 입력될 경우 에러가 발생

FIRST

대용량 객체형 데이터를 여러 번으로 나누어서 쓸 경우 맨 처음에 해당되는 조각 을 쓰려고 할 때 명시

NEXT

대용량 객체형 데이터를 여러 번으로 나누어서 쓸 경우 쓰기 시작한 LOB에 계속 해서 쓰려고 할 때 명시

LAST

대용량 객체형 데이터를 여러 번으로 나누어서 쓸 경우 마지막으로 쓸 내용일 경우 명시

ONE

  • 입력 내용을 나누어 쓰지 않고 버퍼에 있는 내용이 쓰려고 하는 전체 내용일 경우

  • 쓰기 옵션 중 어떤 내용도 지정하지 않을 경우 이 값이 기본값

lob_amount

  • 대용량 객체형의 데이터의 길이를 명시

  • 데이터 쓰기가 실행된 후에는, 실제로 쓰기가 실행된 데이터의 길이가 기록됨(0~2GB)

lob_buffer

쓰기가 실행될 해당 내용이 들어 있는 버퍼를 명시

lob_buflen

쓰기가 실행될 해당 내용이 들어 있는 버퍼의 길이를 명시 (0~2GB)

lob_dest

쓰기가 실행될 LOB 지시자를 명시

lob_offset

쓰기가 실행될 시작 위치를 명시

– lob_dest

구성요소
설명

:host_variable

LOB 지시자가 저장된 변수를 명시

  • 예제

다음은 LOB WRITE를 사용하는 예입니다.

OPEN

OPEN은 커서를 열 때 사용하는 문장입니다. 이 문장을 사용해 열려고 하는 커서는 이미 선언되어 있어야 하며, SELECT 문장과 연관되어 있어야 합니다. 커서의 선언은 DECLARE CURSOR를 통하여 실행됩니다.

커서를 여는 것과 동시에 연관된 SELECT 문장이 실행되며, 커서는 질의 문장이 반환한 결과의 제일 처음에 위치한 로우를 가리킵니다. 커서는 SELECT 문장과 연관되기도 하지만 Dynamic SQL 문장과 연관되기도 합니다.

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

  • 문법

  • 구성요소

- open_statement

구성요소
설명

for_clause

  • 실행 반복 횟수를 지정

  • 자세한 내용은 “FOR 절”을 참고

cursor_name

열려고 하는 커서의 이름을 명시

normal_using_clause

일반적으로 사용하는 OPEN 문장의 형태

ansi_using_and_into_clause

  • 이미 정의된 서술자를 이용

  • ANSI 타입의 Dynamic SQL 문장에만 사용됨

- normal_using_clause

구성요소
설명

USING

  • 커서가 Dynamic SQL 문장과 연관된 경우 USING 절을 이용하여 SE LECT 문장의 입력 변수에 할당할 값을 지정할 수 있음

  • 입력 변수로 배열 변수를 사용할 수도 있으며, 서술자 변수를 함께 사용할 수도 있음

using_param_clause

입력 호스트 변수의 정보가 필요할 경우에 사용

USING DESCRIPTOR

입력 호스트 변수의 정보를 가져왔던 서술자를 사용할 경우 명시

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

- ansi_using_and_into_clause

구성요소
설명

USING

입력 호스트 변수의 정보가 저장된 서술자 변수가 필요할 경우에 사용

INTO

출력 호스트 변수의 정보가 저장된 서술자 변수가 필요할 경우에 사용

SQL

기존 ESQL 프로그램과의 호환성을 위한 키워드로 특별한 의미는 없음

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “8.3.3. DESCRIPTOR 이름”을 참고

  • 예제

다음은 OPEN을 사용하는 예입니다.

PREPARE

PREPARE는 Dynamic SQL 문장을 준비할 때 사용하는 문장입니다. 준비된 SQL 문장은 문장의 이름을 통 해 서로 식별되며, 이후에 DECLARE CURSOR 또는 EXECUTE에서 참조됩니다.

SQL 문장을 준비합니다는 것은 단지 문장을 파싱(Parsing)합니다는 의미일 뿐이며, 문장이 실행된다는 의미는 아닙니다. 문장이 실제로 실행되는 것은 EXECUTE 문장을 통해서입니다. SQL 문장에는 하나 이상의 입력 변수가 포함될 수 있는데, 입력 변수가 포함될 때 입력 변수의 이름은 별다른 의미를 갖지 않으며, tbESQL 프로그램에 미리 선언되어 있을 필요도 없습니다.

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

  • 문법

  • 구성요소

구성요소
설명

statement_name

준비를 실행할 SQL 문장의 이름을 명시

FROM

  • FROM 절 뒤에는 준비할 Dynamic SQL 문장이 옴

  • SQL 문장 자체가 올 수 도 있으며, SQL 문장의 문자열을 저장한 호스트 변수가 올 수도 있음

  • SELECT 문장이라면 문장 자체가 올 수 있음

:host_variable

Dynamic SQL 문장을 저장한 호스트 변수를 명시

string literal

Dynamic SQL 문장을 나타내는 문자열을 명시

select_statement

SELECT 문장 자체를 명시

execute_dml_statement

실행할 INSERT, UPDATE, DELETE 문장 자체를 명시

  • 예제

다음은 PREPARE를 사용하는 예입니다.

ROLLBACK

ROLLBACK은 현재 진행 중인 트랜잭션을 롤백하고 갱신된 모든 내용을 취소할 때 사용하는 문장입니다.

롤백을 실행하는 것과 동시에 데이터베이스와의 접속을 끊을 수도 있으며, 미리 설정된 저장점까지 부분 롤백(Partial Rollback)을 수행할 수도 있습니다.

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

  • 문법

  • 구성요소

- rollback_statement

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

WORK

기존 ESQL 프로그램과의 호환성을 위한 키워드로 특별한 의미는 없음

RELEASE

모든 리소스를 반환하고 데이터베이스와의 접속을 종료

TO

특정 저장점까지 부분 롤백을 수행하고자 할 때 명시

SAVEPOINT

  • 단지 문법 호환을 위해 지원하는 부분

  • 이 부분의 명시여부는 문장 실행에 어떤 영향도 없음

savepoint_name

  • 부분 롤백을 수행할 저장점의 이름을 명시

  • 저장점은 롤백을 실행하기 전에 프로그램 내에 이미 설정되어 있어야 함

- savepoint_name

구성요소
설명

identifier

저장점의 이름을 정의한 식별자

  • 예제

다음은 ROLLBACK을 사용하는 예입니다.

SAVEPOINT

SAVEPOINT는 저장점을 설정할 때 사용하는 문장입니다. 설정된 저장점은 특정 지점까지 부분 롤백을 하고자 할 때 사용됩니다.

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

  • 문법

  • 구성요소

구성요소
설명

at_clause

  • 문장을 실행할 데이터베이스를 명시

  • 데이터베이스의 이름을 직접 명시할 수도 있고, 데이터베이스의 이름이 저장 된 호스트 변수를 명시할 수도 있음

  • 자세한 내용은 “AT 절”을 참고

savepoint_name

설정할 저장점에 부여할 이름을 명시

  • 예제

다음은 SAVEPOINT를 사용하는 예입니다.

SELECT

SELECT는 테이블 또는 뷰에 대해 질의를 수행하고, 질의를 수행한 결과 로우의 각 데이터를 출력 변수에 저장할 때 사용하는 문장입니다.

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

  • 문법 SELECT의 문법에 대한 자세한 내용은 "Tibero SQL 참조 안내서"를 참고합니다.

  • 특권 SELECT 문장을 사용해 질의를 수행하기 위해서는 대상 테이블에 대한 SELECT 객체 특권이 있거나 SELECT ANY TABLE 시스템 권한을 갖고 있어야 합니다.

  • 구성요소

구성요소
설명

INTO

  • 질의 결과의 컬럼의 개수는 INTO 절에 포함된 출력 변수의 개수와 같아야 함

  • INTO 절에는 지시자 변수와 함께 출력 배열 변수를 사용할 수 있음

  • 출력 변수는 모두 스칼라 변수이거나 또는 모두 배열 변수이어야 하며, 이 두 가지가 서로 섞여 있을 수 없음

WHERE

  • WHERE 절에는 입력 변수를 포함할 수 있음

  • 이때 지시자 변수와 함께 사용될 수 있음

  • SELECT 문장 내에서는 입력 배열 변수를 사용할 수 없음

HAVING

  • HAVING 절에는 입력 변수를 포함할 수 있음

  • 지시자 변수 및 입력 배열 변수와 관련된 내용은 WHERE 절과 동일

  • 예제

다음은 SELECT를 사용하는 예입니다.

위의 예에서 알 수 있듯이 SELECT 문장은 INTO 절을 제외하면, 일반적인 SQL 문장의 문법과 크게 다르지 않습니다.

SET DESCRIPTOR

SET DESCRIPTOR는 사용자가 입력해야 할 정보를 지정한 서술자에 기록하는 문장입니다. 사용자는 이 문 장을 통해 데이터 값이나 데이터 값의 길이 등을 지정할 수 있습니다. 단, 이 문장은 ANSI 타입의 Dynamic SQL 문장에만 사용할 수 있습니다.

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

  • 문법

  • 구성요소

- set_descriptor_statement

구성요소
설명

for_clause

  • 반복 횟수를 지정

  • 자세한 내용은 “FOR 절”을 참고

descriptor_name

  • 서술자의 이름이 저장된 호스트 변수 또는 문자열을 명시

  • 호스트 변수는 CHAR* 또는 CHAR ARRAY 타입 등 문자열을 저장할 수 있는 타입으로 이미 선언되어 있어야 함

  • 서술자는 ALLOCATE DESCRIPTOR를 통해 이미 할당되어 있어야 함

  • 자세한 내용은 “DESCRIPTOR 이름”을 참고

VALUE value

몇 번째 출력 호스트 변수인지 명시

set_item_clause

출력 호스트 변수의 정보를 입력하기 위해 서술

COUNT

출력 호스트 변수의 개수를 받아오기 위해 서술

count

출력 호스트 변수의 개수를 받아올 호스트 변수를 명시

- set_item_clause

구성요소
설명

REF

  • INDICATOR, DATA, RETURNED_LENGTH 항목을 지정할 때만 사용할 수 있는 키워드로, 속도와 편리성을 위해 사용

  • 호스트 변수의 값이 아닌 호스트 변수 자체를 지정하며, GET DESCRIP TOR 문장을 따로 실행하지 않아도 FETCH한 후 지정된 항목의 값이 지정된 호스트 변수에 들어감

item_name

GET DESCRIPTOR와 동일

host_var

출력 호스트 변수의 각 정보를 받아올 호스트 변수를 지정

  • 예제

다음은 SET DESCRIPTOR를 사용하는 예입니다.

TYPE

TYPE은 사용자가 지정한 데이터 타입을 외부 데이터 타입으로 지정할 때 사용하는 문장입니다. TYPE 문장을 통해서 호스트 변수의 타입을 사용자가 지정한 타입으로 변경하여 사용할 수 있습니다. TYPE 문장을 사용하기 위해선 사용자가 지정한 데이터 타입이 TYPE 문장 전에 반드시 선언되어 있어야 합니다.

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

  • 문법

  • 구성요소

- type_statement

구성요소
설명

type_name

사용자가 지정한 데이터 타입의 이름을 명시

ext_datatype

사용자가 지정할 데이터 타입을 명시

length

데이터의 크기를 명시

reference

포인터 타입으로 사용할 것인지 지정

- type_name

구성요소
설명

identifier

  • 외부 데이터 타입을 지정하게 될 데이터 타입을 명시

  • 반드시 TYPE 문장 이전에 사용자가 지정한 데이터 타입 이름을 사용해야 함

- ext_datatype

구성요소
설명

STRING

STRING 타입을 지정

VARRAW

VARRAW 타입을 지정

LONG VARRAW

LONG VARRAW 타입을 지정

VARCHAR

VARCHAR 타입을 지정

VARCHAR2

VARCHAR2 타입을 지정

RAW

RAW 타입을 지정

LONG VARCHAR

LONG VARCHAR 타입을 지정

LONG RAW

LONG RAW 타입을 지정

CHARZ

CHARZ 타입을 지정

  • 예제

다음은 타입을 사용하는 예입니다.

UPDATE

UPDATE는 테이블 또는 뷰의 컬럼 값을 갱신할 때 사용하는 문장입니다. 일부 컬럼 또는 전체 컬럼에 대해 갱신을 수행할 수 있습니다. 문장을 사용할 때 입력 변수로 배열 변수를 사용할 수도 있으며, 지시자 변수를 함께 사용할 수 있습니다.

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

  • 문법 UPDATE의 문법에 대한 자세한 내용은 "Tibero SQL 참조 안내서"를 참고합니다.

  • 특권 UPDATE를 사용해 갱신을 수행하려면, 대상 테이블 또는 뷰에 대한 UPDATE 객체 특권을 갖거나 UP DATE ANY TABLE 시스템 특권을 가지고 있어야 합니다.

  • 구성요소

구성요소
설명

SET

SET 절에 입력 배열 변수가 포함되어 있다면, WHERE 절에도 반드시 같은 크기의 입력 배열 변수가 포함되어야 함

WHERE

  • WHERE 절에 입력 배열 변수가 포함되어 있다면, SET 절에도 반드시 같은 크기의 입력 배열 변수가 포함되어야 함

  • UPDATE 문장을 커서와 함께 사용할 수도 있음

  • 현재 커서가 가리키는 로우의 컬럼 값을 갱신하려면 WHERE 절에 CURRENT OF와 커서 이름을 포함시킴

  • 커서를 사용하려면 커서는 이미 열려있는 상태이어야 함

FOR

  • 입력 배열 변수를 사용할 때 FOR 절을 이용하여 삽입할 데이터의 개수를 지정할 수 있음

  • FOR 절이 포함되어 있지 않거나 FOR 절에서 지정한 개수가 입력 배열 변수의 크기보다 크다면, 전체 배열 변수에 저장된 데이터에 대하여 갱신을 수행

  • 예제

다음은 UPDATE를 사용하는 예입니다.

위의 예에서 알 수 있듯이 UPDATE 문장은 EXEC SQL로 시작합니다는 것을 제외하면, 일반적인 SQL 문장의 문법과 크게 다르지 않습니다.

VAR

VAR는 특정 호스트 변수의 데이터 타입을 사용자가 지정한 데이터 타입으로 지정할 때 사용하는 문장입니다. 지정하고자 하는 데이터가 호스트 변수로 반드시 선언되어 있어야 합니다.

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

  • 문법

  • 구성요소

– var_statement

구성요소
설명

var_name

데이터 타입을 지정하고자 하는 호스트 변수를 명시

ext_datatype

사용자가 지정할 데이터 타입을 명시

length

데이터의 크기를 명시

- var_name

구성요소
설명

identifier

  • 데이터 타입을 지정하게 될 호스트 변수를 명시

  • 반드시 VAR 문장 이전 에 호스트 변수로 지정된 변수명을 사용해야 함

- ext_datatype

구성요소
설명

STRING

STRING 타입을 지정

VARRAW

VARRAW 타입을 지정

LONG VARRAW

LONG VARRAW 타입을 지정

VARCHAR

VARCHAR 타입을 지정

VARCHAR2

VARCHAR2 타입을 지정

RAW

RAW 타입을 지정

LONG VARCHAR

LONG VARCHAR 타입을 지정

LONG RAW

LONG RAW 타입을 지정

CHARZ

CHARZ 타입을 지정

- length

구성요소
설명

length_size

데이터 타입의 크기를 지정

  • 예제

다음은 VAR를 사용하는 예입니다.

WHENEVER

WHENEVER는 tbESQL/C 프로그램을 실행하는 도중, 예외 상황이 발생했을 경우에 대비하여 수행할 작업을 선언할 때 사용하는 문장입니다. 발생 가능한 예외 상황에는 액세스할 로우가 없는 경우와 에러 또는 경고가 발생한 경우가 있습니다.

WHENEVER 문장의 효과 범위는 WHENEVER 문장이 명시된 위치부터 다음 WHENEVER 문장이 나타날 때까지입니다. 하지만 문장이 한 번만 명시되었다면 효과 범위는 WHENEVER 문장이 명시된 위치부터 프로그램의 마지막까지입니다.

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

  • 문법

  • 구성요소

- whenever_statement_c

구성요소
설명

condition

에러나 경고 또는 결과 로우가 없는 등의 예외 상황을 명시

condition_action_c

예외 상황이 발생했을 경우 그에 따른 대처 방법을 명시

- condition

구성요소
설명

SQLERROR

에러가 발생한 경우

SQLWARNING

경고가 발생한 경우

NOT FOUND 또는

NOTFOUND

질의 결과 로우가 없거나 커서를 사용해 읽을 로우가 더 이상 없는 경우

- condition_action_c

구성요소
설명

CONTINUE

다음 라인부터 프로그램을 계속 진행

DO CONTINUE

루프 내에서 CONTINUE를 실행

DO BREAK

루프 내에서 BREAK를 실행

DO do_stmt

C 프로그래밍 언어로 작성한 에러 처리 문장을 수행

STOP

현재 트랜잭션을 롤백하고 프로그램을 정지

GOTO label

해당 label이 있는 곳으로 이동하여 프로그램을 진행

  • 예제

다음은 WHENEVER를 사용하는 예입니다.

Last updated