Oracle&DB

[DB][Oracle] PL/SQL 개념정리

Code GGOON 2019. 3. 18. 08:11
반응형



Oracle이 자체 DBMS를 위해 표준 SQL을 확장해서 개발한 쿼리용 프로그램 언어로 절차적인 언어(Procedural Language)이다.



  • - PL/SQL : Procedural Language extention to SQL
  • PL/SQL 프로그램의 종류 > 1. Procedure, 2. Function, 3. Trigger
  • - 장점 : 프로그래밍 언어처럼 "예외처리"가 가능하며, 디버깅 기능을 제공
  • - 기본 구조로 '블럭'단위로 실행된다.  블럭은 'BEGIN'로 시작해서 'END'로 끝남.
  • - IF문, Loop문 사용가능
  • 주석기능, 단이행은 "-- 내용",  긴 문장은 " /*  ~  */ " 사용한다
  • PUT_LINE()  프로시저로 화면출력을 지원한다 
    ex) DBMS_OUTPUT.PUT_LINE('Hellow World~');

[PL/SQL] 구조


- DECLARE  (선언 : 변수/상수(Construct)/커서 선언)

- BEGIN  (실행 : SQL문, 제어문, 반복문, 함수 등 제어 로직구현)

- EXCEPTION  (예외 처리)

- END (종료 구분  반드시 ";"으로 끝을 알려야함)


[PL/SQL] 종류


- 익명 블럭 : 식별자(이름)없는 블럭문

- 명시적 블럭 : DB의 객체로 사용되는 블럭문

                    (프로시저, 함수, 패키지(하나 이상의 프로시저/함수 묶음), 트리거)


[PL/SQL] 변수


- 구조

    identifier  [constant]  datatype   [ not null ]    [ := (default expression)] ;

    식별자     상수선언   변수타입   null가능유무  값

    ex) DECLARE  CODE  VARCHAR2(10);

    ex) DECLARE  CODE  VARCHAR2(10) := '2019D00001';

    ex) DECLARE  CODE  VARCHAR2(10) DEFAULT '2019D00001'


- 팁 : 변수는 하나의 값 이상 가질 수 있다(배열), 예: 테이블의 ROW값 들

    ex)

        -- 테이블 전체 row를 값으로 가지는 경우 ( %ROWTYPE )

        DECLARE

            DATA   EMP%ROWTYPE;

        BEGIN

            SELECT   *   INTO  DATA

            FROM    EMP

            WHERE   EMPNO = '1234';

            DBMS_OUTPUT.PUT_LINE(DATA.NAME || ', ' || DATA.DEPT_NO);

        END;


        -- 테이블의 특정 컬럼만 지정하는 경우 ( %TYPE )

        DECLARE

            V_NAME   EMP.NAME%TYPE;

            V_DEPTNO   EMP.DEPTNO%TYPE;

        BEGIN

            SELECT   A.NAME, A.DEPTNO  INTO  V_NAME, V_DEPTNO

            FROM    EMP A

            WHERE   EMPNO = '1234';

            DBMS_OUTPUT.PUT_LINE(V_NAME || ', ' || V_DEPTNO);

        END;


- Oracle에서 값의 대입 연사자로 ":="를 사용한다, '='는 '같다'를 의미한다.



~ 작성중 ............



반응형

'Oracle&DB' 카테고리의 다른 글

Oracle 숫자형 확인 사용자 함수 IS_NUMBER(IN_STR)  (0) 2019.11.27
Oracle 권한부여  (0) 2019.06.29
Oracle 'FLASHBACK' 테이블 데이터 복구  (0) 2019.05.13