레이블이 PLSQL반복문인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PLSQL반복문인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 31일 금요일

오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE, SQL교육, ORACLE교육, JAVA교육, 오라클학원, 자바학원, SQL학원, SQL동영상

 오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE, SQL교육, ORACLE교육, JAVA교육, 오라클학원, 자바학원, SQL학원, SQL동영상





오라클 PL/SQL



프로시저 작성

반복문(LOOP~END LOOP, WHILE, FOR)

INOUT 파라미터


실습





[실습]

주어진 수 까지의 짝수의 합을 구하여 리턴하는 프로시저를 작성합니다.
DO ~ LOOP, WHILE LOOP, FOR LOOP 이용 3가지 방법
INOUT 파라미터 이용

set serveroutput on


create or replace procedure getSum(num in out number)
is
tot number := 0;
i number := 0 ;
begin
loop
exit when i >= num;
i := i + 1;
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


create or replace procedure getSum(num in out number)
is
tot number := 0;
i number := 0 ;
begin
while(i < num) loop
i := i + 1;
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


create or replace procedure getSum(num in out number)
is
tot number := 0;
begin
for i in 1..num LOOP
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


declare
num number := 10;
begin
getSum(num);
dbms_output.put_line('total = ' || num);
end;


total = 30





#오라클, #오라클프로시저실습,#INOUT파라미터, #PLSQL반복문, #오라클교육, #오라클학원, #SQL교육, #SQL학원, #SQL동영상, #오라클동영상, #자바학원, #자바교육, 오라클, 오라클프로시저실습,INOUT파라미터, PLSQL반복문, 오라클교육, 오라클학원, SQL교육, SQL학원, SQL동영상, 오라클동영상, 자바학원, 자바교육



2021년 12월 24일 금요일

PLSQL 제어문,반복문, IF, LOOP, END LOOP, FOR LOOP, WHILE LOOP, PL/SQL동영상, 자바학원, 오라클학원, JAVA학원, ORACLE학원

 










PLSQL 제어문,반복문, IF, LOOP, END LOOP, FOR LOOP, WHILE LOOP, PL/SQL동영상


오라클 PL/SQL




제어문, 반복문


강의 : 이종철



PL/SQL IF문


[형식]

IF condition1 THEN

   Condition1이 만족하는 경우 실행할 문장

ELSIF condition2 THEN

 Condition2가 만족하는 경우 실행할 문장

ELSE

   이외의 경우 실행할 문장

END IF;



-- EMP 테이블에서 이름을 입력받아 급여가 3000보다 크면 'high sal' 

-- 2000보다 크면 'mid sal' 그밖에는 'low sal'을 출력하는 프로시저를 작성하세요.


SQL> SET SERVEROUTPUT ON

SQL> CREATE OR REPLACE PROCEDURE OJC16(v_ename emp.ename%TYPE)

    IS

    v_sal emp.sal%TYPE;

    BEGIN

      SELECT sal INTO v_sal

      FROM EMP

      WHERE ename = v_ename;

  

      IF v_sal >= 3000 THEN

       DBMS_OUTPUT.PUT_LINE('high sal...');

     ELSIF v_sal >= 2000 THEN

       DBMS_OUTPUT.PUT_LINE('mid sal...');

     ELSE

       DBMS_OUTPUT.PUT_LINE('low sal...');

     END IF;

   EXCEPTION

     WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN

       DBMS_OUTPUT.PUT_LINE('Data 추출에러');

  END;

   /


프로시저가 생성되었습니다.


SQL> exec ojc16('SMITH')

low sal...


SQL> exec ojc16('KING')

high sal...


SQL> exec ojc16('없는사원')

Data 추출에러



BASIC LOOP문


  • LOOP~END LOOP 형태이며 무한루프이므로 출구가 있어야 한다.(EXIT or EXIT WHEN절)
  • LOOP COUNTER 변수 등은 직접 다루어야 한다.

 

[형식]

LOOP

  실행문장;

END LOOP;


-- LOOP ~ END LOOP, EXIT 이용한 예제

SQL> SET SERVEROUTPUT ON

SQL> DECLARE

       x number := 10;

    BEGIN

       LOOP

          DBMS_OUTPUT.PUT_LINE(x);

          x := x - 1;

          IF x < 1 THEN

             EXIT;

          END IF;

      END LOOP;

      DBMS_OUTPUT.PUT_LINE('x = ' || x);

   END;

   /


10

9

8

1

x = 0


-- LOOP ~ END LOOP, EXIT WHEN 이용한 예제

SQL> DECLARE

       x number := 10;

    BEGIN

       LOOP

          DBMS_OUTPUT.PUT_LINE(x);

          x := x - 1;

          EXIT WHEN x < 1;

       END LOOP;

       DBMS_OUTPUT.PUT_LINE('x = ' || x);

   END;

   /

10

9

8

1

x = 0



FOR LOOP문


  • LOOP~END LOOP 앞에 FOR 제어문을 가지므로 루프 카운터 변수가 필요없고 LOOP~END LOOP 안쪽에 출구 역시 필요없다.
  • 인덱스는 자동으로 선언되며 자동으로 1씩 증가하고 REVERSE라고 하면 상한값에서 초기값으로 -1씩 증가한다.(초기값과 상한값의 위치가 바뀌어서는 안된다.)


[형식]

FOR 인덱스 IN [REVERSE] 초기값 .. 상한값 LOOP

   실행문장;

END LOOP; 




-- FOR LOOP예제

SQL> SET SERVEROUTPUT ON

SQL> DECLARE

    BEGIN

      FOR x IN 1..10 LOOP

         DBMS_OUTPUT.PUT_LINE(x);

      END LOOP;

    END;

    /

1

10


-- FOR LOOP예제(REVERSE)

SQL> DECLARE

    BEGIN

      FOR x IN REVERSE 1..10 LOOP

         DBMS_OUTPUT.PUT_LINE(x);

      END LOOP;

    END;

    /

10

9



WHILE LOOP문


  • 조건이 만족하는 동안 LOOP~END LOOP를 실행하므로 별도의 출구는 필요없지만 루프 카운터 변수등은 선언해서 사용해야 한다.
  • 조건에 만족하지 않으면 반복문내 실행문이 한번도 실행되지 않는다.


[형식]

WHILE 조건 LOOP

   실행문장;

END LOOP;


SQL> SET SERVEROUTPUT ON

SQL> DECLARE

      x NUMBER := 10;

    BEGIN

      WHILE(x > 0) LOOP

        DBMS_OUTPUT.PUT_LINE(x);

        x := x - 1;

      END LOOP;

      DBMS_OUTPUT.PUT_LINE('x = ' || x);

    END;

   /

10

9

1

x = 0





#PLSQL, #제어문, #반복문, #PLSQLIF, #PLSQLLOOP, #PLSQL반복문, #PLSQL제어문, #PLSQL동영상, #PLSQL교육, #SQL학원, #SQL교육, #오라클학원, #오라클교육, PLSQL, 제어문, 반복문, PLSQLIF, PLSQLLOOP, PLSQL반복문, PLSQL제어문, PLSQL동영상, PLSQL교육, SQL학원, SQL교육, 오라클학원, 오라클교육, 


2021년 10월 16일 토요일

PL/SQL 반복문 BASIC LOOP, FOR LOOP, WHILE LOOP

 

PL/SQL 반복문 BASIC LOOP, FOR LOOP, WHILE LOOP

15.1.4. PL/SQL 반복문


PL/SQL 프로그래밍을 하다보면 특정 코드블록을 여러번 반복 실행해야 하는 경우가 있을 수 있습니다.  이럴때 PL/SQL반복문을 사용 합니다.


PL/SQL 반복문은 BASIC LOOP ~ END LOOP, WHILE LOOP ~ END LOOP, FOR LOOP ~ END LOOP가 있습니다.


LOOP ~ END LOOP 안에서 루프를 조절하는 몇가지 명령을 사용할 수 있습니다.

EXIT : EXIT를 만나면 제어를 END LOOP 바로 다음으로 이동 시킵니다. 즉 루프를 빠져 나갑니다.

EXIT WHEN condition : 지정한 조건이 되면 루프를 빠져 나갑니다.

CONTINUE : CONTINUE 이후의 문장을 SKIP하고 해당 루프의 다음 반복을 계속할 수 있도록 합니다.

GOTO label : lebel이 지정된 명령문으로 제어를 이동시킵니다. GOTO 사용은 순차적인 프로그래밍 방식에서 제어의 일관성이 상실되어 가독성이 떨어지므로 권장하지 않습니다.


15.1.4.1. BASIC LOOP문


반복실행될 명령은 LOOP ~ END LOOP 사이에 기술하며, 명령문이 실행된 후 제어가 위쪽 LOOP에서 다시 시작됩니다.


<기본형식>

LOOP

    EXIT WHEN condition;

    CONTINUE;

    statements;

END LOOP;


  • condition : 해당 조건이 되면 루프를 빠져 나갑니다.

  • statements : 반복 실행할 명령.


15.1.4.1.1. 구구단 출력하기 : BASIC LOOP


구구단 2단, 3단을 출력하는 PL/SQL 예문을 BASIC LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 숫자 2자리를 저장할 수 있는 NUMBER형 변수 I, J를 선언하고 초기치를 할당

   I NUMBER(2) := 1; 

   J NUMBER(2) := 0; 

BEGIN 

   -- 외부 루프

   LOOP 

      -- I를 1증가

      I := I + 1;

      

      -- I값이 3보다 크면 외부루프를 빠져나옴

      EXIT WHEN I > 3;

      

       -- 내부 루프

       LOOP 

            -- J값을 1증가, J는 0부터 시작됨

            J := J + 1;

            

            -- J값이 9보다 크면 외부루프를 빠져나옴

            EXIT WHEN J > 9;

            DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

       END LOOP;  -- 내부 루프 종료

       

       -- 내부 루프를 빠져 나오면 J를 초기값으로 할당

       J := 0;

       

       DBMS_OUTPUT.PUT_LINE('');

   END LOOP;   -- 외부 루프 종료

END;  


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27



위 예문에서 레이블은 생략 가능 합니다. 실무에서 PL/SQL 작성시 label은 거의 사용하지 않습니다. label을 기술하고 GOTO문 등으로 제어를 이동시킬 수 있지만 권장하지 않습니다.



15.1.4.2. FOR LOOP문


명령을 고정된 횟수 만큼 반복하려면 FOR ~ LOOP를 사용합니다.


루프 카운터 변수는 기본적으로 시작값에서 상한값까지 1씩 증가 하면서 이동하고 REVERSE라고 하면 상한값에서 시작값으로 -1씩 증가 합니다. 또한 초기값과 상한값의 위치가 바뀌어서도 안되고 초기값과 상한값은 점2개(..)로 연결 됩니다.


<기본형식>


FOR index IN [REVERSE] lowest_num..highest_num

LOOP

   statements

END LOOP;


  • index : 루프 카운터 변수. 루프 밖에서는 참조가 불가능 합니다. 루프 안에서는 참조는 가능하지만 값을 변경할 수는 없습니다.

  • [REVERSE] : 루프 카운터는 상한값에서 시작값으로 역으로 변합니다.[생략가능]

  • lowest_num : PLS_INTEGER형식의 루프 카운터 변수의 시작값, 숫자 또는 숫자로 평가되는 표현식.

  • highest_num : PLS_INTEGER형식의 루트 카운터 변수의 상한값, 숫자 또는 숫자로 평가되는 표현식.

  • lowest_num 및 highest_num 값은 FOR LOOP 문이 시작될 때 한 번 평가되므로 값을 수정하더라도 변경사항이 적용되지 않습니다.

  • lowest_num 값이 highest_num 값과 같으면 명령문은 한 번만 실행되고 lowest_num 값이 highest_num 값 보다 크면 명령문이 실행되지 않습니다.

  • statements : 반복 실행할 명령.



15.1.4.1.1. 숫자 출력하기 : FOR  LOOP

 

10부터 2까지 내림 차순으로 짝수를 출력하는  PL/SQL 예문을 FOR LOOP문을 이용하여 작성해 봅시다.


10부터 2까지 내림차순으로 짝수를 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 초기값 2를 가지는 변수 v_step을 선언

   v_step  PLS_INTEGER := 2;

BEGIN 

   -- FOR LOOP 5부터 1까지 -1씩 증가하면서 5번 반복

   FOR I IN REVERSE 1..5  

   LOOP 

       -- 10부터 2까지 5번 반복하면서 값을 출력  

       DBMS_OUTPUT.PUT_LINE(I * v_step);

   END LOOP;   -- FOR LOOP 종료

END; 



<실행결과>

10

8

6

4

2



15.1.4.1.2. 구구단 출력하기 : FOR  LOOP

 

구구단 2단, 3단을 출력하는 PL/SQL 예문을 FOR LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 숫자 1자리를 저장할 수 있는 NUMBER형 변수 I, J를 선언

   I NUMBER(1); 

   J NUMBER(1); 

BEGIN 

   -- 외부 루프

   FOR I IN 2..3 LOOP 

        -- 내부 루프

        FOR J IN 1..9 LOOP 

             DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

        END LOOP;  -- 내부 루프 종료

        DBMS_OUTPUT.PUT_LINE('');

   END LOOP;   -- 외부 루프 종료

END;  


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27




15.1.4.3. WHILE LOOP문


지정한 조건이 참(TRUE)인 동안 LOOP 안쪽 명령을 실행합니다. 조건이 거짓이라면 LOOP 안쪽 명령은 한번도 실행되지 않습니다.


<기본형식>

WHILE condition

LOOP

   statements

END LOOP;


  • condition : 루프가 반복될 때마다 먼저 평가되며 TRUE 경우만 LOOP ~ END LOOP 사이의 명령문을 실행 합니다. FALSE, NULL이 되면 루프는 종료 됩니다. LOOP에 들어가기 전에 condition이 FALSE이면 WHILE 루프는 전혀 실행되지 않습니다. 이 동작은 루프 본문이 항상 한 번 실행되는 BASIC LOOP 문과 다릅니다.

  • statements : 반복 실행할 명령.

  • LOOP를 조기에 종료하려면 EXIT, EXIT WHEN절을 사용합니다.


15.1.4.3.1. 구구단 출력하기 : WHILE  LOOP

 

구구단 2단, 3단을 출력하는 PL/SQL 예문을 WHILE LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- NUMBER형 변수 I, J를 선언하고 초기치 할당

   -- 구구단에서 I는 2부터 시작하고 J는 1부터 시작한다.

   I NUMBER(1) := 1; 

   J NUMBER(2) := 0; 

BEGIN 

   -- 외부 루프(2단부터 3단까지 출력)

   WHILE I < 3 

   LOOP 

        I := I + 1;

        -- 내부 루프(1~9까지 반복)

        WHILE J < 9 

        LOOP 

             J := J + 1;

             

             DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

        END LOOP;  -- 내부 루프 종료

        DBMS_OUTPUT.PUT_LINE('');

        J := 0;

   END LOOP;   -- 외부 루프 종료

END;


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...