[PL/SQL] PL/SQL 특징 및 문법 구조

EUN JY·2022년 4월 6일
1

Database

목록 보기
2/21

1. PL/SQL

  • Procedural Language extension to SQL
  • SQL을 확장한 절차적 언어(Procedural Language)

1-1. PL/SQL 특징

  • 종류 : Procedure, Function, Trigger
  • 관계형 데이터베이스에서 사용되는 Oracle의 표준 데이터 엑세스 언어로, 프로시저 생성자를 SQL과 완벽하게 통합
  • 유저 프로세스가 PL/SQL 블록을 보내면, 서버 프로세서는 PL/SQL Engine에서 해당 블록을 받고 SQL과 Procedural를 나눠서 SQL은 SQL Statement Executer로 보냄
  • 오라클에서 지원하는 프로그래밍 언어의 특성을 수용, SQL에서는 사용할 수 없는 절차적 프로그래밍 기능을 가지고 있어 SQL의 단점을 보완

1-2. PL/SQL 장점

  • 프로시저 생성자와 SQL의 통합
  • 잘 만들어진 PL/SQL 명령문의 성능 향상
  • 모듈식 프로그램 개발 가능 : 논리적인 작업을 진행하는 여러 명령어들을 하나의 블록으로 만들 수 있음
  • 이식성이 좋음
  • 예외 처리 가능
  • 아래의 SQL 단점 해결 가능
    • 변수가 없음
    • 한번에 하나의 명령문만 사용 가능하기 떄문에 트래픽이 상대적으로 증가
    • 제어문 사용 불가 (IF, LOOP)
    • 예외 처리가 없음
  • 대용량 데이터를 연산해야 할 때, WAS등의 서버로 전송해서 처리하려면 네트워크에 부하가 많이 걸릴 수 있음 > 프로시져나 함수를 사용하여 데이터를 연산하고 가공한 후, 최종 결과만 서버에 전송하면 부담을 줄일 수 있음
  • 로직 수정을 위해 서버를 셧다운 시키지 않아도 됨(서버에서는 단순히 DB에 프로시저를 호출하여 사용하면 됨)
  • 쿼리문을 직접 노출하지 않으므로 SQL injection의 위험성이 줄어듦
  • 블록 단위로 유연하게 사용할 수 있음

1-3. PL/SQL 단점

  • 유지보수가 힘듦
  • 대용량 처리가 많을 경우, DB에 부하를 줄 수 있음
  • Git 같은 형상 관리를 사용할 수 없음

2. PL/SQL 문법

  • 블록 단위의 실행을 제공
    • BEGIN과 END;를 사용
    • 마지막 라인에 /를 입력하여 해당 블록이 실행되도록 함
  • 변수, 상수 등을 선언하여 SQL과 절차형 언어에서 사용
    • 변수 선언은 DECLARE 절에서만 가능
    • BEGIN 섹션에서 새 값이 할당될 수 있음
  • IF문을 사용하여 문장들을 분기, LOOP문을 사용하여 일련의 문장을 반복 가능
  • 커서를 사용하여 여러 행 검색 및 처리
  • PL/SQL에서 사용 가능한 SQL : Query, DML, TCL
    • DDL(CREATE, DROP, ALTER, TRUNCATE …), DCL(GRANT, REVOKE) 명령어는 동적 SQL을 이용할 때만 사용 가능
  • PL/SQL의 SELECT문은 해당 SELECT의 결과를 PL/SQL Engine으로 보낸다.
    • 이를 캐치하기 위한 변수를 DECLARE 해야 함
    • INTO 절을 선언하여 넣을 변수를 꼭 표현해주어야 함
    • SELECT 문장은 반드시 한 개의 행이 검색되어야 함
    • INTO절이 누락되거나, 검색되는 행이 없으면 에러 발생
  • 한 문장이 종료할 때마다 세미콜론(;)을 사용, 한 문장이 끝났다는 것을 명시
  • 단일행 주석 -- / 여러 행 주석 /* */

2-1. PL/SQL 구조

2-1-1. DECLARE(선언부)

  • PL/SQL에서 사용하는 모든 변수나 상수를 선언하는 부분
  • 변수/상수/커서 등을 선언

2-1-2. BEGIN(실행부)

  • 절차적 형식으로 SQL문을 실행할 수 있도록 절차적 언어의 요소인 제어문, 반복문, 함수 정의 등 로직을 기술
  • 필수적으로 존재해야 함

2-1-3. EXCEPTION(예외 처리부)

  • PL/SQL문이 실행되는 중에 발생되는 에러(예외 사항)를 해결하기 위한 문장을 기술

2-1-4. END(실행문 종료)

  • END 뒤에 세미콜론(;)을 사용하여 하나의 블록이 끝났다는 것을 명시
  • 필수적으로 존재해야 함

2-2. PL/SQL Block의 종류

  • 익명 블록 : 이름이 없는 PL/SQL Block
  • 이름 있는 블록 : DB의 객체로 저장되는 블록
    • 프로시저 : 리턴 값을 하나 이상 가질 수 있는 프로그램
    • 함수 : 리턴 값을 반드시 반환해야 하는 프로그램
    • 패키지 : 하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음
    • 트리거 : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록
profile
개린이

0개의 댓글