본문 바로가기

PL SQL

PL/SQL 연습

@markdown

# PL/SQL 연습하기

____

<pre><code class="sql" style="font-size:14px">문제 1. 1~100까지의 수에서 홀수만 출력

BEGIN

FOR f_idx IN 1..100

LOOP

  IF (mod(f_idx, 2)) != 0

  THEN

DBMS_OUTPUT.PUT_LINE(f_idx);

  END IF;

END LOOP;

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 2. 1~100까지의 수에서 홀수의 합을 출력

DECLARE

l_sum   NUMBER := 0;

BEGIN

FOR f_idx IN 1..100

LOOP

IF (mod(f_idx, 2)) != 0

THEN

l_sum := l_sum + f_idx; 

END IF;

END LOOP;

DBMS_OUTPUT.PUT_LINE(l_sum);

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 3. 구구단 2단부터 l_num단까지 출력

VARIABLE l_num NUMBER;

DECLARE

l_cnt   NUMBER := :l_num; 

l_val   NUMBER := 2;

BEGIN

WHILE l_val <= l_cnt

LOOP

FOR f_idx IN 2..9

LOOP

DBMS_OUTPUT.PUT_LINE(l_val || '*' || f_idx || '=' || l_cnt * f_idx); 

END LOOP;

l_val := l_val + 1;

END LOOP;

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 4. 1~100까지의 합을 구하되, 합이 10의 배수로 출력

DECLARE

l_sum   NUMBER := 0;

BEGIN

FOR f_idx IN 1..100

LOOP

l_sum := l_sum + f_idx; 

IF (mod(l_sum, 10)) = 0

THEN

DBMS_OUTPUT.PUT_LINE(l_sum); 

END IF;

END LOOP;

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 5. 10!을 계산하여 출력

DECLARE 

l_val   NUMBER := 10;

l_sum   NUMBER := 1; 

BEGIN

WHILE l_val > 0

LOOP

l_sum := l_sum * l_val;

l_val := l_val - 1;

END LOOP;

DBMS_OUTPUT.PUT_LINE(l_sum ); 

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 6. 바인드 변수 2개를 받아서 두 수 사이의 수 중에서 2의 배수와 3의 배수를 출력

(단, 2의 배수이면서 3의 배수인 수는 1번만 출력)


VARIABLE l_num1 NUMBER;

VARIABLE l_num2 NUMBER;

exec :l_num1 := 2;

exec :l_num2 := 15;


DECLARE

l_val1   NUMBER := :l_num1; 

l_val2   NUMBER := :l_num2;

BEGIN

DBMS_OUTPUT.PUT_LINE(l_val1 || ' 와' || l_val2 || '사이 2, 3의 배수');

WHILE l_val1 <= l_val2

LOOP

IF (mod(l_val1, 2) = 0 AND mod(l_val1, 3 ) = 0)

THEN 

DBMS_OUTPUT.PUT_LINE('2와 3의 공배수 ' || l_val1);

ELSIF mod(l_val1, 3 ) = 0

THEN DBMS_OUTPUT.PUT_LINE('3의 배수 ' || l_val1);

ELSIF mod(l_val1, 2) = 0

THEN DBMS_OUTPUT.PUT_LINE('2의 배수 ' || l_val1);

END IF;

l_val1 := l_val1 + 1;

END LOOP;

END;

/

</code></pre>


<pre><code class="sql" style="font-size:14px">문제 7. 중첩 LOOP를 사용하여 아래와 같은 결과 만들기

DECLARE

l_val   NUMBER := 2;

BEGIN

WHILE l_val <= 8

LOOP

FOR f_idx IN REVERSE 1..9

LOOP

IF (mod(f_idx, 2) != 0) AND (f_idx < l_val)

   THEN

DBMS_OUTPUT.PUT_LINE(l_val || '*' || f_idx || '=' || l_val * f_idx); 

END IF; 

END LOOP;

DBMS_OUTPUT.PUT_LINE('----------------------');

l_val := l_val + 2;

END LOOP;

END;

/

</code></pre>