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, 커서 속성, 데이터 타입 등)은 별도의 문서로 더 자세히 설명되어 있어요. 실제 스크립트를 작성할 때는 해당 세부 문서를 참고하세요.