참고

2020-08-28-01)PLSQL.sql
2020-08-28-02)PLSQL2.sql

PL/SQL

  • Procedural Langauge SQL
  • 절차적 언어의 특징인 변수,분기문,반복문,예외처리 등의 기능이 지원된 SQL
  • 모든 코드가 DB내부에 생성되고 컴파일되어 저장되기 때문에 실행 속도가 빠름
  • 네트워크의 트래픽 감소
  • 표준 문법이 없음
  • 예외처리: 예외가 발생 되었지만 정상적으로 끝마칠수있도록 하는 것
  • Anonymous Block, Store Procedure, User Defined Function(Function)
  • package: 다른 객체들을 포함할 수 있다. 일련의 과정을 처리할 수 있다
  • Trigger

Anonymous Block

  • 기본적인 PL/SQL의 구조를 정의
  • 이름이 없는 블록 -> 저장되어질 수 없다 = 재사용 제한
  • 뭘 얹느냐에 따라 사용자정의함수, 저장프로시저, 패키지가 된다

선언형식

  • DECLARE
    선언부
    BEGIN
    실행부
    [EXCEPTION 예외처리]
    END;

예시

1. 정수형 변수에 값을 배정하고 짝수인지 홀수인지 구분하여 출력하는 익명블록을 작성하시오

1) 변수

  • 다른 응용프로그램 언어의 변수 개념과 동일
  • 보통 일반 변수는 'V_'로, 매개변수는 'P_'로 부여

선언형식

  • 변수명 타입 [:= 초기값];
    := 대입연산자

변수의 타입

기본

  • 표준 SQL에서 사용하는 타입과 동일하며 추가적으로 BOOLEAN, BINARY_INTEGER, PLS_INTEGER가 지원됨
    • BOOLEAN : 논리값(TRUE,FALSE,NULL)
    • BINARY_INTEGER, PLS_INTEGER : -2147483648~2147483647 까지의 정수 처리

참조타입

  • 테이블명.컬럼명%TYPE
    • ex) V_PD PROD.PROD_DELIVERY%TYPE;
  • 테이블명%ROWTYPE
    • 한 행의 타입을 전부 가지고옴 (≒ C언어의 스트럭쳐)

예시

1. 회원테이블에서 회원의 직업을 입력 받아 회원번호, 회원명 마일리지를 출력하는 익명블록 작성

  • EXIT WHEN CUR_MEM%NOTFOUND;
    • IS OPEN: 커서가 열렸는지 안 열렸는지
    • FOUND: FETCH시 데이터가 있으면 참
    • NOTFOUND: FETCH시 데이터가 없으면 참
    • ROWCOUNT: 커서 안에 몇 행이 들어있는 지 출력

2) 상수

  • 다른 응용프로그램 언어의 상수 개념과 동일

선언형식

  • 식별자 CONSTANT 타입 [:= 초기값];

3) 커서

  • 보통 FOR문이랑 같이 쓰임
  • FOR 문이랑 같이 쓰이면 DECLARE 로 선언하지 않고 FOR문 내에서 인라인으로 커서를 선언.
  • SQL 명령의 결과 집합
  • 용도: '쿼리 결과'를 읽거나 수정하거나 '별도의 작업을 수행'하기위해 커서 사용
    • ex) 커서로 회원ID, 이름, 마일리지를 생성시키고 해당 회원의 성별까지 출력하시오

커서 사용 단계

  • ① 생성(DECLARE)
  • ② 실행(BEGIN):OPEN -> FETCH -> CLOSE)

커서 선언 형식

  • CURSOR 커서명[(매개변수 타입)]
    IS
    ....SELECT 문;
  • '매개변수'에 값을 배정하는 곳은 OPEN문에서 수행
    • (OPEN문 뒤: 실매개변수/커서명 뒤: 가매개) -> 예전에 부르던 방식

실행영역에서

  • 1) OPEN 커서명 (값 [,값,...]);
  • 2) FETCH 커서명 INTO 변수명[,변수명,...];
    • FETCH : 커서에 존재하는 데이터를 행단위로 읽어 변수에 저장
    • '변수'는 선언부에서 선언된 변수
    • 커서문 내의 SELECT 문의 SELECT절에 기술된 컬럼의 순서와 갯수, 타입이 일치
    • FETCH문은 반복문 안에 기술 (바깥에 하면 맨 첫줄만 읽어오게 됨)
  • 3) CLOSE 커서명;
    • 사용이 종료된 커서를 닫아줌
    • 한번 CLOSE되면 더 이상 접근할 수 없음

커서 속성

  • 특징
    • ROWCOUNT 제외 주로 조건문에 사용됨
    • 묵시적 커서(Implicit Cursor)의 속성은 '커서명'대신 'SQL'이 사용됨
  • 커서명%ISOPEN
    • 오픈:TRUE, 클로즈:FALSE
    • SQL%ISOPEN은 늘 거짓, 왜냐 바로 닫히기때문
  • 커서명%FOUND
    • 커서가 읽어올 자료의 존재 여부
    • = 결과에 한행이라도 존재하면 TRUE
    • = 커서에 포함된 SQL명령이 한번이라도 영향을 미쳤다면 TRUE
  • 커서명%NOTFOUND
    • 커서명%FOUND의 반대, 결과에 한행도 조회되지 않는다
  • 커서명%ROWCOUNT
    • 커서 결과 집합에 존재하는 행의 수
profile
갈 길이 멀다

0개의 댓글