변수 선언(PL/SQL)

블록에서 사용되는 변수는 전역 변수 또는 패키지 레벨 변수가 아닌 한 일반적으로 블록의 선언 섹션에서 정의해야 합니다. 변수 선언은 변수에 지정된 이름과 변수의 데이터 유형으로 구성됩니다. 선택적으로 변수 선언 내에서 변수를 기본값으로 초기화할 수 있습니다.

구문

구문 도표 읽기시각적 구문 도표 생략
>>-이름--+----------+--type--+----------+------------------------->
       '-CONSTANT-'        '-NOT NULL-'   

>--+-----------------------------+-----------------------------><
   '-+-:=------+--+-expression-+-'   
     '-DEFAULT-'  '-NULL-------'     

설명

name
변수에 지정되는 ID를 지정합니다.
CONSTANT
변수값이 상수가 되도록 지정합니다. 기본 표현식을 지정해야 하며 애플리케이션 프로그램 내에서 새 값을 변수에 지정할 수 없습니다.
type
변수의 데이터 유형을 지정합니다.
NOT NULL
현재 Db2®에서 무시됩니다. 변수 선언에 대해 NOT NULL을 지정하는 루틴은 성공적으로 컴파일됩니다. 그러나 이러한 루틴은 NOT NULL이 지정되지 않은 것처럼 동작합니다. NOT NULL로 선언된 변수에서 널(NULL) 값을 금지하기 위한 런타임 검사가 수행되지 않습니다. 애플리케이션이 PL/SQL 변수에서 널(NULL) 값을 제한해야 하는 경우 다음 예를 참조하십시오.
DEFAULT
변수의 기본값을 지정합니다. 블록을 입력할 때마다 이 기본값이 평가됩니다. 예를 들어, DATE 유형의 변수에 SYSDATE가 지정된 경우 이 변수는 프로시저 또는 함수가 사전 컴파일된 시간이 아니라 현재 호출 시간으로 분석됩니다.
:=
지정 연산자는 DEFAULT 키워드의 동의어입니다. 그러나 이 연산자가 expression 없이 지정된 경우, 변수는 NULL 값으로 초기화됩니다.
expression
블록을 입력할 때 변수에 지정되는 초기값을 지정합니다.
NULL
SQL 값 NULL을 지정합니다. 여기에는 널(NULL) 값이 포함됩니다.

  1. 다음 프로시저는 문자열 표현식 및 산술식으로 구성된 기본값을 사용하는 변수 선언을 표시합니다.
    CREATE OR REPLACE PROCEDURE dept_salary_rpt (
        p_deptno        NUMBER
    )
    IS
        todays_date     DATE := SYSDATE;
        rpt_title       VARCHAR2(60) := 'Report For Department # ' || p_deptno 
        				     || ' on ' || todays_date;
        base_sal        INTEGER := 35525;
        base_comm_rate  NUMBER := 1.33333;
        base_annual     NUMBER := ROUND(base_sal * base_comm_rate, 2);
    BEGIN
        DBMS_OUTPUT.PUT_LINE(rpt_title);
        DBMS_OUTPUT.PUT_LINE('Base Annual Salary: ' || base_annual);
    END;
    이 프로시저를 호출하면 다음 샘플 출력을 얻을 수 있습니다.
    CALL dept_salary_rpt(20);
    
    Report For Department # 20 on 10-JUL-07 16:44:45
    Base Annual Salary: 47366.55
  2. 다음 예는 IS NULL 또는 IS NOT NULL을 사용하여 명시적 검사를 추가함으로써 널(NULL) 값을 제한하고 필요한 경우 오류 케이스를 처리합니다.
    create table T(col1 integer);
    insert into T values null;
    
    declare
      N integer not null := 0;
      null_variable exception;
    begin
      select col1 into N from T;
      if N is null then
        raise null_variable;
      end if;
    exception
      when null_variable then
        -- Handle error condition here.
        dbms_output.put_line('Null variable detected');
    end;