[자바] 30일차 - PL/SQL 의 기초, 자바 JDBC 연동 :: 소림사의 홍반장!

[참고] 오라클클럽 > 오라클강좌 > 오라클 PL/SQL 강좌

 

2012/09/10 - [Dev. 자바/참고소스] - [자바 소스] PL/SQL 자바에서 이용하기 예제 소스

 

 

 

PL/SQL이란?

- PL/SQL  Oracle’s Procedural Language extension to SQL 의 약자 이다.

- SQL문장에서 변수정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR)등을 지원하며,오라클 자체에 내장되어 있는 Procedure Language 이다.

- DECLARE문을 이용하여 정의되며, 선언문의 사용은 선택 사항 이다.

- PL/SQL 문은 블록 구조로 되어 있고 PL/SQL자신이 컴파일 엔진을 가지고 있다.

 

PL/SQL Block Structure

  PL/SQL은 프로그램을 논리적인 블록으로 나누는 구조화 된 블록 언어 이다.

  PL/SQL 블록은 선언부(선택적), 실행부(필수적), 예외 처리부(선택적)로 구성되어 있고, BEGIN END 키워드는 반드시 기술해 주어야 한다.

PL/SQL Block Structure
  • DECLARE
    • - Optional
    • - Variables, cursors, user-defined exceptions
  • BEGIN
    • - Mandatory
    • - SQL Statements
    • - PL/SQL Statements
  • EXCEPTION
    • - Actions to perform when errors occur
  • END
    • - Mandatory


 

PL/SQL 프로그램의 작성 요령

- PL/SQL 블록내에서는 한 문장이 종료할 때마다 세미콜론(;)을 사용 한다.

- END뒤에 세미콜론(;)을 사용하여 하나의 블록이 끝났다는 것을 명시 한다.

- PL/SQL 블록의 작성은 편집기를 통해 파일로 작성할 수도 있고, SQL 프롬프트에서 바로 작성 할 수도 있다.

- SQL*PLUS 환경에서는 DECLARE BEGIN이라는 키워드로 PL/SQL블럭이 시작하는 것을 알 수 있다.

- 단일행 주석 : --

- 여러행 주석 : /* */

- PL/SQL 블록은 행에 / 가 있으면 종결 된다.

 

PL/SQL 블럭의 유형

PL/SQL Anonymous Block PL/SQL Procedure Block PL/SQL Function Block
[ Anonymous ] [ Procedure ] [ Function ]

Anonymous Block (익명 블록)

  이름이 없는 블록을 의미 하며, 실행하기 위해 프로그램 안에서 선언 되고 실행시에 실행을 위해 PL/SQL 엔진으로 전달 된다.

  선행 컴파일러 프로그램과 SQL*Plus 또는 서버 관리자에서 익명의 블록을 내장 할 수 있다.

Procedure (프로시저)

  특정 작업을 수행할수 있는 이름이 있는 PL/SQL 블록으로서, 매개 변수를 받을수 있고, 반복적으로 사용할수 있다.

  보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL블록을 데이터베이스에 저장하기 위해 생성 한다.

 

Function (함수)

  보통 값을 계산하고 결과 값을 반환하기 위해서 함수를 많이 사용 한다.

  대부분 구성이 프로시저와 유사 하지만 IN 파라미터만 사용 할 수 있다.

  반드시 반환 될 값의 데이터 타입을 RETURN문에 선언해야 한다.

  또한 PL/SQL블록 내에서 RETURN문을 통해서 반드시 값을 반환해야 한다.

 

FOR LOOP 문법

  • - index 는 자동 선언되는 binary_integer형 변수이고, 1씩 증가 한다.
  • - reverse 옵션이 사용 될 경우 index 는 upper_bound에서 lower_bound로 1씩 감소 한다.
  • - IN 다음에는 coursor select 문이 올 수 있다.

 

 

LOOP문 문법

  • - EXIT 문이 사용되었을 경우, 무조건 LOOP문을 빠져나간다.
  • - EXITH WHEN 이 사용될 경우 WHEN 절에 LOOP를 빠져 나가는 조건을 제어 할 수 있다.


 

 

 

커서란 무엇인가?

  • - 커서는 Private SQL의 작업 영역이다.
  • - 오라클 서버에 의해 실행되는 모든 SQL문은 연관된 각각의 커서를 소유하고 있다.
  • - 커서의 종류
    • 암시적 커서 : 모든 DML과 PL/SQL SELECT문에 대해 선언된다.
    • 명시적 커서 : 프로그래머에 의해 선언되며 이름이 있는 커서이다.

Explicit Cursor의 흐름도?

문법(Syntax)

 

FOR문에서 커서 사용 문법

 FOR문을 사용하면 커서의 OPEN, FETCH, CLOSE가 자동 발생하므로 따로 기술할 필요가 없고, 레코드 이름도 자동 선언되므로 따로 선언할 필요가 없다.

 

 

 

예외(Exception)란?

  오라클 PL/SQL의 오류를 예외라고 한다.

  오류는 PL/SQL을 컴파일 할때 문법적인 오류로 발생하는 컴파일 타임 오류와, 프로그램을 실행 할 때 발생하는 실행타임 오류로 구분 할 수 있다.

 

예외처리 문법

  • - 예외 처리절은 EXCEPTION부터 시작 한다.
  • - 예외가 발생하면 여러 개의 예외 처리부 중에 하나의 예외 처리부에 트랩(Trap) 된다.
  • - WHEN OTHERS절은 맨 마지막 온다.


 

미리 정의된 예외의 종류

  - NO_DATA_FOUND : SELECT문이 아무런 데이터 행을 반환하지 못할 때

  - DUP_VAL_ON_INDEX : UNIQUE 제약을 갖는 컬럼에 중복되는 데이터가 INSERT 될 때

  - ZERO_DIVIDE : 0으로 나눌 때

  - INVALID_CURSOR : 잘못된 커서 연산

  - Predefined PL/SQL Exceptions 더 보기

 

 

사용자 정의 예외 예제

오라클 저장함수 RAISE_APPLICATION_ERROR를 사용하여 오류코드 -20000부터 -20999의 범위 내에서 사용자 정의 예외를 만들수 있다.

  - STEP 1 : 예외의 이름을 선언 (선언절)

  - STEP 2 : RAISE문을 사용하여 직접적으로 예외를 발생시킨다(실행절)

  - STEP 3 : 예외가 발생할 경우 해당 예외를 참조한다(예외절)

 

 

 

패키지 선언절 문법

  • - 선언절은 패키지에 포함될 PL/SQL 프로시저나, 함수, 커서, 변수, 예외절을 선언 한다.
  • - 패키지 선언부에서 선언한 모든 요소들은 패키지 전체에 적용 된다.
  • - 즉 선언부에서 선언한 변수는 PUBLIC 변수로 사용 된다.

패키지 본문 문법

  • - 패키지 본문은 패키지에서 선언된 부분의 실행을 정의 한다.
  • - 즉 실재 프로시져나 함수의 내용에 해당하는 부분이 온다.


 

 

 

트리거란?

  INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 이다.

  트리거는 TABLE과는 별도로 DATABASE에 저장 된다.

  트리거는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의 될 수 있다.

  행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다.

  문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.

트리거 문법

  • - BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행 된다.
  • - AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행 된다.
  • - trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있다.
  • - FOR EACH ROW : 이 옵션이 있으면 행 트리거가 된다.


 

 

다른 카테고리의 글 목록

Dev. 640시간 뭉개기/강의내용정리 카테고리의 포스트를 톺아봅니다