본문 바로가기
Coding/데이터베이스

프로시저

by 찡콩찡 2022. 7. 4.

 

프로시저란

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;