알고리즘/SQL 문법 정리

SQL 문법 정리 8 : 프로시저, CASE ,WHILE문 활용

경우42 2025. 2. 3. 17:58
반응형

SQL  문법 정리 8 : 프로시저, CASE ,WHILE문 활용

📌 스토어드 프로시저 기본 구조

DELIMITER $$
CREATE PROCEDURE 프로시저명(IN/OUT 매개변수)
BEGIN
    DECLARE 변수 선언;
    SQL 프로그래밍 코드;
END $$
DELIMITER ;

CALL 프로시저명(); -- 실행
  • DELIMITER: 문장 종료 기호 임시 변경
  • IN/OUT: 입력/출력 매개변수 지정
  • DECLARE: 지역 변수 선언

🛠️ 실전 예제

1. 기본 조회 프로시저

DROP PROCEDURE IF EXISTS emp_proc;
DELIMITER $$
CREATE PROCEDURE emp_proc()
BEGIN
    SELECT * FROM EMP;
END $$
DELIMITER ;
CALL emp_proc();
  • 기능: EMP 테이블 전체 조회

2. 매개변수 활용 조회

DROP PROCEDURE IF EXISTS emp_proc1;
DELIMITER $$
CREATE PROCEDURE emp_proc1(IN empName VARCHAR(10))
BEGIN
    SELECT * FROM emp WHERE ename = empName;
END $$
DELIMITER ;
CALL emp_proc1('clark');
  • IN 매개변수: 사원명으로 필터링

3. 데이터 삽입 프로시저

DROP PROCEDURE IF EXISTS add_dept;
DELIMITER $$
CREATE PROCEDURE add_dept(
    IN p_dept_no INT,
    IN p_dname VARCHAR(14),
    IN p_loc VARCHAR(13)
)
BEGIN
    INSERT INTO dept VALUES(p_dept_no, p_dname, p_loc);
END $$
DELIMITER ;

CALL add_dept(70, 'MARKETING', 'HOUSTON');
  • 주의사항: VARCHAR 값 작은따옴표 처리 필수

🔄 흐름 제어문 활용

1. IF문

DELIMITER $$
CREATE PROCEDURE ifProc()
BEGIN
    DECLARE myNum INT DEFAULT 200;
    IF myNum = 100 THEN
        SELECT '100입니다.';
    ELSE
        SELECT '100이 아닙니다.';
    END IF;
END $$
DELIMITER ;
  • 실행 결과: "100이 아닙니다."

2. CASE문 (학점 계산)

DROP PROCEDURE IF EXISTS caseProc;
DELIMITER $$
CREATE PROCEDURE caseProc()
BEGIN
    DECLARE point INT DEFAULT 88;
    DECLARE credit CHAR(1);
    
    CASE
        WHEN point >= 90 THEN SET credit = 'A';
        WHEN point >= 80 THEN SET credit = 'B';
        WHEN point >= 70 THEN SET credit = 'C';
        ELSE SET credit = 'F';
    END CASE;
    
    SELECT CONCAT('취득점수: ', point, ', 학점: ', credit);
END $$
DELIMITER ;
  • 결과 예시: "취득점수: 88, 학점: B"

3. WHILE문 (누적 합계)

DROP PROCEDURE IF EXISTS whileProc;
DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE hap INT DEFAULT 0;
    
    WHILE (i <= 100) DO
        SET hap = hap + i;
        SET i = i + 1;
    END WHILE;
    
    SELECT '1~100 합계: ', hap;
END $$
DELIMITER ;
  • 결과: 5050

4. 조건부 WHILE문 (제어문 활용)

DELIMITER $$
CREATE PROCEDURE whileProc2()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE hap INT DEFAULT 0;
    
    myWhile: WHILE (i <= 100) DO
        IF (i%4 = 0) THEN
            SET i = i + 1;
            ITERATE myWhile; -- 다음 반복으로 건너뜀
        END IF;
        
        IF (hap > 1000) THEN
            LEAVE myWhile; -- 루프 탈출
        END IF;
        
        SET hap = hap + i;
        SET i = i + 1;
    END WHILE;
    
    SELECT CONCAT('결과값: ', hap);
END $$
DELIMITER ;
반응형