Tools/- SQL

[MySQL] 7์žฅ ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € | ๋งค๊ฐœ๋ณ€์ˆ˜, ๋™์  SQL ํ™œ์šฉ ์˜ˆ์ œ

์Šค์œ„๋ฏผ 2024. 3. 9. 15:27

 

์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ €

: SQL์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์„œ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € ๋ฌธ๋ฒ•

DELIMITER $$
CREATE PROCEDURE ์ด๋ฆ„ ( IN ๋˜๋Š” OUT ๋งค๊ฐœ๋ณ€์ˆ˜ )
BEGIN
	ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ ์ž‘์„ฑ
END $$
DELIMITER ;

 

์˜ˆ์ œ 1) ํ…Œ์ด๋ธ” ์ „์ฒด ์„ ํƒ

USE market_db;

DROP PROCEDURE IF EXISTS user_proc;
DELIMITER $$
CREATE PROCEDURE user_proc()
BEGIN
	SELECT * FROM member; -- ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € ๋‚ด์šฉ
END $$
DELIMITER ;

CALL user_proc() ; -- ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

 

 

์˜ˆ์ œ 2) ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ์กฐ๊ฑด๋ถ€ ๊ฒ€์ƒ‰

DROP PROCEDURE IF EXISTS user_proc1;
DELIMITER $$
CREATE PROCEDURE user_proc1(IN userName VARCHAR(10)) -- ์ž…๋ ฅ๋ณ€์ˆ˜ userName ์ง€์ •
BEGIN
	SELECT * FROM member WHERE mem_name = userName; -- ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € ๋‚ด์šฉ
END $$
DELIMITER ;

CALL user_proc1("๋งˆ๋งˆ๋ฌด"); -- ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •

 

 

์˜ˆ์ œ 3) ์ถœ๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’ ๋‹ด์•„์„œ ํ˜ธ์ถœํ•˜๊ธฐ

DROP PROCEDURE IF EXISTS user_proc3;
DELIMITER $$
CREATE PROCEDURE user_proc3(
	IN txtValue CHAR(10),
    OUT outValue INT )
BEGIN
	INSERT INTO noTable VALUES(NULL, txtValue);
    SELECT MAX(id) INTO outValue FROM noTable; -- SELECT INTO ๋Š” ๊ฒ€์ƒ‰ ๊ฑธ๊ณผ๋ฅผ ๋’ค์— ๋‚˜์˜ค๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„์คŒ
END $$
DELIMITER ; -- ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”, ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ์€ ์ƒ๊ด€ X, ์‹คํ–‰๋งŒ ์•ˆํ•˜๋ฉด ๋จ

CALL user_proc3 ('ํ…Œ์ŠคํŠธ1', @myValue); -- @๋ณ€์ˆ˜๋ช…(์ถœ๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜)์— MAX(id) ๋‹ด์•„์คŒ
SELECT CONCAT('์ž…๋ ฅ๋œ ID ๊ฐ’ ==> ', @myValue); -- ์ถœ๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ˜ธ์ถœ

 

 

์˜ˆ์ œ 4) ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € ๋‚ด SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์กฐ๊ฑด๋ฌธ ๋งŒ๋“ค๊ธฐ

DROP PROCEDURE IF EXISTS ifelse_proc;
DELIMITER $$
CREATE PROCEDURE ifelse_proc(
	IN memName VARCHAR(10)
)
BEGIN
	DECLARE debutYear INT; -- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋‚ด ๋ณ€์ˆ˜ ์„ ์–ธ
    SELECT YEAR(debut_date) into debutYear FROM member
		WHERE mem_name = memName;
	IF (debutYear >= 2015) THEN
		SELECT '์‹ ์ธ ๊ฐ€์ˆ˜๋„ค์š”.' AS '๋ฉ”์„ธ์ง€';
	ELSE
		SELECT '๊ณ ์ฐธ ๊ฐ€์ˆ˜๋„ค์š”.' AS '๋ฉ”์„ธ์ง€';
	END IF;
END $$
DELIMITER ;

CALL ifelse_proc('์˜ค๋งˆ์ด๊ฑธ');

 

 

์˜ˆ์ œ 5) ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ € ๋‚ด SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ๋งŒ๋“ค๊ธฐ

DROP PROCEDURE IF EXISTS while_proc;
DELIMITER $$
CREATE PROCEDURE while_proc() -- ๋งค๊ฐœ๋ณ€์ˆ˜ X
BEGIN
	DECLARE hap INT;
    DECLARE num INT;
    SET hap = 0;
    SET num = 1;
    
    WHILE (num <= 100) DO
		SET hap = hap + num;
        SET num = num + 1;
	END WHILE;
    SELECT hap AS '1~100 ํ•ฉ๊ณ„';
END $$
DELIMITER ;

CALL while_proc();

 

 

์˜ˆ์ œ 6) ๋™์  SQL ํ™œ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ํ•˜๊ธฐ

DROP PROCEDURE IF EXISTS dynamic_proc;
DELIMITER $$
CREATE PROCEDURE dynamic_proc(
	IN tableName VARCHAR(20)
)
BEGIN
	SET @sqlQuery = CONCAT('SELECT * FROM ', tableName);
    PREPARE myQuery FROM @sqlQuery; -- ์œ„ ์ฟผ๋ฆฌ๋ฌธ ์ค€๋น„
    EXECUTE myQuery; -- ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰๋ฌธ
    DEALLOCATE PREPARE myQuery;
END $$
DELIMITER ;

CALL dynamic_proc ('member');