2020년 7월 19일 일요일

오라클 PL/SQL 프로그래밍(제어문, 반복문)

오라클 PL/SQL 프로그래밍(제어문, 반복문)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=571

4. PL/SQL 프로그래밍(제어문, 반복문)

n 프로그래밍 언어에서 사용하는 것과 유사하지만 문법이 조금 다른 부분이 있다.

4.1 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 추출에러

4.2 BASIC LOOP문

n LOOP~END LOOP 형태이며 무한루프이므로 출구가 있어야 한다.(EXIT or EXIT WHEN절)

n 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

4.3 FOR LOOP문

n LOOP~END LOOP 앞에 FOR 제어문을 가지므로 루프 카운터 변수가 필요없고 LOOP~END LOOP 안쪽에 출구 역시 필요없다.

n 인덱스는 자동으로 선언되며 자동으로 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

4.4 WHILE LOOP문

n 조건이 만족하는 동안 LOOP~END LOOP를 실행하므로 별도의 출구는 필요없지만 루프 카운터 변수등은 선언해서 사용해야 한다.

n 조건에 만족하지 않으면 반복문내 실행문이 한번도 실행되지 않는다.

[형식]

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

[LAB]

1. 1부터 100까지의 수중에서 소수를 출력하는 프로그램을 BASIC LOOP, WHILE LOOP, FOR LOOP를 이용하여 작성하시오.(소수는 1과 자기자신 이외에는 나누어 떨어지지 않는 수이다.)

2. 임의의 수를 입력받아 1부터 그수까지의 합을 구하시오(LOOP~END LOOP, FOR LOOP, WHILE LOOP이용)

댓글 없음:

댓글 쓰기

(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...