다연이네

[days14] PL/SQL 예제 본문

Oracle

[days14] PL/SQL 예제

 다연  2020. 11. 17. 21:00
반응형

1. 홀수/짝수 출력

declare 
    vnum number(3);
    vresult varchar2(10) := '홀수';
begin 
    vnum := :number;
    if (mod(vnum,2)=0) then
        vresult := '짝수';
    else
        vresult := '홀수'; --사실 초기값을 홀수로 줘서 else구문 필요 없음
    end if;
    
    dbms_output.put_line('> vresult ='||vresult);
--exception
end;

- IF문

2. vkor 변수를 선언하고 입력받아 수,우,미,양,가 출력

   1) if문 사용

declare
    vkor number(3);
    vresult varchar2(3) := '수';
begin
    vkor := :pkor; -- pkor 입력받는 변수는 맘대로
    if (vkor between 90 and 100) then
    vresult := '수';
    elsif (vkor between 80 and 89) then
    vresult := '우';
    elsif (vkor between 70 and 79) then
    vresult := '미';
    elsif (vkor between 60 and 69) then
    vresult := '양';
    else vresult := '가';
    end if;
    dbms_output.put_line('> 성적은 '||vresult);
--exception
end;

- CASE문

  2) case문 사용

declare
    vkor number(3);
    vresult varchar2(3) := '가';
begin
    vkor := :pkor; -- pkor 입력받는 변수는 맘대로
    vkor := trunc(vkor/10); --10으로 나눠 다시 vkor에 대입
     case
        when vkor in (10,9) then vresult:='수';
        when vkor =8 then vresult:='우';
         when vkor =7 then vresult:='미';
          when vkor =6 then vresult:='양';
        else vresult:='가';
     end case;
      dbms_output.put_line(vresult); 
--exception
end;

- FOR문

for counter in [reverse] 시작값 .. 끝낼값
loop
    반복적으로 할 명령 코딩
end loop;

 

3. 1~10까지 합 출력

declare
    vi number;
    vsum number:=0;
begin
    for vi in 1 .. 10
    loop
    if vi=10 then  
    dbms_output.put(vi);
    else  dbms_output.put(vi||'+'); -- 개행하기 싫으면 line 지워라
    end if;
        vsum := vsum+vi; --vsum++ 불가
    end loop;
    dbms_output.put_line('='||vsum); 
--exception
end;

- reverse 사용

declare 
    --vi number; for문에 사용되는 vi변수는 따로 선언하지 않아도 된다
    vsum number:=0;
begin
     for vi in reverse 1 .. 10
    loop
    if vi=1 then  
    dbms_output.put(vi);
    else  dbms_output.put(vi||'+'); 
    end if;
        vsum := vsum+vi;
    end loop;
    dbms_output.put_line('='||vsum); 
--exception
end;

숫자를 거꾸로 출력

4. 구구단 2~9단 가로/세로 상관 없이 출력

declare
begin
    for i in 2..9
    loop 
        for j in 1..9
        loop
         if j=6 then 
            goto for_out; -- goto : 흐름제어를 지정한 label로 무조건 이동한다. 
         end if;
            dbms_output.put(i||'*'||j||'='||i*j||'/');
        end loop;
        <<for_out>> --아무 이름이나 줘도 됨 
        --goto가 <<>> 여기로 온다 ==break
        dbms_output.put_line(''); --이 함수가 있어야 출력이 된다. 이게 없으면 위의 코딩 출력 안됨
    end loop;
--exception
end; 

 

- WHILE문 

 

미리 조건을 제시한 경우
     WHILE 조건 
     LOOP 
      실행문; 
     END LOOP; 


 단순 loop 문을 사용한 다른 방법  
    LOOP 
       EXIT WHEN 조건; 
         실행문; 
    END LOOP; 

 

5. while~loop 1~10 합출력

declare
    vi number :=1;
    vsum number :=0;
begin
    while vi<=10 --조건
    loop --loop == {
     dbms_output.put(vi||'+');
     vsum:= vsum+vi;
     vi:=vi+1;
    end loop; -- end loop == }
    
    dbms_output.put_line('='||vsum);
--exception
end;

5-2. 위 쿼리를 loop exit when ~ end loop;로 변경하기

declare
    vi number :=1;
    vsum number :=0;
begin
    loop 
      exit when vi>10;
      if vi=10 then dbms_output.put(vi);
      else 
     dbms_output.put(vi||'+');
     end if;
     vsum:= vsum+vi;
     vi:=vi+1;
   
    end loop; -- end loop == }
    
    dbms_output.put_line('='||vsum);
--exception
end;

5-3 (어려워) while ~ loop 2~9단  출력

declare 
    vi number(3):=2;
    vj number(3):=1;
begin
    while vi<=9 
    loop
    vj:=1;
        while vj<=9
        loop
        dbms_output.put(vi||'*'||vj||'='||vi*vj||' ');
        vj:=vj+1;
        end loop;
        vi:=vi+1;
        dbms_output.put_line('');
    end loop;
--exception
end;

반응형

'Oracle' 카테고리의 다른 글

[days14] Stored Procedure (저장 프로시저)  (0) 2020.11.17
[days14] Cursor (커서)  (0) 2020.11.17
[days13] PL/SQL, 익명 프로시저  (0) 2020.11.16
[days13] Sequence(시퀀스)  (0) 2020.11.16
[days12] View  (2) 2020.11.13
Comments