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~');
- 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에서 값의 대입 연사자로 ":="를 사용한다, '='는 '같다'를 의미한다.
~ 작성중 ............