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 값이 지정됩니다.