확인문제) 다음과 같은 t1 테이블이 주어져 있다. t1 테이블의 현재 행의 수가
m 이라고 할 때 숫자 n을 입력 받아 m+1 부터 m+n 까지의 값을 차례로
t1 테이블에 추가하는 프로시저를 작성하세요.
<Table t1>
NULL값 2건 입력 NO n := 3 NO
==> ---------- ==> ----------
(null)
(null)
1
2
3
NULL값 2건 입력 n := 2 NO
==> ==> ----------
(null)
(null)
1
2
3
(null)
(null)
4
5
drop table t1 purge;
create table t1 (no number);
create or replace procedure append_num (n number, opt char default null)
is
v_row_num number; -- t1 테이블의 현재 행의 수
begin
/*
* 테이블 리셋: 테이블 삭제 및 생성
* 두번째 파라미터가 'r' 또는 'R' 일 경우 테이블 리셋
*/
if UPPER(opt) = 'R' then
begin
execute immediate 'drop table t1 purge';
p('t1 테이블을 삭제하였사옵니다, 주인님!');
exception
when others then
p('t1 테이블이 없어 삭제할 수 없사옵니다, 주인님!');
end;
execute immediate 'create table t1 (no number)';
p('t1 테이블을 생성하였사옵니다, 주인님!');
end if;
-- t1 테이블의 현재 행 수 구하기
select nvl(max(no), 0) into v_row_num from t1;
-- select count(no) into v_row_num from t1;
-- for loop를 돌면서 테이블에 값 삽입
for i in v_row_num+1..v_row_num+n loop
insert into t1 values (i);
end loop;
p('입력 작업이 성공적으로 끝났사옵니다, 주인님!');
end;
/
exec append_num(0, 'r')
select * from t1;
insert into t1 values (null);
insert into t1 values (null);
select * from t1;
exec append_num(3)
select * from t1;
insert into t1 values (null);
insert into t1 values (null);
select * from t1;
exec append_num(2)
select * from t1;
-----------------------------
* null 값 입력 없는 단순한 예제의 해법
drop table t1 purge;
create table t1 (no number);
create or replace procedure append_num (n number)
is
v_cnt number;
begin
select count(*) into v_cnt
from t1;
for i in v_cnt+1..v_cnt+n loop
insert into t1 values (i);
end loop;
end;
/
exec append_num(2)
select * from t1;
NO
----------
1
2
exec append_num(3)
select * from t1;
NO
----------
1
2
3
4
5