SQL에도 다른 프로그래밍 언어와 비슷한 분기, 흐름 제어, 반복 등의 기능이 있음
이때 프로시저에서 ;를 중복해서 사용하기에 구분을 위해 마침을 수정한다
이때 delimiter를 사용하여 자신이 원하는 기호를 마침 처리 기호로 사용한다
drop procedure if exists ifProc;
delimiter $$
create procedure ifProc()
begin
declare var1 int;
set var1 = 100;
if var1 = 100 then
select '100입니다';
else
select '100이 아닙니다';
end if;
end $$
delimiter ;
call ifProc();

drop procedure if exists ifProc; = 함수가 이미 있을시 삭제
delimiter $$ = 마침 처리 수정
create procedure ifProc() = 함수 생성
begin ~ end $$ = 함수 정의
delimiter ; = 마침처리 다시 복귀
call ifProc(); = 함수 콜

한번 함수를 정의 하면 계속 기억된다
프로지서 문제가 나온다면? 풀 수 있는가?
use employees;
delimiter $$
create procedure ifProc2()
begin
declare hireDate date;
declare curDate date;
declare days int;
select hire_Date into hireDate
from employees.employees
where emp_no = 10001;
set curDate = current_date();
set days = datediff(curDate, hireDate);
if (days/365) >= 5 then
select concat ('입사한지 ', days, '일이나 지났습니다. 축하합니다!') as '메세지';
else
select '입사한지' + days + '일밖에 안되었네요. 열심히 일하세요' as '메세지';
end if
end $$
delimiter ;
call ifProc2();

중요한 요소
프로시저에 파라미터를 넣지 못한다 => 필요시마다 수정을 해야한다 = 뭔가 이상함
어떻게 파라미터 = 매개변수를 넣을 수 있는가?
create procedure ifProc2()
에서 ()안에 넣어주면 된다
create procedure ifProc2(in num int)
in 변수명 type 형식으로 넣는다

잘 나오는 것을 확인할 수 있다
import pymysql;
conn = pymysql.connect(host = "127.0.0.1",
user = "root",
password = "1234",
db = "employees",
charset = "utf8")
cur = conn.cursor()
sql = """
call ifProc2(10001);
"""
cur.execute(sql)
rows = cur.fetchall()
for row in rows :
print("나온거 = " + row[0])
conn.close()
pymysql에서는 이렇게 호출해볼 수 있다

import pymysql;
conn = pymysql.connect(host = "127.0.0.1",
user = "root",
password = "1234",
db = "employees",
charset = "utf8")
num = input("찾는 사원 넘 : ")
cur = conn.cursor()
sql = f"""
call ifProc2({num});
"""
cur.execute(sql)
rows = cur.fetchall()
for row in rows :
print("나온거 = " + row[0])
conn.close()
input을 사용해 원하는 숫자를 넣어서 찾는 것도 가능하다
import pymysql;
conn = pymysql.connect(host = "127.0.0.1",
user = "root",
password = "1234",
db = "employees",
charset = "utf8")
num = input("찾는 사원 넘 : ")
cur = conn.cursor()
sql = """
call ifProc2(%s);
"""
cur.execute(sql, (10002, ))
rows = cur.fetchall()
for row in rows :
print("나온거 = " + row[0])
conn.close()
이쪽이 좀 더 선호된다고 한다
drop procedure if exists caseProc()
delimiter $$
create procedure caseProc()
begin
declare point int;
declare credit char(1);
set point = 77;
case
when point >= 90 then
set credit = 'A';
when point >= 80 then
set credit = 'B';
when point >= 70 then
set credit = 'C';
when point >= 60 then
set credit = 'D';
else
set credit = 'F';
end case;
select concat('취득 점수 ==>', point), concat('학점 ==>', credit);
end $$
delimiter ;
call caseProc();

switch case와 같은 문법도 적용할 수 있다
'공부' 카테고리의 다른 글
| 컴퓨터 구조 - 기억장치 모듈 설계, 캐시 메모리(2025 11 11) (0) | 2025.11.11 |
|---|---|
| 그래픽스 Opengl - Barycentric 좌표 (0) | 2025.11.11 |
| 컴퓨터 구조 - 기억장치 (2025 11 10) (0) | 2025.11.10 |
| QA - Testing (0) | 2025.11.08 |
| 컴퓨터 구조 - 기억장치 (2025 11 04) (0) | 2025.11.04 |