본문 바로가기

Develop/DBMS

PL/SQL기초1

PL/SQL : 기존에 있던 비절차적 언어(Oracle)을 확장해 절차적 언어로 사용할 수 있게 한 언어 = SQL을 프로그래밍하는 것처럼 만든 것

 

PL/SQL의 장점 :

  1. 성능 향상 : BEGIN~END와 같은 블록 구조를 가지므로 블록 안의 여러 SQL 구문이 한번에 서버로 전송되므로 수행속도가 향상되고 통신량도 줄일 수 있다.
  2. 모듈식 프로그램 개발 가능 : 논리적인 작업을 진행하는 여러 명령어들을 하나의 블록으로 만들 수 있다.
  3.  이식성이 좋다.
  4. 예외 처리가 가능하다.
  5. 기존 SQL의 단점을 해결할 수 있다.
    1. 변수가 없다.
    2. 한번에 하나의 명령문만 사용 가능하기 때문에 상대적으로 트래픽이 증가한다.
    3. 제어문을 사용할 수 없다(ex) IF, LOOP)
    4. 예외처리가 없다. 등등
  6. 테이블의 컬럼을 참조하는 동적 변수를 정의 할 수 있다.(%TYPE, %ROWTYPE)

 

PL/SQL의 기본 특징 : 

  1. 블록 단위의 실행을 제공한다. 이를 위해 BEGIN과 END;를 사용한다. 그리고 마지막 라인에 /를 입력하면 해당 블록이 실행된다.
  2. 변수, 상수 등을 선언하여 SQL과 절차형 언어에서 사용한다.
  3. 변수의 선언은 DECLARE절에서만 가능하다. 그리고 BEGIN섹션에서 새 값이 할당될 수 있다.
  4. IF문을 이용해 조건에 따라 문장들을 분기할 수 있다.
  5. LOOP문을 사용해 반복하게 만들 수 있다.
  6. 커서를 사용하여 여러 행을 검색 및 처리가 가능하다.

 

Oracle은 캐시를 사용한다.

 

PL/SQl 실행 절차 : 

이와 같이 client가 PL/SQL을 실행시키면 ORACLE SERVER에서 PL/SQL Statement가 PL/SQL을 실행시키고 SQL은 따로 SQL Statement가 실행시킨다.

 

PL/SQL 작성방법 : 

  1. 명령문의 종료는 ";"이다.
  2. CREATE구문을 사용했다면 실행을 위해 마지막에 "/"가 필요 합니다.
  3. 익명의 블록을 만들기 위해서는 DECLARE 구문으로, 이름있는 블록을 만들기 위해서는 CREATE구문을 사용한다.(DECLARE를 사용할 경우 이름을 따로 선언 안해도 된다. CREATE를 사용할 경우 CREATE [이름]과 같이 입력)
  4. 하나의 BEGIN에 대응되는 END구문은 하나이며 ";"으로 끝나야 하고, END다음에 CREATE 구문에서 사용된 함수나 프로시저의 이름을 써도 된다.
  5. DECLARE 선언된 익명블록인 경우 컴파일시 에러가 발생하면 에러 코드/메시지를 하단에 보여주지만 CREATE로 시작하는 함수나 프로시저는 오류 발생시 "SHOW ERRORS"로 확인해야한다.

BEGIN ~ END절은 필수로 사용해야 한다.

 

EX)

위와 같이 작성하면 1~10까지의 값이 나온다.

위의 예제에서 FOR x IN REVERSE로 작성하면 10~1까지의 값이 나온다.

 

PLSQL Block

  • PLSQL Program의 가장 기본 단위
  • 독립적으로 존재할 수 있으며(Annoymous Block), 다른 Object에 포함될 수 있다.
  • Procedure/Function 내부에서 사용될 때의 용도
    • 특정 행위의 Exception처리.
    • 프로그램 내에서 변수의 영향 범위를 최소화.
  • DECLARE에는 Variable, Function, Procedure, Cursor 등을 정의할  수 있음.
  • 프로그램에서 SELECT, INSERT, UPDATE, DELETE를 직접 사용할 수 있다.
    • Static SQL은 컴파일 시에 Parsing되고 구문 점검을 하므로 SQL수행 시 시간 단축, (특히, 빈번히 사용되는 SQL의 경우 효과가 큼)

 

PLSQL Function

  • 단일 값 또는 단일 Collection을 반환하는 것이 목적, SQL, PLSQL에서 모두 사용(단, SQL에서 지원하지 않는 Parameter나 Return일 경우 SQL에서 사용 불가)
  • Function 내부에서 Transaction을 Control(Commit, Rollback)할 경우 SQL에서 사용 불가

 

PLSQL Procedure

  • 반환 값이 없이 특정 작업을 수행한다.
  • Parameter는 IN/OUT/IN OUT을 지정할 수 있다.
  • Out Parameter에 Cursor를 지정하여 조회 결과를 외부에서 받을 수 있다.

 

PLSQL Package

  • Constant, Variable, Function, Procedure, Cursor 등의 묶음.
  • 모듈화, 캡슐화, 보안, 성능, 재사용성의 장점이 있다.
  • Package Spec과 Body로 구분된다.
  • Package Body에 정의된 Variable은 Session Scope이다.
  • Function/Procedure의 Overload가 가능하다.

 

PLSQL TYPE(=Class)

  • 사용자 정의 Data Type을 생성한다.
  • 객체 지향 프로그래밍을 지원한다.

 

'Develop > DBMS' 카테고리의 다른 글

PL/SQL기초3  (0) 2022.04.15
PL/SQL기초2  (0) 2022.04.14
Oracle 문법, 쿼리, 예제  (0) 2022.04.01