본문 바로가기
공부

데이터베이스 - SQL 프로그래밍 (2025 11 10)

by 라이티아 2025. 11. 10.

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와 같은 문법도 적용할 수 있다