데이터베이스/oracle
PL/SQL 기초
asy0239
2021. 1. 7. 17:49
Pl/SQL
1. PL/SQL이란?
PL/SQL(Procedural Language extension to SQL) 이란 뜻을 가지고 있다.
SQL을 확장한 절차적 언어이다, SQL 문장에서 변수정의, 조건처리(if), 반복처리(loop, while, for) 등을 지원한다(오라클 자체내에 내장되어있는 Procedure Language)
DECLARE 문을 이용하여 정의되고 선언문의 사용은 선택사항이다.
PL/SQL 문은 블록 구조로 구성되어있고 PL/SQL 자신이 컴파일 엔진을 가지고 있다.
2. PL/SQL 장점 및 특징
- BLOCK 구조로 다수의 SQL문을 한번에 오라클 DB 로 보내서 처리하므로 수행 속도를 향상시킬수 있음
- BLOCK 구조로 구성되어 모듈화가 가능
- 큰 블록안에 소블럭을 위치 시킬 수 있다
- 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환 할 수 있다.
- IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
- PL/SQL 은 Oracle 에 내장되어 있으므로 Oracle과 PL/SQL 을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.
3. PL/SQL 구조
블록의 기본적인 구성
- 선언부(DECLARE) : 모든 변수나 상수를 선언하는 부분
- 실행부(BEGIN) : 제어문, 반복문, 함수 정의 등의 로직을 기술
- 예외처리부(EXCEPTION) : 실행 도중 에러 발생 시 해결하는 문장들을 기술
선언부와 예외처리부는 경우에 따라 생략 가능 하지만 실행부는 반드시 있어야 한다
DECLARE, BEGIN, EXCEPTION 과 같은 예약어들은 ;(세미콜론) 으로 끝나지 않지만 나머지 명령어들은 ;(세미콜론)으로 끝난다.
화면 출력 기능 활성화
SET SERVEROUTPUT ON;
기본 OFF 로 설정되어 있어서 설정을 변경해주어야 한다.
에러 출력
SHOW ERRORS;
블록의 유형
- Anonymous PL/SQL Block(익명 블록) : 일회성으로 사용
- Stored PL/SQL Block (저장된 블록) : 서버에 파싱해서 저장해 놓고 주기적으로 사용
서버프로그램, 프로그램 단위라고도 하며, 스키마를 구성하는 오브젝트로 파싱된 후 오라클 서버 내부에 저장되거나 오라클 툴 안에 라이브러리 형태로 저장됨
4. 기본 문법
(1) PL/SQL 에서의 SELECT 문장 사용
create [or replace] Procedure [Procedure_name]
(argument1 [in|out|inout] data_type1,
argument2 [in|out|inout] data_type2,
...
)
is [as]
...
begin
...
end;
/ > Complie
-- 기본 문법
drop Procedure [Procedure_name];
-- 프로시져 삭제
-- ex) emp 테이블에서 empno 가 10인 사원의 사번과 이름을 출력
DECLARE -- 선언부 시작
vno NUMBER(4);
vname VARCHAR2(10); -- 데이터베이스에서 수행된 결과 값을 저장할 변수 두개 선언, 자료형은 데이터베이스에 불러올 값의 자료형과 같아야함, 보편적으로 emp.empno%TYPE 으로 사용함
BEGIN -- 실행부 시작
SELECT empno, ename INTO vno, vname -- 데이터베이스에서 수행된 결과값을 변수에 저장
FROM emp
WHERE empno=10;
DBMS_OUTPUT.PUT_LINE(vno||' '||vname); -- 두 변수에 저장된 값 출력
END; -- 실행부 종료
/ -- 작성된 PL/SQL 블록을 실행
-- ex) emp 테이블을 사용해 사원번호를 입력받아 사원의 사번과 이름을 출력
DECLARE
vno emp.empno%TYPE;
vname emp.ename%TYPE;
BEGIN
SELECT empno, ename into vno, vname
FROM emp
WHERE empno='&empno'; -- 사용자에게 값을 입력 받아서 변수에 할당 할 때 '&(앰퍼센트)' 를 사용
DBMS_OUTPUT.PUT_LINE(vno||' '||vname);
END;
/
(2) PL/SQL 에서의 DML 문장 사용
1. INSERT
-- 테스트용 테이블
CREATE TABLE PL_TEST
(
eno number,
ename varchar2(10)
);
-- 시퀀스 생성
create sequence pl_seq;
-- insert 수행
begin
insert into pl_test
values(pl_seq.nextval,'test');
end;
/
/
select *
from pl_test;
commit;