관리 메뉴

프로그래밍 삽질 중

SQL PL/SQL 설명 및 예제 본문

과거 프로그래밍 자료들/SQL(Oracle)

SQL PL/SQL 설명 및 예제

평부 2021. 3. 23. 23:38

※ PL/SQL

- 데이터베이스 응용 프로그램을 작성 시 사용하는 오라클의 SQL 전용 언어

- SQL문에 변수, 제어, 입출력 등 기능 추가하여 SQL 내 처리하기 어려운 문제 해결

 

※ PL/SQL 기본단위

1) DECLARE(선언부) : 실행에 사용될 변수, 상수, 커서 등 선언

2) BEGIN(실행부) : WHRJSANS, QKSQHRANS, DML 함수 등 정의

3) EXCEPTION(예외 처리부) : PL/SQL 실행 도중 발생하는 오류 해결

 

 

※ 변수의 자료형

- 특정 테이블의 열의 자료형이나 하나의 행 구조를 참조하는 자료형

- %TYPE : 열 참조

- %ROWTYPE : 행 참조 

- 변수이름 테이블이름.열이름%TYPE

 

※ 예외처리

- 예외 발생 시 메세지를 입력자가 원하는 대로 바꿈

- EXCEPTION : 예외 처리 영역

 

[예제들] - PL/SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
--HELLO PL/SQL 출력
SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL');
END;
 
 
-- 기본 변수 선언과 사용
-- 변수이름 자료형:= 값 또는 표현식;
DECLARE 
    V_EMPNO NUMBER(4):=7788;
    V_ENAME VARCHAR2(10);
BEGIN
    V_ENAME:='CONAN';
    DBMS_OUTPUT.PUT_LINE('V_EMPNO:' || V_EMPNO);
    DBMS_OUTPUT.PUT_LINE('V_ENAME:' || V_ENAME);
END;
 
 
-- 상수 정의하기 : CONSTANT
DECLARE 
    V_TAX CONSTANT NUMBER(1):=5;
BEGIN
    DBMS_OUTPUT.PUT_LINE('V_TAX:' || V_TAX);
END;
 
 
--변수의 기본값 지정하기 : DEFAULT 
DECLARE
    V_DEPTNO NUMBER(2DEFAULT 10;
BEGIN
    DBMS_OUTPUT.PUT_LINE('V_DEPTNO:' || V_DEPTNO);
END;
 
 
--변수에 NULL값 저장 막기 : NOT NULL
DECLARE 
    V_DEPTNO NUMBER(2NOT NULL:=10;
BEGIN
    DBMS_OUTPUT.PUT_LINE('V_DEPTNO:' || V_DEPTNO);
END;
 
 
-- 상수 정의하기
DECLARE 
    V_TAX CONSTANT NUMBER(1):=5;
BEGIN
    DBMS_OUTPUT.PUT_LINE('V_TAX:' || V_TAX);
END;
 
 
------------------------------------------------------
 
--변수의 자료형 1) (열 참조 : %TYPE, 행 챀조 : %ROWTYPE)
DECLARE
     V_DEPTNO DEPT.DEPTNO%TYPE:=50;
BEGIN
    DBMS_OUTPUT.PUT_LINE('V_DEPTNO:' || V_DETPNO);
END;
 
 
--변수의 자료형 2)
DECLARE
    V_DEPT_ROW DEPT%ROWTYPE;
BEGIN
    SELECT DEPTNO, DNAME, LOC INTO V_DEPT_ROW
    FROM DEPT
    WHERE DEPTNO = 40;
    DBMS_OUTPUT.PUT_LINE('DEPTNO :' || V_DEPT_ROW.DEPTNO);
    DBMS_OUTPUT.PUT_LINE('DNAME :' || V_DEPT_ROW.DNAME);
    DBMS_OUTPUT.PUT_LINE('LOC :' || V_DEPT_ROW.LOC);
END;
 
 
 
-- CASE 조건문
DECLARE 
    ismale NUMBER(1);
BEGIN 
    ismale:=&성별;
 
    CASE ismale
        WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('남자');
        WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('여자');
        ELSE DBMS_OUTPUT.PUT_LINE('Third Thing');
    END CASE;
END;
 
 
 
--LOOP(1)
DECLARE
    i NUMBER:=0;
BEGIN
    LOOP
    DBMS_OUTPUT.PUT_LINE(i);
    IF i>10 THEN
        EXIT;
    END IF;
    i:=i+1;
    END LOOP;
END;
 
--LOOP(2)
DECLARE
    i NUMBER:=0;
BEGIN
    LOOP
    DBMS_OUTPUT.PUT_LINE(i);
    EXIT WHEN i>10;
    i:=i+1;
    END LOOP;
END;
 
 
--WHILE
DECLARE
    i NUMBER:=0;
BEGIN
    WHILE i<10 LOOP
    DBMS_OUTPUT.PUT_LINE(i);
    i:=i+1;
    END LOOP;
END;
 
 
--FOR
DECLARE 
    i NUMBER:=0;
BEGIN
    FOR i IN REVERSE 1..10 LOOP
    DBMS_OUTPUT.PUT_LINE(i);
    END LOOP;
END;
 
 
--예외처리
DECLARE 
    V_NUM NUMBER;
BEGIN
    V_NUM:=10/&분모;
EXCEPTION
    WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('0이외의 다른 값을 입력하시오');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('딴 오류 발생..');
END;
 
SELECT * FROM SALGRADE;
 
cs