2.2.8 절차형 SQL

YJ·2022년 8월 30일
0

2.2.8 절차형 SQL

절차형 SQL 개요

  • 일반 개발 언어처럼 SQL 언어에서도 절차 지향적 프로그램이 가능하도록 하는 트랜잭션 언어
  • PROCEDURE, USER DEFINED FUNCTION, TRIGGER
    - 조건에 따른 분기처리를 이용해 특정 기능을 수행하는 저장 모듈을 생성할 수 있고,
    • 절차형 SQL을 통해 생성할 수 있음

PL/SQL 개요

특징

  • 저장모듈이란 PL / SQL 문장을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램이며, 완전한 실행 프로그램
  • 처리결과 반환하지 않거나 한 개 이상의 값을 반환함.
 Oracle 저장 모듈에는 Procedure, User Defined Function, Trigger가 있다.
  • Block 구조로 되어있어 기능별로 모듈화 가능
  • 변수, 상수 등을 선언하여 SQL 문장 간 값 교환 가능
  • IF, LOOF 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 함
  • DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용 가능
  • PL/SQL은 Oracle에 내장되어있어서, 이를 지원하는 어떤 서버로도 프로그램을 옮길 수 있음
  • PL / SQL은 응용 프로그램의 성능을 향상시킴
  • 이는 SQL 문장을 여러 블록으로 묶고 한 번에 블록 전부를 서버로 보내기 때문에 통신량을 줄일 수 있음

  • PL/SQL 엔진: 프로그램 문장 처리
  • SQL Statement Executor: SQL 문장 처리

구조

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

기본 문법

CREATE [OR REPLACE] PROCEDURE 프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... ) 
IS 
	변수선언
BEGIN
	명령어;
[COMMIT|ROLLBACK]
END;

T-SQL 개요

특징

  • T-SQL은 근본적으로 SQL Server를 제어하기 위한 언어로서, SQL에 약간의 기능을 더 추가해 보완적으로 만든 것

  • 전역변수 선언은 @@, 지역변수 선언은
    전역변수는 이미 SQL 서버에 내장된 값, 지역변수는 사용자의 연결시간 동안만 사용하기위해 만들어짐

  • int, float, varchar 등의 자료형 사용 가능

  • 연산자 사용 가능

  • IF-ELSE, WHILE, CASE-THEN 등의 흐름 제어 기능

  • 주석 기능은 '--, /**/' 으로 사용 가능

구조

기본 문법

CREATE PROCEDURE [SCHEMA_NAME.]프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... ) 
AS 
	변수선언
BEGIN
	명령어;
ERROR
	명령어;
END;

User Defined Function의 생성과 활용

  • Function이 Procedure와 다른 점은 RETURN을 이용하여 하나의 값을 반드시 되돌려 줘야 한다는 것
CREATE [OR REPLACE] FUNCTION 함수명
(파라미터명 IN 데이터타입, ... ... ) 
RETURN 데이터타입
IS 
	변수선언
BEGIN
	명령어;
   	RETURN 변수;
[COMMIT|ROLLBACK]
END;

Trigger의 생성과 활용

  • 트리거란 특정한 테이블에 INSERT, UPDATE, DELETE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE|AFTER] 유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;

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

  • 프로시저는 BEGIN~END 절 내에 COMMIT, ROLLBACK과 같은 트랜잭션 종료 명령어를 사용할 수 있지만
  • 데이터베이스 트리거는 BEGIN~END 절 내에 사용할 수 없다. 

SQLD 참고자료

profile
💻귀찮으니 필요할 때만 쓰는 Computer Vision 일지 ㅇㅇ💻

0개의 댓글