[    ORACLE 반복문(basic loop, while, for, continue)    ]




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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
/*
  [ 반복문 ]
  - basic loop문
  - while문
  - for
*/
 
-- 1. basic loop문(조건을 나중에 검사) : DO WHILE문과 유사
      --  형식
      /*
        loop
          pl/sql문장;
          exit when(조건);
        end loop;
      */
       
    -- 1~10까지 출력하기
    declare
      num number := 1;
    begin
      loop
        dbms_output.put_line(num);
        num := num + 1;
        exit when (num > 10);
      end loop;
    end;
    /
     
-- 2. while문(조건을 먼저 검사)
    /*
      형식)
        while 조건 loop
          실행문장;
        end loop
    */
    declare
      num number := 1;
    begin
      while (num <= 10) loop
        DBMS_OUTPUT.PUT_LINE(num);
        num := num + 1;
      end loop;
    end;
    /
     
    declare
      num number := 10;
    begin
      loop
        DBMS_OUTPUT.PUT_LINE(num);
        num := num - 1;
        exit when num = -1;
      end loop;
    end;
    /
     
    declare
      num number := 10;
    begin
      while (num >= 0) loop
        DBMS_OUTPUT.PUT_LINE(num);
        num := num - 1;
      end loop;
    end;
    /
     
     
-- 3. FOR문 : 반복횟수를 지정할 수 있다.
  /*
        형식) java의 FOR EACH문과 유사! IN뒤에 나온 것이 순차적으로 i에 들어가는 개념
          FOR i IN start..end loop
            실행문장
          end loop;
  */
  declare
   
  begin
    FOR i IN 1..10 loop
      DBMS_OUTPUT.PUT_LINE(i);
    end loop;
  end;
  /
   
  -- for문 역순
      --  reverse를 붙여주자.
  begin
    FOR n IN reverse 0..10 loop
      DBMS_OUTPUT.PUT_LINE(n);
    end loop;
  end;
  /
   
  /*사원테이블에서 사원id를 입력받아서 사원이름의 문자길이만큼
    #을 찍는 PL/SQL문을 작성해보자.(employees테이블을 이용)
  */
  declare
    emp_id employees.employee_id%type := &emp_no; -- 입력받음
    emp_name employees.last_name%type;
    emp_name_length number(20);
    v_char varchar2(30);
  begin
    select last_name, length(last_name) into emp_name, emp_name_length
    from employees
    where employee_id = emp_id;
     
    for i in 1..emp_name_length loop
      v_char := v_char ||'#';
    end loop;
     
    DBMS_OUTPUT.PUT_LINE(v_char);
  end;
  /
   
   
-- continue 보조제어문(*11g부터 추가된 기능임*) ]
  declare
    tot number := 0;
  begin
    for i in 1..10 loop
      tot := tot + 1;
      DBMS_OUTPUT.put_line('tot : ' || tot);
      continue when i > 5; -- 해당 조건을 만족하면 다음 차수로 바로 가게 된다.
      -- 아래를 수행하지 않고 다음번 차수로 넘어가게 됨.
      tot := tot + i;
      DBMS_OUTPUT.PUT_LINE('tot2 :' || tot);
    end loop;
  end;
  /


+ Recent posts