์คํ ์ด๋ ํ๋ก์์
: 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');