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 문장을 요약한 목록입니다.
실행문장
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
로우를 갱신
지시어
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

