SQL 프로시저의 변수(DECLARE, SET문)
SQL 프로시저의 로컬 변수 지원을 통해 SQL 프로시저 로직의 지원에서 SQL 값을 지정하고 검색할 수 있습니다.
SQL 프로시저의 변수는 DECLARE문을 사용하여 정의됩니다.
SET문 또는 SELECT INTO문을 통해 변수에 값을 지정하거나 변수 선언 시 기본값으로 지정할 수 있습니다. 리터럴, 표현식, 쿼리 결과 및 특수 레지스터 값을 변수에 지정할 수 있습니다.
변수 값은 SQL 프로시저 매개변수, SQL 프로시저의 기타 변수에 지정될 수 있으며 루틴 내에서 실행된 SQL문 내에서 매개변수로 참조될 수 있습니다.
CREATE PROCEDURE proc_vars()
SPECIFIC proc_vars
LANGUAGE SQL
BEGIN
DECLARE v_rcount INTEGER;
DECLARE v_max DECIMAL (9,2);
DECLARE v_adate, v_another DATE;
DECLARE v_total INTEGER DEFAULT 0; -- (1)
DECLARE v_rowsChanged BOOLEAN DEFAULT FALSE; -- (2)
SET v_total = v_total + 1; -- (3)
SELECT MAX(salary) -- (4)
INTO v_max FROM employee;
VALUES CURRENT_DATE INTO v_date; -- (5)
SELECT CURRENT DATE, CURRENT DATE -- (6)
INTO v_adate, v_another
FROM SYSIBM.SYSDUMMY1;
DELETE FROM T;
GET DIAGNOSTICS v_rcount = ROW_COUNT; -- (7)
IF v_rcount > 0 THEN -- (8)
SET is_done = TRUE;
END IF;
END
변수 선언 시, 라인 (1)에서와 같이 DEFAULT 절을 통해 기본값을 지정할 수 있습니다. 라인 (2)에서는 기본값이 FALSE인 부울 데이터 유형의 변수 선언을 보여줍니다. 라인 (3)에서는 SET문을 사용하여 단일 변수 값을 지정할 수 있음을 보여줍니다. 또한 라인 (4)에 표시된 대로 INTO 절과 결합하여 SELECT 또는 FETCH문을 실행하여 변수를 설정할 수 있습니다. 라인 (5) 및 (6)에서는 VALUES INTO문을 사용하여 함수 또는 특수 레지스터를 평가하고 하나의 변수 또는 여러 변수에 값을 지정하는 방법을 보여줍니다.
또한 GET DIAGNOSTICS문의 결과를 변수에 지정할 수 있습니다. GET DIAGNOSTICS를 사용하여 영향을 받은 행의 수를 파악하거나(UPDATE문의 갱신됨, DELETE문의 경우 DELETE) 방금 실행된 SQL문의 리턴 상태를 가져올 수 있습니다. 라인 (7)에서는 바로 이전에 실행된 DELETE문으로 수정된 행의 수가 변수에 지정될 수 있는 방법을 보여줍니다.
라인 (8)에서는 로직 조각을 사용하여 변수에 지정될 값을 판별하는 방법을 보여줍니다. 이 경우 이전의 DELETE문 및 GET DIAGNOSTICS문 실행의 파트로 변수 v_rcount에 0보다 큰 값이 지정되어 행이 변경되면 변수 is_done에 TRUE 값이 지정됩니다.