PL/SQL (Procedual Language / SQL)
SQL만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기 위해 오라클에서 제공하는 프로그램이 언어.
일반 프로그래밍 언어적인 요소들을 다 가지고 있으며, 뎅터베이스 업무를 처리하기 위해 최적화 되어 있음.
변수, 조건 처리 , 반복 처리 등 다양한 기능을 사용할 수 있음.
1) 선언부 (declare)
모든 변수나 상수를 선언하는 부분
2) 실행부(excutable - begin)
실제 로직이 실행되는 부분
제어문(조건문), 반복문 등의 로직을 기술하는 부분
3) 예외처리부(exception)
실행 도중 예외가 발생 시 해결하기 위한 명령을 기술하는 부분.
**선언부와 예외처리부는 생략이 가능하지만, 실행부는 반드시 기술해야 함.
주의사항
1) 기본 구조 키워드 뒤에는 세미콜론을 붙이지 않는다.
2) 블럭의 각 부분에서 실행해야 하는 문장 끝에는 세미콜론을 붙인다.
3) begin ~ end (실행부) 밑에는 반드시 "/"를 붙여 주어야 한다.
*/
--화면에 출력 기능을 활성화
set serveroutput on;
begin
dbms_output.put_line('Hello, PL/SQL!!!');
end;
--선언부에서 변수 선언
1) 스칼라 자료형
변수명 자료형(크기);
declare
v_empno number(4);
v_ename varchar(20);
begin
v_empno := 7788;
v_ename := 'ADAMS';
dbms_output.put_line('v_empno >>> ' || v_empno);
dbms_output.put_line('v_ename >>> ' || v_ename);
end;
/
declare, begin 에는 ;이 붙지 않는다.
변수값 초기화는 := 로 한다.
dbms_ouput.put_line() 으로 출력하고 || 로 변수값을 넣는다.
2) 레퍼런스 자료형
변수명 테이블명.컬럼명%type;
- 테이블에 정의된 컬럼의 자료형과 크기를 모두 파악하고 있다면 별 문제가 없겠지만, 대부분은 그렇지 못하기 때문에 오라클에서는 레퍼런스 변수를 제공해 줌.
1
2
3
4
5
6
7
8
9
10
|
declare
v_empno emp.empno%type := 7693;
v_ename emp.ename%type;
begin
v_ename := 'SCOTT';
dbms_output.put_line('v_empno >>> ' || v_empno);
dbms_output.put_line('v_ename >>> ' || v_ename);
end;
/
|
cs |
3) rowtype
변수명 테이블명%rowtype;
테이블의 모든 컬럼을 한꺼번에 저장하기 위한 변수로 선언하는 방법
1
2
3
4
5
6
7
8
9
10
11
|
declare
emp_row emp%rowtype;
begin
select * into emp_row
from emp
where empno = 7698;
dbms_output.put_line(emp_row.empno|| ' ' || emp_row.ename || ' ' || emp_row.job
|| ' ' || emp_row.sal || ' ' || emp_row.deptno);
end;
/
|
cs |
**조건 제어문
특정 조건식을 통해 상황에 따라 실행할 내용을 달리하는 방식의 명령어.
1. if 조건문
1) if ~ then
형식)
if 조건식 then
조건식이 참인 경우 실행문;
end if;
2) if ~ then ~ else
if 조건식 then
조건식이 참인 경우;
else
조건식이 거짓인 경우;
end if;
3) if ~ then ~ elsif
if 조건식1 then
조건식1이 참인 경우;
elsif 조건식2 then
조건식1이 거짓이고 조건식2가 참인 경우;
elsif 조건식3 then
조건식1,2가 거짓이고, 조건식 3이 참인 경우;
else
나머지인 경우;
end if;
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
|
--1) if ~ then ~ else 예제
declare
v_number number(3) := 15;
begin
if v_number >= 10 then
dbms_output.put_line('v_number' || '는 홀수입니다.');
else
dbms_output.put_line('v_number' || '는 짝수입니다.');
end if;
end;
/
--3) if then elsif
declare
v_avg number(5,2) := 898.12;
begin
if v_avg >= 90 then
dbms_output.put_line('A학점입니다.');
elsif v_avg >= 80 then
dbms_output.put_line('B학점입니다.');
elsif v_avg >= 70 then
dbms_output.put_line('C학점입니다.');
elsif v_avg >= 60 then
dbms_output.put_line('D학점입니다.');
else
dbms_output.put_line('F학점입니다.');
end if;
end;
/
|
cs |
2) case
형식 1)
case 비교 기준
when 값1 then
값1일 때 수행문;
when 값2 then
값2일 때 수행문;
when 값3 then
값3일 때 수행문;
else
나머지일 때 수행문;
end case;
형식 2)
case
when 조건식1 then
조건식1일 때 수행문;
when 조건식2 then
조건식2일 때 수행문;
when 조건식3 then
조건식3일 때 수행문;
else
나머지일 때 수행문;
end case;
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
|
--1) 단순 case 예제
declare
v_score number(3) := 92;
begin
case trunc(v_score / 10)
when 10 then
dbms_output.put_line('A학점입니다');
when 9 then
dbms_output.put_line('A학점입니다');
when 8 then
dbms_output.put_line('B학점입니다');
when 7 then
dbms_output.put_line('C학점입니다');
when 6 then
dbms_output.put_line('D학점입니다');
else
dbms_output.put_line('F학점입니다');
end case;
end;
/
-- 2) 검색 case 예제
declare
v_score number(3) := 88;
begin
case
when v_score >= 90 then
dbms_output.put_line('A학점입니다.');
when v_score >= 80 then
dbms_output.put_line('B학점입니다.');
when v_score >= 70 then
dbms_output.put_line('C학점입니다.');
when v_score >= 60 then
dbms_output.put_line('D학점입니다.');
else
dbms_output.put_line('F학점입니다.');
end case;
end;
/
|
cs |
** 반복 제어문의 종류 **
1) 기본 loop
2) while loop
3) for loop
** 반복문의 반복 수행을 종료시키는 명령어
1) exit
수행중인 반복을 종료
2) exit - when
반복 종료를 위한 조건식을 만족하면 반복 종료
3) continue
수행중인 반복의 현재 주기를 스킵.
4) continue - when
특정 조건식을 만족하면 반복 주기를 스킵
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
|
--1) 기본 예제
declare
v_num number(3) := 1;
v_sum number(5) := 0;
begin
loop
v_sum := v_sum + v_num;
v_num := v_num + 1;
if v_num > 100 then
exit;
end if;
end loop;
dbms_output.put_line('1부터 100까지의 합 : ' || v_sum);
end;
/
--2) exit - when
declare
v_score number(3) := 1;
begin
loop
dbms_output.put_line('v_score >>> ' || v_score);
v_score := v_score + 1;
exit when v_score > 100;
end loop;
end;
/
-- 3) while loop 예제
declare
v_number number(3) := 1;
begin
dbms_output.put_line('while loop 반복문');
while v_number <= 100 loop
dbms_output.put_line('v_number >>> ' || v_number);
v_number := v_number + 1;
end loop;
end;
/
-- 4) for 예제
declare
v_sum number(6) := 0;
begin
for i in 1 .. 100 loop
v_sum := v_sum + i;
end loop;
dbms_output.put_line('1 ~ 100까지의 합 >>> ' || v_sum);
end;
/
--키보드로 값 입력 받기
declare
v_num1 number(3);
v_num2 number(3);
begin
v_num1 := '&num1';
v_num2 := '&num2';
dbms_output.put_line
(v_num1 || ' + ' || v_num2 || ' = ' || (v_num1 + v_num2));
end;
/
|
cs |
** 데이터 정의어 (DDL : Data Definition Language)
- 데이터의 관리 및 보관을 위해 다양한 객체를 제공하는데 이러한 객체를 새로 만들거나 기존에 존재하던 객체를 변경하거나 삭제하는 등의 기능을 수행하는 명령어
주의사항
제이터 정의어를 실행하면 자동으로 commit됨.
정의어 종류
1) create : 객체를 생성
2) alter : 객체를 수정
3) drop : 객체를 삭제
기타
rename 기존 테이블 이름 to 새로운 테이블 이름 : 테이블 이름 변경
truncate table 테이블이름 : 테이블 데이터 삭제
'국기훈련과정 > Oracle SQL' 카테고리의 다른 글
06. JAVA에서 쿼리문 사용하기 (0) | 2021.09.07 |
---|---|
05. JAVA와의 연동 (0) | 2021.09.07 |
03. (0) | 2021.09.06 |
02. (0) | 2021.09.03 |
01. (0) | 2021.09.02 |