알고리즘/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 ;
반응형