[CS] 절차형 SQL

절차형 SQL

일반 개발 언어처럼 SQL에서 제공하는 절차 지형적인 프로그램 언어

- SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용해 특정기능을 수행하는 저장 모듈 생성

특징

- 변수, 상수 선언

- IF, LOOP등의 절차형 언어 사용

- 사용자 정의 에러 사용

- 조건문, 반복문 등 단일 SQL문장으로 실행하기 어려운 연속적인 작업 처리 가능

- 응용프로그램의 성능 향상 및 서버 통신량 감소 효과

종류

- Procedure: 트랜잭션 언어로 미리 저장해놓은 SQL 작업 수행 (Output X)

- User Defined Function: 프로시저와 비슷, SQL로 작업 처리하여 종료 시 RETURN으로 단일값 반환

- Trigger: 데이터 입력, 갱신, 삭제 등 이벤트 발생시 원하는 작업을 자동으로 수행

*구조*

DECLARE
--선언부
  V_TEST_ID VARCHAR(10); --변수 선언
  V_TEST_NUM NUMBER := 100; --상수 선언

BEGIN
-- 실행부
  SELECT V_TEST_NUM +1
  INTO V_TEST_ID --변수에 SELECDT 값 정의
  FROM DUAL;
  
  DBMS_OUTPUT.PUT_LINE(V_TEST_ID); --출력
  
  -- IF-THEN 조건
  IF V_TEST_ID = '10' THEN DBMS_OUTPUT.PUT_LINE('10을 출력합니다');
  ELSIF V_TEST_ID = '11' THEN DBMS_OUTPUT.PUT_LINE('11을 출력합니다');
  ELSE ...;
  END IF;
  
  -- CASE 조건
  CASE
  WHEN V_TEST_NUM = 10 THEN ...;
  WHEN V_TEST_NUM = 11 THEN ...;
  ELSE ...;
  END CASE;

-- EXCEPTION (선택)
-- 예외처리부
END;

User Defined Function

특정 기능들을 모듈화, 재사용하는 사용자 정의 함수, SQL 연산에 대한 결과 값을 RETURN

-- 기존 함수가 없으면 생성하고, 있으면 바꿈
CREATE OR REPLACE FUNCTION UF_TEST_MONTH( --함수명
	P_CALDATE DATE --입력 받을 변수타입
)
	RETURN VARCHAR2 --출력 할 변수의 데이터 타입
    
IS

	V_MON VARCHAR2(10); --선언부에서 사용 할 변수 (RETURN 변수)
    
BEGIN
-- SQL 수행
	SELECT TO_CHAR(P_CALDATE, 'MON')
    INTO V_MON
    FROM DUAL;
    
    RETURN(V_MON); -- 리턴 결과, **필수**

END UF_TEST_MONTH1;