데이터 엔지니어링/SQL

[PL/SQL] 프로시저 언어 기초(1)

안용감한호랑이 2023. 11. 2. 02:17

[데이터 엔지니어링/SQL] - [PL/SQL] 프로시저의 주요 기능

 

 

변수 선언

변수 선언은 지정된 데이터 유형의 값에 대한 저장 공간을 할당하고 참조할 수 있도록 저장 위치의 이름을 지정한다.

  1. NOT NULL
    • 스칼라 변수나 상수에 NOT NULL 제약 조건을 넣을 수 있다.
    • 이는 항목에 NULL 값을 할당하는 것을 방지한다.
    • 프로시저는 길이가 0인 문자열을 NULL값으로 처리한다.
  2. 변수 선언
    • 변수의 이름과 데이터의 유형을 지정한다.
    • 변수 선언시 초기 값을 지정할 수도 있다.
    • 값의 변경이 가능하다.
  3. 상수 선언
    • 변하지 않는 값을 보유한다.
    • 초기값이 필요하다.

 

변수에 값 할당

변수와 값은 호환 가능한 데이터 유형을 가져야 한다. 데이터의 유형은 암시적으로 해당 유형으로 변환될 수 있는 경우 다른 데이터 유형과 호환된다.

-- 1. 할당 문을 사용하여 변수에 값 할당
variable_name := expression;

-- 2. SELECT INTO문을 사용하여 변수에 값 할당.
-- 각각에 대해 select_item에 해당하는 유형이 호환되야한다.
SELECT   select_item [, select_item] ...
INTO     variable_name [, variable_name] ...
FROM     table_name
;

-- 3. 서브 프로그램의 매개변수로 변수에 값 할당.
-- 서브 프로그램에 변수를 OUT 또는 IN OUT 매개변수로 전달하고
-- 서브 프로그램이 매개변수에 값을 할당하는 경우 서브프로그램 실행이 완료된 이후에도
-- 변수는 해당 값을 유지한다.
DECLARE
  emp_salary  NUMBER(8,2);
 
  PROCEDURE adjust_salary (
    emp        NUMBER, 
    sal IN OUT NUMBER,
    adjustment NUMBER
  ) IS
  BEGIN
    sal := sal + adjustment;
  END;
 
BEGIN
  SELECT salary INTO emp_salary
  FROM employees
  WHERE employee_id = 100;
 
  # 아래 라인에서 만약 emp_salary 가 5000으로
  # Before invoking procedure, emp_salary : 5000
  # 위와 같았다면
  DBMS_OUTPUT.PUT_LINE
   ('Before invoking procedure, emp_salary: ' || emp_salary);
 
  adjust_salary (100, emp_salary, 1000);
  
  # 위 adjust_salary 프로시저를 수행하고 나서는
  # Aftoer invoking procedure, emp_salary : 6000
  # 으로 나올것이다.
  DBMS_OUTPUT.PUT_LINE
   ('After invoking procedure, emp_salary: ' || emp_salary);
END;
/