[ PL/SQL ]
- 구조적인 SQL언어와 달리 SQL을 절차적인 방식에 의해 사용하도록 설계한 언어
1) PL/SQL의 구조
BEGIN -- 실행(SELECT,DML,..)
EXCEPTION -- 예외처리
END;
/
예1)
SQL> DECLARE
2 I_MSG VARCHAR2(100); -- 변수선언
3 BEGIN
4 I_MSG:='HELLO'; -- 값대입
5 DBMS_OUTPUT.PUT_LINE('I_MSG:' || I_MSG); -- 화면출력
6 END;
7 /
[결과]
I_MSG:HELLO
2 VEMPNO NUMBER(4);
3 VENAME VARCHAR2(20);
4 VDEPTNO NUMBER(4);
5 VSAL NUMBER(4);
6 BONUS NUMBER(10);
7 BEGIN
8 SELECT EMPNO,ENAME,DEPTNO,SAL INTO VEMPNO,VENAME,VDEPTNO,VSAL
9 FROM EMP
10 WHERE EMPNO=7369;
11 IF(VDEPTNO=10) THEN
12 BONUS:=VSAL*0.1;
13 ELSIF(VDEPTNO=20) THEN
14 BONUS:=VSAL*0.2;
15 ELSIF(VDEPTNO=30) THEN
16 BONUS:=VSAL*0.3;
17 END IF;
18 DBMS_OUTPUT.PUT_LINE('사원번호 급여 부서번호 보너스');
19 DBMS_OUTPUT.PUT_LINE(VEMPNO ||' '||VSAL||' '||VDEPTNO||' '||BONUS);
20 END;
21 /
사원번호 급여 부서번호 보너스
7369 800 20 160
[ 저장 프로시져(Stored Procedure) ]
- 특정한 처리를 수행하는 PL/SQL 서브프로그램. 파라미터를 받아서 특정 작업을 수행한다.
- 형식)
IS
변수선언;
..
BEGIN
실행문;
..
END;
/
예)-- 연습용 테이블
(
NUM NUMBER PRIMARY KEY,
NAME VARCHAR2(20),
PHONE VARCHAR2(15),
ADDR VARCHAR2(20)
);
예1) 프로시져만들기
(
NUM NUMBER, -- 파라미터
NAME VARCHAR2,
PHONE VARCHAR2,
ADDR VARCHAR2
)
IS
BEGIN
INSERT INTO MEM
VALUES(NUM,NAME,PHONE,ADDR);
END;
/
-- 프로시져 오류보기
-- 프로시져 수행
예2)
(
NUM MEM.NUM%TYPE,
NAME MEM.NAME%TYPE,
PHONE MEM.PHONE%TYPE:='010',-- 파라미터값이없으면 디폴트값으로 채워짐
ADDR MEM.ADDR%TYPE:='서울'
)
IS
BEGIN
INSERT INTO MEM
VALUES(NUM,NAME,PHONE,ADDR);
COMMIT;
END;
/
-- 예제테이블
(
HAKBUN NUMBER(10) PRIMARY KEY,
KOR NUMBER(3),
ENG NUMBER(3),
TOT NUMBER(3),
HAKJUM CHAR(2)
);
SQL> INSERT INTO HAKSA(HAKBUN,KOR,ENG) VALUES(2,80,70);
-- 학번을 파라미터로 받아서 총점과 학점을 계산해주는 저장 프로시져
IS
HAK HAKSA.HAKJUM%TYPE;
SUM1 HAKSA.TOT%TYPE;
AVG1 NUMBER;
BEGIN
SELECT (KOR+ENG) INTO SUM1
FROM HAKSA
WHERE HAKBUN=NUM;
AVG1:=SUM1/2; --평균구하기
-- IF절 이용해서 학점구하기
IF(AVG1>=90) THEN
HAK:='A';
ELSIF(AVG1>=80) THEN
HAK:='B';
ELSIF(AVG1>=70) THEN
HAK:='C';
ELSE
HAK:='F';
END IF;
UPDATE HAKSA
SET TOT=SUM1
, HAKJUM=HAK -- 계산된 데이터로 수정하기
WHERE HAKBUN=NUM;
COMMIT;
END;
/
-- 프로시져 실행하기
[ 사용자 정의 함수(Stored Function) ]
- 사용자가 만든 함수이며 어떤 연산을 수행한뒤 결과값을 반환한다.
형식)
RETURN 리턴형
IS
변수선언;
..
BEGIN
실행문장;
..
RETURN 값;
END;
/
예) 입력받은 값으로부터 10%의 세율을 구하는 함수
RETURN NUMBER
IS
VAL NUMBER;
BEGIN
VAL:=P_VALUE*0.1; -- 세율구하기
RETURN VAL; --세율반환하기
END;
/
TAX(3000)
----------
300
## IF문 형식
실행문;
ELSE
실행문;
END IF;
Q1) 사원의 급여를 파라미터로 받아서 5000이상이며 15%에 해당하는 금액을 리턴하고 5000미만이면 10%를 리턴하는 함수 작성
CREATE FUNCTION MYTAX(P_VAL NUMBER) RETURN NUMBER
IS
V_RESULT NUMBER;
BEGIN
IF(P_VAL>=5000) THEN
V_RESULT:=P_VAL*0.15;
ELSE
V_RESULT:=P_VAL*0.1;
END IF;
RETURN V_RESULT;
END;
/
MYTAX(6000)
-----------
900
Q2) 파라미터로 사원번호를 받아서 근무하는 부서명을 반환하는 함수작성
RETURN VARCHAR2 -- 반환타입
IS
V_RESULT VARCHAR2(20); --부서명저장할 변수
BEGIN
SELECT D.DNAME
INTO V_RESULT
FROM EMP E,
DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO=NUM;
RETURN V_RESULT;
END;
/
-- FUNCTION호출해보기
'DBMS > 오라클 PLSQL' 카테고리의 다른 글
2. 기본 (0) | 2015.02.13 |
---|---|
1. PL/SQL 개요 (0) | 2015.02.11 |
프로시져 실행 샘플 - OUT 값이 여러행인 경우 (0) | 2015.01.21 |