728x90
더보기
Day34. 230616
패키지
- 오라클 데이터베이스에 저장되어 있는 서로 관련있는 PL/SQL 프로지져와 함수들의 집합
커서
커서란?
특정 SQL 문장을 철한 결과를 담고있는 영역
- 암시적 커서 : 모든 DML과 PL/SQL SELECT문에 대해 선언된다.
- 명시적 커서 : 프로그래머에 의해 선언되며 이름이 있는 커서이다.
CURSOR 커서명 IS
select문;
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
|
CREATE OR REPLACE procedure dept_proc(
p_deptno IN dept.deptno%TYPE
)
IS
--커서선언
CURSOR cur_dept_avg IS
select d.dname, d.deptno, count(e.empno), round( avg(e.sal),0)
from emp e, dept d
where e.deptno=d.deptno
AND
d.deptno=p_deptno
group by d.dname, d.deptno;
--변수선언
v_dname dept.dname%TYPE;
v_deptno dept.deptno%TYPE;
v_cnt NUMBER:=0;
v_avg_sal NUMBER:=0;
BEGIN
--커서open
OPEN cur_dept_avg;
--커서 FETCH
FETCH cur_dept_avg INTO v_dname, v_deptno, v_cnt,v_avg_sal;
IF cur_dept_avg%FOUND THEN
DBMS_OUTPUT.PUT_LINE('--결과를 출력합니다--');
DBMS_OUTPUT.PUT_LINE('v_dname: ' || v_dname);
DBMS_OUTPUT.PUT_LINE('v_deptno: ' || v_deptno);
DBMS_OUTPUT.PUT_LINE('v_cnt: ' || v_cnt);
DBMS_OUTPUT.PUT_LINE('v_avg_sal: ' || v_avg_sal);
END IF;
IF cur_dept_avg%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('데이터가 없습니다');
END IF;
--커서close
CLOSE cur_dept_avg;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('예외가 발생했어요: ' || SQLERRM);
END;
DECLARE
CODE_NUM CONSTANT NUMBER := 100;
|
cs |
실행) exec dept_proc(100);
->결과. 데이터가 없습니다.
exec dept_proc(10);
728x90
'개발 수업 > DB' 카테고리의 다른 글
MySQL설치, 환경설정 (0) | 2023.06.27 |
---|---|
[Oracle] DB EXPORT (0) | 2023.06.27 |
[PL/SQL] PL/SQL구성요소(상수),PL/SQL 제어문 (0) | 2023.06.16 |
DB, JAVA 연동 (0) | 2023.06.15 |
[PL/SQL] 예외(Exception),pragma (0) | 2023.06.15 |