-
오라클 DB 용어, 명령문 정리08-PL/SQL비전공자 공부일기/:: DB - SQL 2019. 5. 28. 17:46
2019. 05. 28 필기
< PL/SQL >
PL/SQL이란?
: PL/SQL(Procedural Language extension to SQL) - SQL에 없는 변수 선언, 선택 처리
- 반복처리 기능을 제공하는 확장언어
- 오라클 DB 환경에서 실행되는 절차적인 데이터베이스 프로그래밍 언어
- PL/SQL에서는 프로그램 단위를 블록(block)이라 부르며, 애플리케이션 로직들을 작성■ 3부분의 블럭구조(영역)로 구성하여 선언
1. DECLARE 영역(선언부) : DECLARE 키워드
2. EXECUTABLE 영역(실행부) : *BEGIN 키워드 - 필수
3. EXCEPTION 영역(예외처리) : EXCEPTION 키워드
-- PL/SQL 블록에서 한 문장이 종료할 때마다 세미콜론(;) 사용
-- 마지막 영역은 END; 키워드로 마무리
-- PL/SQL 명령을 실행하기 위해 마지막에 반드시 /를 입력■ 메세지를 출력할 수 있도록 세션의 환경변수(SERVEROUTPUT)의 설정값 변경
>> SET SERVEROUTPUT ON;
■ 메세지를 출력하는 함수 -- PL/SQL의 실행부에서 호출하여 사용
>> [형식] DBMS_OUTPUT.PUT_LINE(출력대상)< 간단한 메시지 출력 PL/SQL 예시 > BEGIN DBMS_OUTPUT.PUT_LINE('HELLO ORACLE'); END; /
선언부 : 변수 선언 및 초기값 입력
>>[형식] 변수명 [CONSTANT] 자료형 [NOT NULL] [{:=|DEFAULT} 표현식];
-- 자바와는 반대로 변수를 앞에, 자료형을 뒤에 써준다.- CONSTANT : 변수에 저장한 초기값 고정 키워드 -- 자바의 FINAL 선언과 비슷
- NOT NULL : 변수에 null 저장 불가능
- := : '저장'의 의미. 즉, 대입연산자.
- 표현식 : 상수, 변수, 연산식, 함수에 의해 값을 제공하는 명령실행부 : 선언된 변수에 저장된 값 변경
>>[형식] 변수명 := 표현식;
< 여러 종류의 변수들 >
■ 스칼라 변수
: 자료형을 이용하여 변수 선언
-- 스칼라 변수를 선언하여 값을 저장하고 출력하는 PL/SQL 작성■ 레퍼런스 변수(참조변수)
: 다른 변수의 자료형 또는 테이블 컬럼의 자료형을 이용하여 변수 선언(선언부)
>>[형식] 변수명 {변수명%TYPE|테이블명.컬럼명%TYPE};※ 테이블 검색행의 컬럼값을 변수에 저장하는 명령(실행부)
>>[형식] SELECT 검색대상, ... INTO 변수명, ... FROM 테이블명 [WHERE 조건식];
-- 검색대상과 변수의 자료형 및 개수가 반드시 동일하게 선언되어야 함■ 테이블 변수
: 테이블 다중 검색행에 대한 컬럼값을 저장하기 위한 변수 - 배열
>>[형식] TYPE 테이블명 IS TABLE OF {자료형|변수명%TYPE|테이블명.컬럼명%TYPE}
[NOT NULL] [INDEX BY BINARY INTEGER];
테이블변수명 테이블명;
-- 변수명(첨자) 형식으로 테이블 변수의 요소값을 표현하여 사용
-- 변수를 선언하기 전에 테이블 변수에 대한 자료형(테이블 타입) 선언테이블 변수 사용방법
>>[형식] 변수명(첨자)■ 레코드 변수
: 테이블 행의 컬럼값들을 저장하기 위한 변수 -- 자바의 인스턴스와 비슷한 개념
-- 변수를 선언하기 전에 레코드 변수에 대한 자료형(레코드 타입) 선언
>>[형식] TYPE 레코드명 IS RECORD(필드명 {자료형|변수명%TYPE|테이블명.컬럼명%TYPE}
[NOT NULL] [{:=| DEFAULT} 표현식], ...);
레코드변수명 레코드명;레코드 변수 사용방법
>>[형식] 레코드변수명.필드명레코드 변수를 테이블의 행을 이용한 레퍼런스 타입으로 선언 가능
>>[형식] 레코드변수명 테이블명%ROWTYPE;■ 바인딩 변수
: 세션에서 사용할 수 있는 변수 -- 자바의 로컬변수와 비슷한 개념
>>[형식] VARIABLE 변수명 자료형;바인딩 변수에 저장된 값 출력
>>[형식] PRINT 바인딩변수명;■ IF 선택문
: 조건식에 의해 명령을 선택하여 실행하는 명령문
>>[형식] IF(조건식) THEN 명령; END IF;조건식의 결과가 거짓일 때도 명령 실행
>>[형식1]
IF(조건식) THEN 참명령;
ELSE 거짓명령;
END IF;>>[형식2]
IF(조건식) THEN 명령1;
ELSIF(조건식) THEN 명령2;
... [ELSE 명령];
END IF;■ CASE 조건문
: 변수에 저장된 값 또는 조건식을 이용하여 명령을 선택 실행하는 조건문
>>[형식]
CASE 변수명
WHEN 값1 THEN 명령1;
WHEN 값2 THEN 명령2;
...;
END CASE;>>[형식2]
CASE
WHEN 조건식1 THEN 명령1;
WHEN 조건식2 THEN 명령2;
...;
END CASE;■ LOOP 반복문
: 명령을 반복적으로 실행하는 명령
- BASIC LOOP
: 무한반복-선택문을 이용하여 EXIT 명령이 실행될 경우 반복문 종료
>>[형식] LOOP 명령 END LOOP;
-- 자바의 WHILE문과 유사- FOR LOOP
: 반복횟수가 정해져 있는 경우 사용하는 반복문
>>[형식] FOR INDEX_COUNTER [REVERSE] IN LOWER_BOUND..HIGH_BOUND LOOP 명령 END LOOP;
-- 자바의 FOR문과 유사>>[형식] FOR 레코드변수 IN (다중행 검색 명령) LOOP 명령 END LOOP;
- WHILE LOOP
: 반복의 횟수가 정해져 있지 않을 경우 사용되는 반복문
>>[형식] WHILE 조건식 LOOP 명령 END LOOP;■ 저장 프로시저(STORED PROCEDURE)
: PL/SQL 프로시저를 저장하여 필요한 경우 호출하여 기능을 저장
-- 쿼리문을 저장해놓고 필요할 때 불러와 쓸 수 있는 것 -- 자바의 메소드와 비슷
>>[형식] CREATE [OR REPLACE] PROCEDURE 프로시저명[(매개변수 [MODE] 자료형, ...)]
IS [변수선언부] BEGIN 명령 END;※ 현재 접속 사용자의 저장 프로시저 및 함수 목록 반환하는 딕셔너리 : USER_SOURCE
■ 저장 프로시저 호출
>>[형식] EXECUTE 프로시저명[(값 또는 변수, ...)];■ 컴파일러 로그 확인
>>[형식] SHOW ERROR;
-- 저장 프로시저 생성시 에러가 발생된 경우 확인해보자■ 저장 프로시저 삭제
>>[형식] DROP PROCEDURE 프로시저명;■ 매개변수 형태(MODE)
1) IN : 외부값을 저장 프로시저에 전달받아 사용할 목적의 매개변수 선언
2) OUT : 저장 프로시저의 내부값을 외부로 제공할 목적의 매개변수 선언
3) INOUT : IN 기능과 OUT 기능을 모두 제공하는 매개변수 선언저장함수
: 저장 프로시저와 동일한 역할이되, 반환값을 제공하는 함수
-- 저장함수는 SQL 명령에 포함하여 사용 가능저장함수 생성
>>[형식] CREATE [OR REPLACE] FUNCTION 함수명 [(매개변수 [MODE] 자료형, ...)] RETURN 자료형
IS [변수선언부] BEGIN 명령 END;
-- 저장함수에서는 반드시 RETURN 명령으로 값을 반환해야 함
-- FUNCTION과 PROCEDURE의 차이점
- FUNCTION : 값을 반환
- PROCEDURE : 값을 반환하지 않음커서(CURSOR)
: 테이블의 검색행을 처리하기 위한 기능을 제공
1. 묵시적 커서 : 검색 결과가 단일행인 경우 처리하기 위한 커서
2. 명시적 커서 : 검색 결과가 다중행인 경우 처리하기 위한 커서명시적 커서의 선언 및 사용 방법
>>[형식]
DECLARE
CURSOR 커서명 IS 검색명령;
BEGIN
OPEN 커서명;
FETCH 커서명 INTO 변수명;
CLOSE 커서명;
END;- FOR LOOP 구문을 이용할 경우 커서에 대한 OPEN,FETCH,CLOSE 구문 미사용
- 커서를 서브쿼리 형식으로 표현하여 사용할 수도 있다.트리거(TRIGGER)
: 특정 SQL 명령이 실행될 경우 PL/SQL 명령으로 자동 실행되는 기능 제공트리거 생성
>>[형식] CREATE [OR REPLACE] TRIGGER 트리거명 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 테이블명
[FOR EACH ROW] [WITH 조건식] BEGIN 명령 END;
- FOR EACH ROW : 생략된 경우 문장 레벨 트리거로 생성하며, 선언된 경우 행 레벨 트리거로 생성
- 문장 레벨 트리거 : 이벤트 DML 명령이 실행되면 트리거 명령이 한번만 실행
- 행 레벨 트리거 : 이벤트 DML 명령이 실행되면 트리거 명령이 여러번 실행- NEW.column : 저장행 또는 변경행의 컬럼 표현
- OLD.column : 삭제행 또는 변경행의 컬럼 표현트리거 삭제
>>[형식] DROP TRIGGER 트리거명;'비전공자 공부일기 > :: DB - SQL' 카테고리의 다른 글
JDBC - ResultSet (0) 2019.05.31 오라클 DB 정리09-JDBC (2) 2019.05.29 오라클 DB 용어, 명령문 정리07- 시퀀스, 인덱스, 동의어, 권한, DCL (0) 2019.05.27 오라클 DB 용어, 명령문 정리06 -테이블 명령어, 뷰, 인라인뷰 (1) 2019.05.24 오라클 DB 용어, 명령문 정리05- CREATE 명령어, CONSTRAINT 제약조건 (3) 2019.05.23