WHILE문

[WHILE문으로 누적합 구하기]
DECLARE
            HAP NUMBER := 0;
            K NUMBER := 1;
BEGIN
            WHILE K<=10 LOOP     ----LOOP가 {} 같은 역할
                   HAP := HAP +K;
                   K := K+1; -- 이거 없으면 무한루프 걸리죠 ?! 오라클엔 ++ 이거 없음요!
            END LOOP;
                DBMS_OUTPUT.PUT_LINE('1부터 10까지 누적합='||HAP);
END;
/


역시 WHILE문 이용해서
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
=> 출력하기
DECLARE
      i NUMBER := 1;
      k NUMBER;
BEGIN
          WHILE i<=4 LOOP
            k:=1;
                    WHILE k<= 4 LOOP
                                if i=k then
                                       dbms_output.put('1 ');
                                else
                                       dbms_output.put('0 ');
                                end if;
                        k := k+1;
                     END LOOP;
                  i := i+1;
                 dbms_output.new_line;
           END LOOP;
END;
/


또 역시 구구단 출력하기
DECLARE
           i number := 1;
           k number := 2;
BEGIN
          while i<=9 loop
                     while k <= 9 loop
                          dbms_output.put(k||'*'||i||'='||k*i||' ');
                          k := k+1;
                      end loop;
                 dbms_output.new_line;
                 i := i+1;
                 k := 2; -->>>> 이거!!!!! 중요오오오오!! 없으면 1행만 출력됨!! 자바에서는 WHILE문 위에 초기식에서 초기화 하니까 맞다맞다맞다
        end loop;
end;
/

LOOP문

오라클에 있지만 자바엔 없는 반복문 중 하나
아주 낯선놈이지만.... WHILE과 비슷하다 문법 잘 익혀두자

[끝에서 부터 누적 합]
accept num prompt'끝 값을 입력?'
declare
      hap NUMBER := 0;
      num NUMBER := &num; -> &num은 변수가 아님 상수야 상수 사용자한테 받으니까!
begin
            loop
                 hap := hap + num;
                 num := num-1;
                     EXIT WHEN num =0;

                             -> 특이하게 이건 WHEN 절이 참이면 LOOP를 빠져 나온다!

                             WHEN condition 없으면 무조껀 나감 EXIT가 BREAK 같은 역할!
            end loop;
                   dbms_output.put_line(&num || '까지 누적합='||hap);
end;
/

 


[사용자 입력받아 그 사이값의 누적 합] IF & LOOP 의 콜라보 와우

ACCEPT snum prompt '시작 값 입력?'
accept enum prompt '끝 값 입력?'
declare
           hap NUMBER;
           snum NUMBER := &snum;
begin
문제) 시작값부터 종료값까지 누적합구하기 .. 시작값이 종료보다 크면 크다 라고 출력하고 프로그램 끝내라

              if &snum > &enum then
                      dbms_output.put('시작값이 종료값보다 커요');
              else
                       hap := 0 ;
                      LOOP
                           hap := hap + snum ;
                           snum := snum +1;
                           EXIT WHEN &enum < snum;
                     END LOOP;
                 end if ;
                    dbms_output.put_line(&snum||'부터'||&enum||' 까지 누적합='||hap);
end;
/


[짝수면 두 번, 홀수면 1번 출력]

자바에서 의 While (TRUE){ }

 

ACCEPT num prompt '숫자 입력?' 
declare
            num NUMBER := &num;
begin
        WHILE 1=1 LOOP   

                      오라클의 while엔  무조건 조건식을 넣어줘야 해서 TRUE 대신 무조건 TRUE인 조건식 아무거나 넣어줘야 함
                      DBMS_OUTPUT.PUT_LINE('num is '|| num);
               num := num-1;
               EXIT WHEN mod(num,2) = 0 ;
        END LOOP;    
end;
/

+ Recent posts