delimiter $$
CREATE PROCEDURE ํ๋ก์์ ์ด๋ฆ(IN/OUT ํ๋ผ๋ฏธํฐ์ด๋ฆ ํ๋ผ๋ฏธํฐํ์
)
BEGIN
body
END
$$
delimiter ;
call ํ๋ก์์ ์ด๋ฆ();
โ๏ธ IN/OUT์ ๋ช ์ํ์ง ์์ผ๋ฉด, default ๊ฐ์ธ IN์ผ๋ก ๋์
๋ ์ ์์ ๊ณฑ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋ก์์
delimiter $$
CREATE PROCEDURE product(IN a int, IN b int, OUT result int)
BEGIN
SET result = a * b;
END
$$
delimiter ;
call product(5,7, @result);
select @result;
โ๏ธ@๋ณ์๋ช : ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ณ์
๋ ์ ์๋ฅผ ๋ง๋ฐ๊พธ๋ ํ๋ก์์
delimiter $$
CREATE PROCEDURE swap(INOUT a int, INOUT b int)
BEGIN
set @temp = a;
set a = b;
set b = @temp;
END
$$
delimiter ;
set @a = 5, @b = 7;
call swap(@a, @b);
select @a, @b;
โ๏ธ INOUT : IN, OUT ์ญํ ๋ชจ๋ ์ํ
๊ฐ ๋ถ์๋ณ ํ๊ท ์ฐ๋ด์ ๊ฐ์ ธ์ค๋ ํ๋ก์์
delimiter $$
CREATE PROCEDURE get_dept_avg_salary()
BEGIN
select dept_id, avg(salary)
from employee
group by dept_id;
END
$$
delimiter;
call get_dept_avg_salary();
์ฌ์ฉ์๊ฐ ํ๋กํ ๋๋ค์์ ๋ฐ๊พธ๋ฉด ์ด์ ๋๋ค์์ ๋ก๊ทธ์ ์ ์ฅํ๊ณ ์ ๋๋ค์์ผ๋ก ์ ๋ฐ์ดํธํ๋ ํ๋ก์์
select * from users; -- id, nickname
select * from nickname_logs; -- ๋๋ค์์ history ๊ธฐ๋ก
delimiter $$
CREATE PROCEDURE change_nickname(user_id INT, new_nick varchar(30))
BEGIN
insert into nickname_logs(
select id, nickname, now() from users where id = user_id);
update users set nickname = new_nick where id = user_id;
END
$$
delimiter;
call change_nickname(1,'taetae');
| Stored Procedure | Stored Function | |
|---|---|---|
| create ๋ฌธ๋ฒ | CREATE PROCEDURE | CREATE FUNCTION |
| return ํค์๋๋ก ๊ฐ ๋ฐํ | ๋ถ๊ฐ๋ฅ(SQL server๋ ์ํ์ฝ๋ ๋ฐํ์ฉ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ) | ๊ฐ๋ฅ(MySQL, SQL server๋ ๊ฐ ๋ฐํํ๋ ค๋ฉด ํ์) |
| ํ๋ผ๋ฏธํฐ๋ก ๊ฐ ๋ฐํ | ๊ฐ๋ฅ(๊ฐ์ ๋ฐํํ ๋, ํ์) | ์ผ๋ถ ๊ฐ๋ฅ(oracle ๊ฐ๋ฅํ๋ ๊ถ์ฅ์ํจ, postgreSQL ๊ฐ๋ฅ) |
| ๊ฐ ๋ฐํ | ํ์ ์๋ | ํ์ |
| SQL statement์์ ํธ์ถ | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ |
| transaction ์ฌ์ฉ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ(oracle์ ๊ฒฝ์ฐ ๊ฐ๋ฅ) |
| ์ฃผ๋ ์ฌ์ฉ ๋ชฉ์ | business logic | computation |
| ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ function ํธ์ถ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
| ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ procedure ํธ์ถ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
| resultset(table) ๋ฐํ | cursor๋ ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐํ | ๋จ์ผ๊ฐ ๋๋ ํ ์ด๋ธ ํํ๋ก ๋ณํ |
| precompiled execution plan | ์ฒซ ์คํ ์ execution plan์ด ์์ฑ๋๊ณ ์บ์๋จ, ์ดํ ์คํ ์ ์บ์๋ execution plan ์ฌ์ฌ์ฉ ๊ฐ๋ฅ | ์ฒซ ์คํ ์ execution plan์ด ์์ฑ๋๊ณ ์บ์๋จ |
| try-catch ์ฌ์ฉ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
โ๏ธ ํธ๋์ญ์
โ
์ฌ๋ฌ๊ฐ์ SQL๋ฌธ์ ํ๋๋ก ๋ฌถ์ด์ ์ฌ์ฉํ๊ณ ์ถ์๋, ์ฌ๋ฌ SQL๋ฌธ์ด ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ๋ฐ์๋๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์์ ๊ฒ์ฒ๋ผ ๋์
=> Stored Procedure์ ์ฃผ์ ์ฌ์ฉ ๋ชฉ์ ์ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ