관리 메뉴

거니의 velog

230802 SQL 강의 본문

대덕인재개발원/대덕인재개발원_Oracle DB

230802 SQL 강의

Unlimited00 2023. 8. 2. 18:27
--WHILE 문
--반복될 때마다 조건을 확인하고 조건이 TRUE가 되어야 loop실행
--  - 조건이 만족할 때까지 반복 처리
--  - EXIT문은 WHILE LOOP를 벗어나게 한다
--  - CONTINUE문은 11g부터 제공된다.

--1부터 10까지 더하기
SET SERVEROUTPUT ON;
DECLARE
    V_SUM   NUMBER := 0;
    V_VAR   NUMBER := 1;
BEGIN
    WHILE V_VAR <= 10 LOOP
        V_SUM := V_SUM + V_VAR;
        V_VAR := V_VAR + 1;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('1부터 10까지의 합=' || V_SUM);
END;
/


--WHILE문을  사용하여 * 로 피라미드 만들기 
DECLARE
    V_ID    NUMBER := 1;
BEGIN
    WHILE V_ID < 20 LOOP
        DBMS_OUTPUT.PUT_LINE(RPAD('*',V_ID,'*'));
        V_ID := V_ID + 2;
    END LOOP;
END;
/

DECLARE
    V_I NUMBER := 1;
    V_J NUMBER := 1;
BEGIN
    WHILE V_I < 20 LOOP
        V_J := 1;
        WHILE V_J <= V_I LOOP
            DBMS_OUTPUT.PUT('*');
            V_J := V_J + 1;
        END LOOP;
        V_I := V_I + 2;
        DBMS_OUTPUT.PUT_LINE('');
    END LOOP;
END;
/


DECLARE 
  V_ID  NUMBER := 1;
  V_ID2 NUMBER := 10;
BEGIN
    DBMS_OUTPUT.PUT_LINE(''); -- PUT_LINE. 다음 라인으로 넘어가라.
  WHILE V_ID < 20 LOOP
    DBMS_OUTPUT.PUT(RPAD(' ' , v_id2, ' '));
    DBMS_OUTPUT.PUT_LINE(RPAD('*',V_ID , '*'));    
    V_ID  := V_ID  + 2;  
    V_ID2 := V_ID2 - 1;  
  END LOOP;  
END;
/


--다중 WHILE문을 사용하여 구구단 만들기
DECLARE
    V_I NUMBER := 2;
    V_J NUMBER := 1;
BEGIN
    WHILE V_I < 10 LOOP
        DBMS_OUTPUT.PUT_LINE('===========');
        DBMS_OUTPUT.PUT_LINE(V_I || ' 단 ');
        DBMS_OUTPUT.PUT_LINE('===========');
        V_J := 1;
        WHILE V_J < 10 LOOP
            DBMS_OUTPUT.PUT_LINE(V_I || ' X ' || V_J || '=' || V_I * V_J);
            V_J := V_J + 1;
        END LOOP;
        V_I := V_I + 1;
    END LOOP;
END; 
/


DECLARE
    V_NM VARCHAR2(20);
BEGIN
    SELECT LPROD_NM INTO V_NM FROM LPROD WHERE LPROD_GU = 'P201';
    IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('받은 값 = ' || V_NM);
        DBMS_OUTPUT.PUT_LINE('행 수 = '   || SQL%ROWCOUNT);
    END IF;
END;
/


--상품분류 테이블에 6개의 코드 증가
DECLARE
    V_ADD   NUMBER(5) := 1000;
    V_CODE  CHAR(4)   := '';
    V_ID    NUMBER(5);
    V_NAME  CHAR(20)   := '';
BEGIN
    SELECT MAX(LPROD_ID) INTO V_ID FROM LPROD;
    WHILE V_ADD <= 1005 LOOP
        V_ADD := V_ADD + 1;
        V_ID  := V_ID + 1;
        V_CODE := 'TT' || SUBSTR(TO_CHAR(V_ADD), -2);
        V_NAME := 'LOOP TEST' || SUBSTR(TO_CHAR(V_ADD), -2);
        INSERT INTO LPROD(LPROD_ID, LPROD_GU, LPROD_NM) VALUES(V_ID, V_CODE, V_NAME);
        IF SQL%FOUND THEN
            DBMS_OUTPUT.PUT_LINE('신규코드' || V_CODE || '가 추가되었음');
            DBMS_OUTPUT.PUT_LINE('신규이름' || TRIM(V_NAME) || '가 추가되었음');
        END IF;
    END LOOP;
END;
/


--WHILE문을 사용하여 상기 INSERT된 데이터를 삭제하시오 ? (삭제가 되었는지 확인 메시지 출력)
DECLARE
    V_ADD NUMBER(5) := 1007;
    V_CODE CHAR(4) := '';
    V_ID NUMBER(5);
BEGIN
    SELECT MAX(LPROD_ID) INTO V_ID FROM LPROD;
    WHILE V_ADD>=1002 LOOP
      DELETE FROM LPROD WHERE LPROD_ID=V_ID;  --V_ID : 16, 15, 14, 13, 12, 11
        V_ADD  := V_ADD - 1;   --1006, 1005, 1004, 1003, 1002, 1001까지 1씩 감소(6회 반복)
        V_ID   := V_ID  - 1;   --LPROD_ID 최대값 즉, 16, 15, 14, 13, 12, 11
        V_CODE := 'TT'||SUBSTR(TO_CHAR(V_ADD),-2);  --화면에 결과를 출력하기 위함
      IF SQL%FOUND THEN
        --TT06, TT05, ...
        DBMS_OUTPUT.PUT_LINE('기존코드' || V_CODE || '가 삭제되었습니다');
      END IF;
    END LOOP;
END;
/


-- GOTO : 실행처리를 임의의 지점으로 이동

DECLARE 
  v_sum INT := 0;
  v_var INT := 1;
BEGIN
  <<mylabel>>
  v_sum := v_sum + v_var;
  v_var := v_var + 1;
  IF v_var <= 10 THEN
    GOTO mylabel;
  END IF;
  DBMS_OUTPUT.PUT_LINE(v_sum);
  DBMS_OUTPUT.PUT_LINE(v_var);
END;
/


--LOOP 문 : 조건이 없는 단순한 무한 반복문이다.
--  - EXIT 문을 사용하여 반복문을 빠져나가게 해야 한다.

--1부터 10까지 더하기

DECLARE
  v_sum NUMBER := 0;
  v_var   NUMBER := 1;
BEGIN
  LOOP
    v_sum := v_sum + v_var;
    v_var   := v_var + 1;
    IF v_var > 10 THEN 
      EXIT; 
    END IF;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('1 부터 10 까지의 합 = ' || v_sum);
END;
/

 

'대덕인재개발원 > 대덕인재개발원_Oracle DB' 카테고리의 다른 글

230804 SQL 강의  (0) 2023.08.04
230803 SQL 강의  (0) 2023.08.03
230801 SQL 강의  (0) 2023.08.01
230731 SQL 강의  (0) 2023.07.31
230728 SQL 강의  (0) 2023.07.29