1. CREATE VARIABLE 문
CREATE VARIABLE 문은 한 개의 session 안에서 유효한 전역변수(global variable) 또는 session 변수를 정의한다.
session 은 데이터베이스에 접속할 때 시작되고, 접속이 해제될 때에 종료된다.
정의된 전역변수는 복합 SQL 문 블록에서 사용될 수도 있고, anchor 유형의 참조 대상이 될 수 있다.
CREATE [OR REPLACE] VARIABLE [스키마명.]전역변수 유형1
[ { DEFAULT 값1 | CONSTANT 값 1 } ]
유형1 { built-in 유형 | anchor 유형 | distinct 유형 | row 유형 | array 유형 | cursor 유형 }
값1 { NULL | 상수 | 특별레지스터 | 전역변수 | (수식) | (cursor-value-constructor) }
전역변수 명으로는 대소문자를 구분하지 않고 128 byte 까지 지정 가능하고, 식별자로 사용하기 때문에 해당 데이터베이스에서 고유한 값이어야 한다.
스키마명은 선택적으로 지정 가능하여, 명시적으로 작성하지 않으면 기본 스키마명이 적용된다.
DEFAULT 키워드 또한 선택적으로 지정 가능하고, 별도로 지정하지 않으면 NULL 이 할당된다.
CONSTANT 키워드 또한 선택적으로 지정 가능하고, 이를 사용하면 읽기 전용 변수가 된다.
ROW 유형과 ARRAY 유형에서는 DEFAULT 값으로 NULL 만 지정 가능하고, CURSOR 유형에서는 NULL 또는 (cursor-value-constructor) 만 지정 가능하다.
📌 ON REPLACE 옵션
CREATE VARIABLE 문에 ON REPLACE 옵션을 지정하게 되면 기존의 전역변수가 재생성된다.
만일 지정한 전역변수가 존재하지 않으면 새로운 전역변수가 생생된다.
기존의 전역변수가 있다면 내용을 비교하여 생성하고자 하는 내용으로 적절히 변경하여 재생성된다.
2. 전역변수의 유형과 데이터 유형
구분 | scalar 전역변수 | boolean 전역변수 | row 전역변수 | array 전역변수 | cursor 전역변수 |
built-in 유형 | 기본 유형 | BOOLEAN | - | - | CURSOR |
사용자 정의 유형 | distinct 유형 | - | row 유형 | array 유형 | cursor 유형 |
anchor 유형의 참조 대상 |
scalar 변수 테이블.컬럼 |
boolean 변수 | row 변수 ROW 테이블 ROW cursor 변수 |
array 변수 | cursor 변수 |
built-in 데이터 유형은 시스템에서 기본적으로 제공하는 데이터 유형으로 숫자, 문자, 날짜 유형이 포함된다. CURSOR, BOOLEAN 유형은 SQL PL 에서만 포함되고, SQL 에서는 지원하지 않는다.
사용자 정의 데이터 유형은 CREATE TYPE 문으로 정의한 데이터 유형으로 distict 유형, row 유형, array 유형, cursor 유형 등이 있다.
anchor 유형의 참조 대상으로는 CREATE TABLE 문으로 정의된 테이블과 컬럼, CREATE VARIABLE 문으로 정의된 전역변수가 될 수 있다.
1️⃣ scalar 전역변수 선언
CREATE VARIABLE VAR_X VARCHAR(10) @
위의 예시에서는 scalar 전역변수를 정의하기 위하여 built-in 유형의 기본 유형인 varchar 유형을 이용하여 VAR_X 라는 전역변수를 정의하였다.
CREATE VARIABLE VAR_X ANCHOR TABLE_X.VAR_Y @
위의 예시에서는 scalar 전역변수를 정의하기 위하여 전역변수 VAR_X 가 테이블 TABLE_X 의 컬럼 VAR_Y 을 참조하도록 하였다.
이때 VAR_Y 가 INT 유형이라면 VAR_X 또한 INT 유형으로 지정된다.
2️⃣ boolean 전역변수 선언
CREATE VARIABLE VAR_X BOOLEAN @
첫번째 예시는 전역변수 VAR_X 를 built-in 유형의 boolean 유형으로 지정하여 정의하였다.
CREATE VARIABLE VAR_X ANCHOR TABLE_X.VAR_Y @
두번째 예시는 전역변수 VAR_X 의 유형을 테이블 TABLE_X 의 VAR_Y 컬럼을 참조하도록 하여 정의하였다.
이때 VAR_Y 의 유형이 BOOLEAN 인 경우 VAR_X 의 유형 또한 BOOLEAN 유형이 된다.
3️⃣ row 전역변수 선언
CREATE VARIABLE VAR_X ANCHOR ROW OF TABLE_X @
TABLE_X
XNO | XNAME
INT | VARCHCAR(10)
위의 예시에서는 VAR_X 전역변수를 row 타입으로 정의하기 위하여 TABLE_X 의 유형을 참조하여 row 유형을 정의하도록 하였다.
이때 VAR_X 는 TABLE_X 유형을 갖게 된다.
CREATE TYPE VAR_X AS ROW (XNO INT, XNAME VARCHAR(10))
CREATE VARIABLE VAR_Y VAR_X @
또는 CREATE TYPE 문으로 생성된 row 유형을 이용하여 row 전역변수를 정의할 수도 있다.
지역변수 VAR_Y 을 VAR_X 로 지정하게 됨으로써 VAR_Y 또한 XNO INT, XNAME VARCHAR(10) 형태가 된다.
4️⃣ array 전역변수 선언
CREATE TYPE VAR_X AS VARCHAR(10) ARRAY [3] @
CREATE VARIABLE VAR_Y VAR_X @
array 전역변수를 사용하기 위해서 사용자 정의를 마친 VAR_X 을 VAR_Y 로 정의하였다.
이때 VAR_Y 는 요소 3개까지 담을 수 있는 배열이 되고 각 요소는 VARCHAR(10) 를 갖게 된다.
5️⃣ cursor 전역변수 선언
cursor 유형은 weakly typed cursor 유형과 strongly typed cursor 유형으로 구분하여 정의할 수 있다.
먼저 weakly typed cursor 유형으로 정의해보자.
CREATE VARIABLE VAR_X CURSOR @
weakly typed cursor 유형은 built-in 유형의 CURSOR 유형을 활용하면 된다.
전역변수 VAR_X 는 built-in 유형의 CURSOR 유형으로 지정되었다.
다음은 strongly typed cursor 유형으로 정의해보자.
CREATE TYPE VAR_X AS ANCHOR ROW OF TABLE_X CURSOR @
CREATE VARIABLE VAR_Y VAR_X @
먼저 CREATE TYPE 문을 이용하여 사용자 정의 유형을 만들어 VAR_X 유형이 TABLE_X 를 참조하여 정의하였다.
그 다음 VAR_X 유형의 전역변수 VAR_Y 를 선언하게 되면 결과 집합이 VAR_X 와 동일한 형태를 갖게 된다.
3. 전역변수 제거하기
생성한 전역변수를 제거하기 위해서는 DROP VARIABLE 문을 사용하면 된다.
DROP VARIABLE [스키마명.]전역변수명 [RESTRICT]
RESTRICT 키워드를 사용하게 되면 해당 전역변수를 참조하는 오브젝트가 있는 경우 해당 전역변수를 제거할 수 없도록 한다.
'SQL > DB2' 카테고리의 다른 글
DB2 흐름 제어 : 비교 제어 IF , CASE 문 (0) | 2022.12.19 |
---|---|
DB2 VALUES INTO 문 (0) | 2022.12.19 |
DB2 SELECT INTO 문 (0) | 2022.12.08 |
DB2 DECLARE TYPE, DECLARE, SET (0) | 2022.12.07 |
DB2 CREATE TYPE : 사용자 정의 데이터 유형 정의 (0) | 2022.12.07 |