HPL/SQL - 언어 요소
HPL/SQL - 언어 요소 (Language Elements)
HPL/SQL 프로그램에서 사용할 수 있는 언어 요소들을 한눈에 정리한 문서예요. 변수 선언, 데이터 타입, 제어문, 속성(attribute) 등 Oracle PL/SQL 문법과 유사한 요소들을 다룹니다.
출처: 문서
본문
HPL/SQL의 각 언어 요소를 소개합니다.
%ROWTYPE 속성 (%ROWTYPE Attribute)
%ROWTYPE 속성은 지정된 데이터베이스 테이블과 동일한 컬럼과 데이터 타입을 갖는 레코드 변수를 선언할 수 있게 해 줍니다.
문법:
var_name [schema.]table_name%ROWTYPE
DECLARE
v orders%ROWTYPE;
BEGIN
SELECT * INTO v FROM orders LIMIT 1;
DBMS_OUTPUT.PUT_LINE('Item: ' || v.name || ' - ' || v.description);
END;
%TYPE 속성 (%TYPE Attribute)
%TYPE 속성은 지정된 참조 컬럼과 동일한 데이터 타입을 갖는 변수를 선언할 수 있게 해 줍니다.
문법:
var_name [schema.]table.column_name%TYPE
예제:
DECLARE
i orders.item%TYPE;
BEGIN
SELECT item INTO i FROM orders LIMIT 1;
DBMS_OUTPUT.PUT_LINE('Item: ' || i);
END;
할당 (Assignment)
HPL/SQL에서 변수에 새 값을 설정하려면 할당 연산자 또는 문장을 사용할 수 있습니다.
할당 전에 변수가 명시적으로 선언되지 않았다면 새 변수가 생성되며, 그 데이터 타입은 할당 표현식에서 파생됩니다.
할당 연산자 := 또는 = 를 사용해 값을 설정할 수 있습니다.
문법:
var [:= | = ] expression;
code := 'A';
status := 1;
count = 0;
CASE 표현식 (CASE Expression)
CASE 표현식은 표현식 안에서 IF-THEN-ELSE 로직을 구현할 수 있게 해 줍니다.
문법:
단순 CASE 표현식:
CASE expr
WHEN expr THEN expr
...
[ELSE expr]
END
CASE
WHEN boolean_expr THEN expr
...
[ELSE expr]
END
어떤 WHEN 표현식도 일치하지 않고 ELSE 절도 지정되지 않으면 NULL이 반환됩니다.
예제:
단순 CASE 표현식:
CASE state
WHEN 'AZ' THEN 'Arizona'
WHEN 'CA' THEN 'California'
ELSE 'N/A'
END
커서 속성 (Cursor Attributes)
커서 속성은 현재 커서 상태에 대한 정보를 얻을 수 있게 해 줍니다.
문법:
cursor_name%ISOPEN
cursor_name%FOUND
cursor_name%NOTFOUND
- %ISOPEN 속성: 커서가 열려 있으면 true 를, 그렇지 않으면 false 를 반환합니다.
- %FOUND 속성: 커서에서 첫 번째 fetch 전에는 NULL, 마지막 fetch가 행을 반환했으면 true , 그렇지 않으면 false 를 반환합니다.
데이터 타입 (Data Types)
HPL/SQL 프로그램에서 다음 데이터 타입을 사용할 수 있습니다:
| 데이터 타입 | 별칭 (Aliases) | 설명 |
|---|---|---|
| BIGINT | INT8 | 64비트 정수 |
| BINARY_DOUBLE | 배정밀도 부동소수점 | |
| BINARY_FLOAT | 단정밀도 부동소수점 | |
| BINARY_INTEGER | 32비트 정수 | |
| BIT | 0, 1 또는 NULL | |
| BOOL | BOOLEAN | 참 또는 거짓 |
| CHAR(n) | CHARACTER(n) | 고정 길이 문자열 |
| DECIMAL(p,s) | 고정 소수점 숫자 | |
| DATE | 날짜 (년, 월, 일) | |
| DATETIME | 날짜와 시간 | |
| DOUBLE | DOUBLE PRECISION | 배정밀도 부동소수점 |
| FLOAT | 단정밀도 부동소수점 | |
| INT | INTEGER, INT4 | 32비트 정수 |
| NCHAR(n) | 고정 길이 문자열 | |
| NVARCHAR(n) | 가변 길이 문자열 | |
| NUMERIC(p,s) | 고정 소수점 숫자 | |
| NUMBER(p,s) | 고정 소수점 숫자 | |
| PLS_INTEGER | 32비트 정수 | |
| REAL | 단정밀도 부동소수점 | |
| RECORD | 임의의 레코드 | |
| SIMPLE_DOUBLE | 배정밀도 부동소수점 | |
| SIMPLE_FLOAT | 단정밀도 부동소수점 | |
| SIMPLE_INTEGER | 32비트 정수 | |
| SMALLINT | INT2 | 16비트 정수 |
| SYS_REFCURSOR | 커서 변수 | |
| TIMESTAMP | 날짜와 시간 | |
| TINYINT | 8비트 정수 | |
| VARCHAR(n) | VARCHAR(max) | 가변 길이 문자열 |
| VARCHAR2(n) | 가변 길이 문자열 | |
| UTL_FILE.FILE_TYPE | 파일 핸들 |
데이터 타입 변환 (Data Type Conversion):
CREATE TABLE에 Hive가 지원하지 않는 데이터 타입이 있으면 HPL/SQL이 자동으로 변환해 줍니다.
DATE 리터럴 (DATE Literal)
DATE 리터럴은 ‘YYYY-MM-DD’ 형식의 문자열로 날짜 상수를 지정할 수 있게 해 줍니다. 그러면 DATE 데이터 타입이 필요한 어떤 표현식에서도 이 날짜 값을 사용할 수 있습니다.
예제:
DATE '2014-12-20'
DATE '2014-12-20' + 1 -- Result: 2014-12-21 of type DATE
DATE '2014-12-20' - 1 -- 2014-12-19
함께 보기:
- TIMESTAMP 리터럴
- INTERVAL 표현식
선언 (Declarations)
DECLARE 블록 또는 문장을 사용해 변수를 선언할 수 있습니다.
단, 한 프로그램에서 두 문법을 혼용할 수도 있습니다. DECLARE 블록과 문장은 프로그램 어디에나 올 수 있습니다.
DECLARE 블록의 문법:
DECLARE
var datatype [NOT NULL] [:= | = | DEFAULT expression];
...
BEGIN
...
END;
var CONSTANT datatype := | DEFAULT expression
예외 처리 (Exceptions)
HPL/SQL은 프로그램에서 예외를 처리할 수 있게 해 줍니다.
문법:
BEGIN
-- Statements that can raise an exception
EXCEPTION
WHEN condition THEN
-- Statements
WHEN condition2 THEN
-- Statements2
...
END
DECLARE
v VARCHAR(200);
BEGIN
OPEN cur FOR 'SELECT c1 FROM t1';
FETCH cur INTO v;
CLOSE cur;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error');
END
INTERVAL 표현식 (Interval Expressions)
INTERVAL 표현식은 DATE 및 TIMESTAMP 값에 간격(interval) 값을 더하거나 뺄 수 있게 해 줍니다.
문법:
[INTERVAL] expression DAYS | DAY | MICROSECONDS | MICROSECOND
Java의 제약으로 인해 MICROSECOND 표현식은 MILLISECOND(밀리초) 표현식으로 변환됩니다.
예제 1:
DATE 및 TIMESTAMP 값에 1일을 더하기:
DATE '2015-03-12' + 1 DAY;
--
2015-03-13
TIMESTAMP '2015-03-12' + 1 DAY;
--
2015-03-13 00:00:00
TIMESTAMP 리터럴 (TIMESTAMP Literal)
TIMESTAMP 리터럴은 ‘YYYY-MM-DD HH:MI:SS.FFF’ 또는 ‘YYYY-MM-DD-HH.MI.SS.FFF’ 형식의 문자열로 타임스탬프 상수를 지정할 수 있게 해 줍니다.
TIMESTAMP 데이터 타입이 필요한 어떤 표현식에서도 이 타임스탬프 값을 사용할 수 있습니다.
예제:
TIMESTAMP '2015-03-03 11:39:31.123'
TIMESTAMP '2015-03-03-11.39.31.123' -- DB2 syntax
소수 부분은 선택 사항입니다.
호환성 (Compatibility): Oracle, IBM DB2
함께 보기:
- DATE 리터럴
- INTERVAL 표현식
- TIMESTAMP_ISO 함수
- TO_TIMESTAMP 함수
더 알아보기 (Learn more)
- 이 페이지는 HPL/SQL의 언어 요소를 개괄하는 인덱스예요. 각 항목(예: %ROWTYPE, CASE, 커서 속성, 데이터 타입 등)은 별도의 문서로 더 자세히 설명되어 있어요. 실제 스크립트를 작성할 때는 해당 세부 문서를 참고하세요.