찡콩찡 2022. 7. 4. 13:29

 

프로시저란

sql server에서 제공하는 프로그래밍 기능이다. 쿼리문을 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용한다. 길고 여러개의 쿼리를 사용하기보다는 프로시저에 저장하고 저장된 프로시저를 호출하여 프로그래밍을 하는것이 효율적이다.

 

셋팅 후 문장 지워주기

변수선언 / 수행해야하는 명령 하나

변수는 10입니다. 라고 선언

1번
declare 
 v_deptno number(2) not null :=10;
 begin
 dbms_output.put_line('V_DEPTNO: '||V_DEPTNO);
 END;

다음 변수 선언 시, 화면을 다 지워져야 함

 

2번
% 같은 데이터 타입 가져오기

declare 
 v_deptno DEPT.DEPTNO%TYPE := 50;
 begin
 dbms_output.put_line('V_DEPTNO: '||V_DEPTNO);
 END;

DEPT에 저장되어있는 한 ROW 통째로 가져오세요! 40번 부서에 한행의 정보를 다 빼와라!

 

3번
DECLARE 
  V_DEPT_ROW DEPT%ROWTYPE;
BEGIN
 SELECT DEPTNO,DNAME,LOC INTO V_DEPT_ROW
 FROM DEPT
 WHERE DEPTNO=40;
 DBMS_OUTPUT.PUT_LINE('DEPTNO: '||V_DEPT_ROW.DEPTNO);
 DBMS_OUTPUT.PUT_LINE('DNAME: '||V_DEPT_ROW.DNAME);
 DBMS_OUTPUT.PUT_LINE('LOC: '||V_DEPT_ROW.LOC);
 END;

 

4번
  --2를 나눈 나머지가 1인 경우 V_NUMBER는 홀수 입니다. 출력
  
DECLARE
 V_NUMBER NUMBER :=13;
 BEGIN
  IF MOD(V_NUMBER,2)=1 THEN
  DBMS_OUTPUT.PUT_LINE('V_NUMBER는 홀수입니다.');
  END IF;
END;

 

 

5번
DECLARE
 V_NUMBER NUMBER :=14;
 BEGIN
  --2를 나눈 나머지가 1인 경우 V_NUMBER는 홀수 입니다. 출력
  IF MOD(V_NUMBER,2)=1 THEN
  DBMS_OUTPUT.PUT_LINE('V_NUMBER는 홀수입니다.');
  ELSE 
  DBMS_OUTPUT.PUT_LINE('V_NUMBER는 짝수입니다.');
  END IF;
END;

 

6번
DECLARE
 V_SCORE NUMBER :=87;
 BEGIN
  IF V_SCORE >= 90 THEN
    DBMS_OUTPUT.PUT_LINE ('A');
  ELSIF  V_SCORE >=80 THEN
    DBMS_OUTPUT.PUT_LINE ('B');
  ELSIF  V_SCORE >=70 THEN
    DBMS_OUTPUT.PUT_LINE ('C');
  ELSIF V_SCORE >=60 THEN
    DBMS_OUTPUT.PUT_LINE ('D');
  ELSE
   DBMS_OUTPUT.PUT_LINE ('F');
  END IF;
END;

 

7번
DECLARE
 V_SCORE NUMBER :=87;
 BEGIN
  CASE TRUNC(V_SCORE/10)
  WHEN 10 THEN DBMS_OUTPUT.PUT_LINE ('A');
  WHEN 9 THEN DBMS_OUTPUT.PUT_LINE ('B');
  WHEN 8 THEN DBMS_OUTPUT.PUT_LINE ('C');
  WHEN 7 THEN DBMS_OUTPUT.PUT_LINE ('D');
  ELSE DBMS_OUTPUT.PUT_LINE ('F');
END CASE;
END;

 

8번
DECLARE
 V_SCORE NUMBER :=87;
 BEGIN
  CASE 
  WHEN V_SCORE >=90 THEN DBMS_OUTPUT.PUT_LINE ('A');
  WHEN V_SCORE >=80 THEN DBMS_OUTPUT.PUT_LINE ('B');
  WHEN V_SCORE >=70 THEN DBMS_OUTPUT.PUT_LINE ('C');
  WHEN V_SCORE >=60 THEN DBMS_OUTPUT.PUT_LINE ('D');
  ELSE DBMS_OUTPUT.PUT_LINE ('F');
END CASE;
END;

 

 

 

9번 V_NUM의 값 1증가, EXIT WHEN V_NUM 값이 4초과이면 LOOP 탈출
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM+1;
    EXIT WHEN V_NUM >4;
  END LOOP;
END;

 

10번.  짝수만 찍히게 출력하라
DECLARE
 V_NUM NUMBER :=2;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM+2;
    EXIT WHEN V_NUM >10;
  END LOOP;
END;

 

11. 1-3-5-7-9만 출력하게 하라
DECLARE
 V_NUM NUMBER :=1;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM+2;
    EXIT WHEN V_NUM >10;
  END LOOP;
END;

 

12. 10부터 1까지 찍히게 하라
DECLARE
 V_NUM NUMBER :=10;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM-1;
    EXIT WHEN V_NUM <1;
  END LOOP;
END;
DECLARE
 V_NUM NUMBER :=10;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM-1;
    EXIT WHEN V_NUM=0;
  END LOOP;
END;

 

13. 10부터 2까지 짝수만 찍기 --- exit사용!
DECLARE
 V_NUM NUMBER :=10;
 BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE('현재 V_NUM: ' ||V_NUM);
    V_NUM := V_NUM-2;
    EXIT WHEN V_NUM=0;
  END LOOP;
END;

 

14. for문 사용 : 0부터 4를 사용
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
 FOR i IN 0..4 LOOP
  DBMS_OUTPUT.PUT_LINE('현재 i의 값: '||i );
  END LOOP;
END;

 

 

15.REVERSE 거꾸로!
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
  FOR i IN REVERSE 0..4 LOOP
    DBMS_OUTPUT.PUT_LINE('현재 i의 값: '||i );
  END LOOP;
END;

 

16. CONTINUE WHEN 홀수이면; 홀수 건너뛰고 짝수만 나오게 해줘! 라는 의미
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
  FOR i IN 0..4 LOOP
    CONTINUE WHEN MOD(I,2)=1;
    DBMS_OUTPUT.PUT_LINE('현재 i의 값: '||i );
  END LOOP;
END;

 

17.홀수만 찍히게 해줘! 
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
  FOR i IN 0..4 LOOP
    CONTINUE WHEN MOD(I,2)=0;
    DBMS_OUTPUT.PUT_LINE('현재 i의 값: '||i );
  END LOOP;
END;

 

18. 0부터 10까지 짝수만 찍히게 해줘!  //홀수일때 건너뛰어야 하니까 나머지가 1이여야 함 
DECLARE
 V_NUM NUMBER :=0;
 BEGIN
  FOR i IN 0..10 LOOP
    CONTINUE WHEN MOD(I,2)=1;
    DBMS_OUTPUT.PUT_LINE('현재 i의 값: '||i );
  END LOOP;
END;