Coding/데이터베이스
프로시저
찡콩찡
2022. 7. 4. 13:29
프로시저란
sql server에서 제공하는 프로그래밍 기능이다. 쿼리문을 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용한다. 길고 여러개의 쿼리를 사용하기보다는 프로시저에 저장하고 저장된 프로시저를 호출하여 프로그래밍을 하는것이 효율적이다.
셋팅 후 문장 지워주기

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

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;
