확인문제) 다음과 같은 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



+ Recent posts