<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>
커서를 종료하지 않으면 현재 상태를 계속유지하고 있기 때문에 이전에 실행한 특정 상황이후 부터 다시 시작할 수 있다.
아래 샘플 코드를 보면 이해가 쉽다.
패키지를 내부의 프로시져에서 패치를 20개씩만 할 경우, 이전에 실행한 위치를 기억하여 다음 실행위치부터 자동으로 실행된다.
create or replace package cur_pkg
is
cursor c_emp is
select employee_id from employees;
procedure open;
procedure close;
procedure printnext_20;
end;
/
create or replace package body cur_pkg is
procedure open
is
begin
if not c_emp%isopen then
open c_emp;
end if;
end open;
------------------------
procedure close
is
begin
if c_emp%isopen then
close c_emp;
end if;
end close;
------------------------
procedure printnext_20
is
v_emp_id number;
begin
for i in 1..20
loop
fetch c_emp into v_emp_id;
dbms_output.put_line(v_emp_id);
if c_emp%notfound then
dbms_output.put_line('no more');
close c_emp;
exit;
end if;
end loop;
end printnext_20;
end cur_pkg;
간단하게 id 번호를 가져와서 화면에 출력하는 패키지 이다. 20개씩 실행하지만 커서를 종료하지 않아서 출력결과는 다음과 같다.
begin
cur_pkg.open;
cur_pkg.printnext_20;
end;
/*
한번할때마다 20개씩 출력한다. 더이상 패치할 것이 없으면 종료됨.
패키지에서만 유요한 코드. 프로시져에서는 동작안함.
100
101
102
....
204
205
206
206
no more
*/
전체 출력화면은 아래와 같다. >>> "더보기" 클릭
더보기
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
206
no more
더이상 출력할 값이 없으면 자동 종료되지만 임의로 중간에 종료하고 싶으면 아래 코드를 실행하면 된다.
begin
cur_pkg.close;
end;
'Database > PLSQL' 카테고리의 다른 글
057 - [Oracle PL/SQL] Oracle package - DBMS_OUTPUT (0) | 2024.03.12 |
---|---|
056 - [Oracle PL/SQL] Package - index by tables in packages (0) | 2024.03.07 |
054 - [Oracle PL/SQL] Package - Persistent State (0) | 2024.03.07 |
053 - [Oracle PL/SQL] Package - Forward Declaration (0) | 2024.03.06 |
052 - [Oracle PL/SQL] Package - Overloading (standard package) (0) | 2024.03.06 |