tbESQL/COBOL 소개
tbESQL/COBOL의 기본 개념과 tbESQL/COBOL 프로그래밍을 시작하기 전에 알아야 할 구성요소를 설명합니다.
개요
tbESQL은 ESQL(Embedded SQL: 내장 SQL)의 사용을 위해 Tibero가 제공하는 인터페이스입니다. 일반적 으로 프로그래밍 언어는 매우 복잡하고 세밀한 작업을 빠르게 수행할 수 있으며, SQL 문장은 간단한 문법 만으로 데이터베이스에 직접적인 작업을 수행할 수 있습니다.
ESQL은 이러한 프로그래밍 언어의 연산 능력과 SQL의 데이터베이스(Database)를 조작하는 능력을 결 합하기 위한 방법이며, ANSI 및 ISO 표준으로 정의되어 있습니다.
Tibero에서는 애플리케이션 개발에 사용되는 COBOL과 C에 대한 tbESQL 인터페이스를 제공합니다. COBOL 프로그래밍 언어를 위한 ESQL 인터페이스를 tbESQL/COBOL이라고 부르며, C 프로그래밍 언어에 대한 인터페이스를 tbESQL/C라고 부릅니다.
참고 tbESQL/C에 대한 내용은 "Tibero tbESQL/C 안내서"를 참고합니다.
구성요소
tbESQL/COBOL 문장
tbESQL/COBOL 프로그램에는 COBOL 프로그래밍 언어의 소스 코드와 tbESQL/COBOL 문장이 혼합되 어 있습니다. tbESQL/COBOL 프로그램 내에서 SQL 문장의 질의(Query) 등 데이터베이스 처리와 관련된 문 장을 tbESQL/COBOL 문장(tbESQL/COBOL Statement)이라고 합니다.
tbESQL/COBOL 문장은 일반 SQL 문장과 비슷하지만 다음과 같은 점에서 차이가 난다.
항상 EXEC SQL로 시작하고 **END EXEC.**로 종료합니다.
필요한 경우에 입력 변수와 출력 변수를 포함합니다.
일반 SQL 문장에는 없는 새로운 절을 포함할 수 있습니다. 예를 들어 SELECT 문장은 INTO 절을 포함할 수 있습니다.
다음은 tbESQL/COBOL 프로그램에서 UPDATE 문장을 작성한 예입니다.
[예 1] tbESQL/COBOL에서의 UPDATE 문장
EXEC SQL UPDATE EMP SET SALARY = SALARY * 1.05
WHERE EMPNO = 5
END-EXEC.위의 예에서는 tbESQL/COBOL 문장임을 나타내는 EXEC SQL로 시작되고 **END-EXEC.**로 끝난다는 점 에서 일반 SQL 문장과 차이가 난다는 것을 알 수 있습니다.
참고
자세한 내용은 “ tbESQL/COBOL 문장”을 참고합니다.
프로그램 변수
tbESQL/COBOL 프로그램에서 가장 중요한 작업 중에 하나는 프로그램과 데이터베이스 간에 데이터를 전달하는 것입니다. 이러한 작업은 주로 프로그램 변수를 이용하여 수행합니다. 즉, 프로그램 변수를 이용하여 질의를 하거나 변수의 값을 데이터베이스에 저장할 수 있고, 데이터베이스의 컬럼 값을 프로그램 변수에 저장할 수도 있습니다. 이러한 작업을 하기 위해서는 Tibero의 데이터 타입과 tbESQL/COBOL 프로그램의 데 이터 타입 간의 연관성이 필요합니다. 예를 들어 다음의 Tibero의 데이터 타입과 tbESQL/COBOL 프로그램 의 데이터 타입은 서로 대응됩니다.
NUMBER(p, s)
PIC S9(n)
NUMBER 타입에서 p는 정밀도(Precision), s는 스케일(Scale)을 의미합니다.
참고
Tibero의 데이터 타입과 tbESQL/COBOL 프로그램의 데이터 타입 간의 대응에 대해서는 “데이터 타입 대응”을 참고합니다.
프로그램 변수의 선언
tbESQL/COBOL 프로그램에서의 변수는 COBOL 프로그램의 변수와 거의 동일하게 선언되고 사용됩니다. 데이터베이스 작업과 관련되지 않는 변수는 COBOL 프로그램에서 사용되는 것과 같이 제약 없이 사용할 수 있습니다.
다음은 tbESQL/COBOL에서 프로그램 변수를 선언한 예입니다.
[예 2] tbESQL/COBOL에서의 프로그램 변수의 선언
위의 예에서 VARYING 키워드로 선언한 VARCHAR 타입은 tbESQL/COBOL 프로그램 내에서만 사용할 수 있는 타입이며, 프리컴파일 과정을 거쳐 COBOL 프로그래밍 언어의 데이터 타입으로 변환됩니다.
입/출력 변수
데이터베이스 작업과 관련된 변수는 다음과 같이 두 가지로 구분됩니다.
입력 변수
tbESQL/COBOL 문장을 통해 컬럼의 값을 삽입, 갱신, 삭제할 때 데이터의 값을 설정하기 위한 변수입니다.
입력 변수는 다음과 같은 특징이 있습니다.
입력 변수를 사용할 때는 반드시 변수 앞에 콜론**(:)**을 붙여야 합니다.
입력 변수는 SELECT, INSERT, UPDATE, DELETE 문장과 WHERE 절과 SET 절 등의 컬럼 값의 위 치에 사용될 수 있습니다.
입력 변수는 테이블 이름이나 컬럼 이름의 위치에는 사용 될 수 없습니다.
출력 변수
tbESQL/COBOL 문장의 질의 수행 결과로 반환된 값을 저장하기 위한 변수입니다. 출력 변수는 다음과 같은 특징이 있습니다.
입력 변수와 마찬가지로 변수 앞에 반드시 콜론**(:)**을 붙여야 합니다.
출력 변수는 SELECT 문장의 INTO 절에 사용될 수 있습니다.
INTO 절에는 출력 변수와 함께 INDICATOR 키워드와 지시자 변수가 올 수 있습니다.
다음은 WHERE 절에 사용된 입력 변수 EMPNO와 INTO 절에 사용된 출력 변수 ENAME, SALARY, ADDR를 사용한 예입니다.
[예 3] 입/출력 변수의 사용
위의 문장을 실행하기 전에 EMPNO 값을 설정하는 코드가 와야 하며, 또한 문장이 실행된 후에는 반환된 ENAME, SALARY, ADDR 컬럼 값에 대한 적절한 작업이 진행되어야 합니다.
구조체 및 배열 변수
구조체와 배열 변수는 동시에 여러 개의 입/출력 변수를 처리하는 자료 구조입니다.
구조체
tbESQL/COBOL 프로그램에서는 보통 동시에 여러 개의 입력 변수나 출력 변수가 사용됩니다. [예 3]의 경 우에도 SELECT 문장의 INTO 절에서 세 개의 출력 변수(ENAME, SALARY, ADDR)가 사용되었습니다. 또한 INSERT 문장을 사용할 경우에는 여러 개의 입력 변수가 사용될 수 있습니다.
이렇게 여러 개의 입력 변수나 출력 변수가 사용될 경우 tbESQL/COBOL 프로그램에서도 COBOL 프로그래밍 언어에서처럼 여러 개의 변수를 묶어 하나의 구조체로 사용할 수 있습니다.
참고
입/출력 구조체 변수에 대한 자세한 내용은 “구조체”를 참고합니다.
배열 변수
SELECT 문장을 실행한 결과의 로우 개수는 대개의 경우 하나 이상이며, INSERT 문장을 실행할 때에도 보통 하나 이상의 로우를 삽입하게 됩니다. 이때 각각의 로우에 대해 개별적으로 SQL 문장을 여러 번 실행 하지 않고, 출력 변수나 입력 변수를 배열로 선언하여 SQL 문장을 한 번만 실행할 수도 있습니다.
출력 변수나 입력 변수를 배열로 선언한 경우 각각을 출력 배열 변수, 입력 배열 변수라고 부릅니다. 또한 이 두 가지 변수를 한꺼번에 지칭할 때는 입/출력 배열 변수라고 합니다.
출력 배열 변수를 이용하여 SELECT 문장을 실행하는 경우 각 결과 로우는 결과 로우의 개수와 동일한 크 기를 갖는 출력 배열 변수에 저장됩니다.
tbESQL/COBOL 프로그램에서는 하나 이상의 결과 로우가 반환되는 SELECT 문장에 출력 배열 변수나 커서를 사용하지 않으면 에러를 반환합니다. 구조체도 배열 변수로 선언하여 사용할 수 있으며, 이를 구조체 배열 변수라고 부릅니다.
참고
입/출력 배열 변수와 구조체 배열 변수에 대한 자세한 내용은 “배열 변수”를 참고합니다.
커서
커서는 SELECT 문장을 실행한 결과로 반환된 다수의 로우 각각에 차례대로 액세스하는 데이터 구조이 다.
SELECT 문장을 실행한 결과로 반환되는 로우의 개수는 기본 키에 대한 질의가 아니라면 대부분 하나 이 상입니다. 또한 반환되는 로우의 개수를 미리 알 수 없는 경우가 많기 때문에 SELECT 문장의 INTO 절에 변 수를 하나만 명시해서는 모든 로우의 데이터를 저장할 수 없습니다.
이러한 경우에 프로그램을 보다 간편하고 편리하게 작성하기 위해 앞 절에서 설명한 배열 변수를 사용할 수도 있지만 커서를 사용할 수도 있습니다.
커서를 사용하는 방법 및 순서는 다음과 같습니다.
DECLARE CURSOR를 이용하여 커서를 선언합니다.
OPEN을 실행하여 커서를 연다. 커서를 열면, 연관된 SQL 문장이 실행되고 질의의 결과가 반환됩니다.
FETCH를 실행합니다. FETCH를 실행할 때마다 하나 또는 그 이상의 결과 로우를 얻을 수 있습니다. 커서는 항상 현재 처리 중인 로우를 가리킨다.
모든 결과 로우에 대한 FETCH를 실행한 후에는 CLOSE를 실행하여 커서를 닫습니다.
참고
자세한 내용은 “커서”를 참고합니다.
프리컴파일러
tbESQL/COBOL 프로그램 내에는 COBOL 프로그래밍 언어와 tbESQL/COBOL 문장이 함께 포함되어 있 다. tbESQL/COBOL 문장은 COBOL 프로그래밍 언어의 문법을 따르지 않기 때문에, tbESQL/COBOL 프 로그램을 컴파일하기 전에 적절한 처리를 해야 합니다.
이러한 컴파일 이전의 처리 과정을 프리컴파일(Precompile)이라고 하며, 그때 사용하는 유틸리티를 프리 컴파일러(Precompiler)라고 부릅니다.
프리컴파일러는 tbESQL/COBOL 프로그램에 포함된 tbESQL/COBOL 문장을 tbESQL/COBOL 라이브러 리 함수로 호출할 수 있는 COBOL 프로그래밍 언어의 소스 코드로 변환해준다.
이러한 과정을 위해서 tbESQL/COBOL에서는 다음과 같은 함수를 정의하고 있습니다.
이 함수의 파라미터로는 SQL 문장과 입/출력 변수의 정보가 포함됩니다.
다음은 tbESQL/COBOL 프로그램의 컴파일 과정을 나타내는 그림입니다.
[그림 1] tbESQL/COBOL 프로그램 컴파일 과정

tbESQL/COBOL 프로그램의 컴파일 과정은 크게 두 가지 과정으로 나눌 수 있습니다.
프리컴파일(Precompile) tbESQL/COBOL 프로그램을 작성하여 프리컴파일 과정을 거치고 나면 COBOL 프로그래밍 언어로만 구성된 소스 코드가 생성됩니다. 생성된 소스 코드는 .cob 확장자를 가진 파일의 형태로 저장됩니다.
컴파일(Compile) 프리컴파일 과정을 거친 프로그램은 다시 컴파일 과정을 거치게 되고 최종적으로 실행 파일이 생성됩니다.
Last updated

