SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Oracle] PL/SQL Class 1 - 구성, while 반복문, loop반복문, 과제 본문

PLSQL

[Oracle] PL/SQL Class 1 - 구성, while 반복문, loop반복문, 과제

D_Aiden 2023. 11. 8. 11:24
728x90
반응형
SMALL

2023.11.08 오후

 

## PLSQL(Procedural Language SQL)

:일반 프로그래밍 언어에서 가지고 있는 요소를 모두 가지고 있으며 DB업무를 처리하기 위해 최적화된 언어이다..

 

--접속: 특정 폴더지정 후, 명령프롬프트 내에서 메모장 경로추가

1. 구성

1) 정의부

 declare            //변수, 예외, 커서

2) 실행부

begin 

3) 예외 처리부

조건문에서 if로 시작하면 반드시 end if로 마무리.

-- 조건문

-- if 조건 1 then

--             명령;

-- [elsif 조건2 then

--            명령;

-- .....

-- else 명령;

end;

/

set serveroutput on; PLSQL 사용 할 때마다 입력

 

(문제1)

1~10까지 짝수만 출력
set serveroutput on; 

SQL> begin
                      for a in 1..10 loop
                            -- continue when mod(a,2) = 1;             -- 이렇게 사용도 가능
                     if (mod(a,2)=1) then
                      continue;                                            -- 반복문 내에서 continue 만날 시, 다시 for문(조건)으로 가고, exit 만나면 반복문 탈출
                     end if;
                                    dbms_output.put_line('a의 값 --> ' || a);
                     end loop;
end;
/

(문제2)
1~100까지 합계 구하기
set serveroutput on; 

declare
                      number :=1;
                      hap number :=0;
begin
              while d<=100 loop
              hap := (hap +1)+d;
              d := d+1;
                            end loop;
                                    dbms_output.put_line('1~100=' || hap );
end;
/

-- while 반복문
-- 형식: while 조건 loop end loop;

(문제4) 
1~10까지 출력하시오 --> while 반복문 사용해서 코딩

SQL> declare
                       nn number := 0;
           begin
                       while nn<10 loop
                       nn := nn+1;
                                         dbms_output.put_line( ' (문제1)while반복문 1~10까지 출력:  ' || nn);
                       end loop;
end;
/

(문제5)
1~100까지 총합 구하여 출력 --> while 반복문 사용해서 코딩

SQL> declare
                       aa number :=0;
                       ss number :=0;
           begin
                       while aa<101 loop
                       ss := ss+aa;
                       aa := aa+1;
                       end loop;
                                        dbms_output.put_line( ' (문제2)while반복문 1~100까지 총합: ' || ss);
end;
/

(문제6) 
--1~10까지 출력   --> loop~ end loop 반복문
SQL>  declare
                        e number := 0;
                         d_sum number := 0;
            begin
                         loop
                          e :=e+1;
                          d_sum := d_sum+1;
                          exit when (e>=11);
                                        dbms_output.put_line( ' (문제3)loop~end loop반복문 1~10까지 출력:  ' || e);
                           end loop;
end;
/

(문제7)

-- 1~100까지 총합 구하여 출력 --> loop~ end loop 반복문
SQL>  declare
                        s number := 0;
                        w_sum number :=0;
            begin
                         loop
                         w_sum := w_sum+s;
                         s :=s+1;
                         exit when (s>100);
                         end loop;
                                         dbms_output.put_line( ' (문제4)loop~end loop반복문 1~100까지 총합:  ' || w_sum);
end;
/

(문제8)
- 입력받는 명령문 작성하시오
accept 변수 prompt '메세지' --> PLSQL 내에서는 [&변수] 형태로 사용

accept num prompt '입력하세요:'
begin
          if mod(&num, 2)=0 then
                    dbms_output.put_line('짝수');
           else 

                    dbms_output.put_line('홀수');
           end if;
end;
/

 

 

과  제

1. 2~9까지 모든 구구단을 출력하는 프로그램(다중 for문)

SQL> set serveroutput on
           set verify off

begin 
           for gugu_dan in 2..9 loop
           for googu_dan in 1..9 loop
                      dbms_output.put_line(gugu_dan||'x'||googu_dan||'='||gugu_dan*googu_dan);
           end loop;
                      dbms_output.put_line('======');
           end loop;
end;
/

 

2. 입력한 숫자의 구구단을 출력하는 프로그램

SQL> accept num prompt '구구단 입력하세요:'
declare
             v_gu number := &num;
begin 
             if v_gu= &num then
             for num in 1..9 loop
                           dbms_output.put_line(v_gu||'x'||num||'='||v_gu*num);

             end loop;
             end if;

end;
/

 

3. 입력한 숫자만큼의 '#' 출력하는 프로그램

예) 숫자:4

#

##

###

####

SQL>  accept num prompt '별 입력 -->'
declare
             v_star varchar2(10);                          // char는 고정형, varchar는 가변형 길이 
begin
              for v_row in 1..&num loop
              v_star := null;
              for v_col in 1..v_row loop
              v_star := v_star || '*';
              end loop;
                            dbms_output.put_line(v_star);
              end loop;
end;
/

(반대로)
SQL>  accept num prompt '별 입력 -->'
declare
             v_star varchar2(10);
begin
              for v_row in reverse 1..&num loop
              v_star := null;
              for v_col in 1..v_row loop
              v_star := v_star || '*';
              end loop;
                            dbms_output.put_line(v_star);
              end loop;
end;
/

 

 

4. 입력한 숫자의 1~입력한 숫자사이의 소수(1과 자신과만 나눠지는 수)를 구하여 출력하는 프로그램

예) 12

1~12 사이의 소수: 1,3,5,7,11 

 

(오답)

accept num prompt '숫자를 입력하세요 : '
declare 
             result number := 0;
              flag char(1) := 'Y';
begin
              for x in 2..&num loop

              for y in 2..(x-1) loop

                            if MOD(x,y) = 0 then

                            flag :='N';

                     exit;
                     end if;
                     end loop

              if flag != 'N' then
                                  dbms_output.put_line('소수 : '||x);
             result := result + x; 
             end if;
             end loop;
end;
/

(정답)

set verify off
set serveroutput on

accept num prompt '숫자 입력 : '
declare
             v_num number(3) := &num;
             cont number(4) := 0;
begin
             forin 1..v_num loop
             cont := 0;                              // COUNT 함수: 숫자를 포함한 셀의 개수와 인수 목록에 포함된 숫자 개수를 셉니다. 

                                                          // COUNT함수로 특정범위 or 숫자배열에 포함된 숫자 필드항목 개수를 구할 수 있음.
             for j in 1..i loop
             if (mod( i , j )) = 0 then        // MOD는 첫 번째 매개변수를 두 번째 매개변수로 나눈 후의 나머지리턴합니다.
             cont := cont + 1;            
             end if;
                          end loop;
            if (cont = 2 or cont = 1) then
                          dbms_output.put_line( i );
            end if;
            end loop;
end;
/

728x90
반응형
LIST