제 8절 절차형 SQL

suyeon-jung·2021년 11월 14일
0

SQLD

목록 보기
16/19

1. 절차형 SQL 개요

일반적인 개발 언어처럼 SQL 언어에서도 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어이다.

  • Oracle : PL(Procedural Language)/SQL

  • SQL Server : T-SQL

  • DB2 : SQL/PL

  • 종류

    1. 프로시저 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
    2. 사용자 정의함수 : 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL
    3. 트리거 : 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL

2. PL/SQL 개요

블럭 구조로 되어 있고 블럭 내에는 DML문장과 Query 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할 수 있으며 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어이다.

  • PL/SQL 구조
  • 선언부(DECLARE) : 프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분
  • 시작/종료부(BEGIN/END) : 프로시저의 시작과 종료를 표현
  • 제어부(CONTROL) :
  • 예외부(EXCEPTION) : BEGIN~END 절에서 실행되는 SQL 문이 실행될 때 예외 발생 시 예외 처리 방법을 정의하는 처리부

2.1 프로시저

  • 프로시저 문법
CREATE [OR REPLACE] PROCEDURE 프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... ) 
IS 
	변수선언
BEGIN
	명령어;
[COMMIT|ROLLBACK]
END;
  • [OR REPLACE] : 기존 프로시저 존재시 현재 컴파일 하는 내용으로 덮어씀
  • [IN|OUT|INOUT] : 변수의 입출력 구분, (운영체제에서 프로시저로 값을 전달하는 모드/프로시저에서 처리된 결과를 운영체제로 전달하는 모드/두가지 기능을 동시에 수행)
  • BEGIN : 프로시저의 시작
  • COMMIT : 하나의 트랜잭션이 성공적으로 끝나고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났을 때 사용하는 연산
  • ROLLBACK : 하나의 트랜잭션이 비정상적으로 종료되어 트랜잭션 원자성이 깨질 경우 처음부터 다시 시작하거나, 부분적으로 연산을 취소하는 연산
  • END : 프로시저의 끝

2.2 사용자 정의함수

  • 기본적인 사항은 프로시저와 동일하고 반환에서의 부분만 프로시저와 다르다.
  • 사용자 정의함수 문법
CREATE [OR REPLACE] FUNCTION 함수명
(파라미터명 IN 데이터타입, ... ... ) 
RETURN 데이터타입
IS 
	변수선언
BEGIN
	명령어;
   	RETURN 변수;
[COMMIT|ROLLBACK]
END;
  • RETURN 데이터타입 : 사용자 정의함수가 반환하는 데이터 타입을 정의
  • RETURN 데이터값 : 사용자 정의함수가 종료될 때 반환하는 단일 값을 정의

2.3 트리거

  • 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL이다.

  • 이벤트는 전체 트랜잭션 대상과 각 행에 의해 발생하는 경우 모두를 포함할 수 있으며 테이블과 뷰, DB 작업을 대상으로 정의할 수 있다.

  • 목적

    • 데이터 무결성 유지 및 로그 메시지 출력 등의 별도 처리를 위해 트리거 사용
    • 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는 데 활용
  • 종류

    • 행 트리거 : 데이터 변화가 생길 때마다 실행
    • 문장 트리거 : 트리거에 의해 단 한 번 실행
  • 트리거 문법

CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE|AFTER] 유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;
  • [BEFORE|AFTER] : DML과 트리거가 실행되는 순서의 전후 관계를 결정
  • [FOR EACH ROW] : 매번 변경되는 데이터 행의 수만큼 실행을 위한 명령어

프로시저와 트리거의 차이점

프로시저트리거
CREATE 프로시저 문법 사용CREATE 트리거 문법 사용
EXECUTE 명령어로 실행생성 후 자동 실행
COMMIT, ROLLBACK 실행 가능COMMIT, ROLLBACK 실행시 컴파일 에러

0개의 댓글