728x90

๐Ÿ’ปํ”„๋กœ์‹œ์ €(์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ)

ํ”„๋กœ์‹œ์ €๋Š” ์ผ๋ จ์˜ ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜  ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ์˜ ์ง‘ํ•ฉ์ด๋‹ค.  ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”  BLOCK์ด๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ์† ์‹คํ–‰ ๋˜๋Š” ๊ตฌํ˜„์ด ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”  PL/SQL BLOCK์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿ’ปํ”„๋กœ์‹œ์ €(์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๐Ÿ”‘๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณด์•ˆ์˜ ํ–ฅ์ƒ

MYSQL์˜ ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์€ ์ž์ฒด์ ์ธ ๋ณด์•ˆ ์„ค์ • ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„๋กœ ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•ด์„œ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋˜๋Š” ํŠน์ • ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๋“ฑ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ์„ ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค๋ฉด SQL ์ธ์ ์…˜๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ ์‚ฌ๊ณ ๋Š” ํ”ผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๐Ÿ”‘๊ธฐ๋Šฅ์˜ ์ถ”์ƒํ™”

์ผ๋ จ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋ณต์žกํ•˜์—ฌ , MYSQL์˜ Auto_increment๋ฅผ ์ด์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋งŒ์•ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ๋ จ๋ฒˆํ˜ธ ์ƒ์„ฑ์šฉ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด ๊ฐœ๋ฐœํ•˜๋Š” ์–ธ์–ด๋ณ„๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์„๋ฟ๋”๋Ÿฌ ์ง์ ‘ SQL ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋ จ๋ฒˆํ˜ธ ์ƒ์„ฑ์šฉ ํ”„๋กœ๊ทธ๋žจ์„ MYSQL ์„œ๋ฒ„์˜ ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ SQL ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ”‘์ ˆ์ฐจ์  ๊ธฐ๋Šฅ ๊ตฌํ˜„ 

DBMS ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL์ฟผ๋ฆฌ๋Š” ์ ˆ์ฐจ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, SQL ์ฟผ๋ฆฌ์—์„œ๋Š” IF๋‚˜ WHILE๊ณผ ๊ฐ™์€ ์ œ์–ด ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์€ DBMS ์„œ๋ฒ„์—์„œ ์ ˆ์ฐจ์ ์ธ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐ€๋” SQL ๋ฌธ์žฅ์œผ๋กœ ์ ˆ๋Œ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€๊ณตํ•œ ํ›„ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰์„ ํ•˜์ง€๋งŒ  ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด ์ ˆ์ฐจ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์ตœ์†Œํ•œ ๋„คํŠธ์›Œํฌ ๊ฒฝ์œ ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋งŒํผ์€ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๋ถˆํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์ค„์ผ  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”‘๊ฐœ๋ฐœ ์—…๋ฌด์˜ ๊ตฌ๋ถ„

์ˆœ์ˆ˜ํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ์กฐ์ง๊ณผ DBMS ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์กฐ์ง์ด ๋ณ„๋„๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค๋ฉด DBMS์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์กฐ์ง์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด API์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด ์ œ๊ณตํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋Š” ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ์—ญํ• ์„ ๊ตฌ๋ถ„ํ•ด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ”‘๋„คํŠธ์›Œํฌ ์†Œ์š”์‹œ๊ฐ„ ์ ˆ๊ฐ

์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ตฌ๊ฐ„์— ์กด์žฌํ•˜๋ฏ€๋กœ SQL์˜ ์‹คํ–‰ ์„ฑ๋Šฅ์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฝ์œ ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋งŽ์€ ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฟผ๋ฆฌ๊ฐ€ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฝ์œ ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์—์„œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ 100๋ฒˆ, 200๋ฒˆ์”ฉ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฝ์œ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ์†Œ์š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ปํ”„๋กœ์‹œ์ €(์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ)์˜ ๋‹จ์ 

 

๐Ÿ”จ๋‚ฎ์€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ 

์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์€ MYSQL ์—”์ง„์—์„œ ํ•ด์„๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค. ํ•˜์ง€๋งŒ MYSQL ์„œ๋ฒ„๋Š” ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ์  ์ฝ”๋“œ ์ฒ˜๋ฆฌ์— ์ค‘์ ์„ ๋‘๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

 

 

๐Ÿ”จ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์˜ ์กฐ๊ฐํ™”

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์น˜๋‚˜ ๋ฐฐํฌ ์ž‘์—…์ด ๊ฐˆ์ˆ˜๋ก ๋ณต์žกํ•ด์ง„๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์ž๋ฐ”์™€ MYSQL์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ถ„์‚ฐ๋œ๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์น˜๋‚˜ ๋ฐฐํฌ๊ฐ€ ๋ณต์žกํ•ด ์„œ์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋˜ํ•œ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ’ปํ”„๋กœ์‹œ์ €(์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ)์˜ ์‚ฌ์šฉ ์˜ˆ์ œ

1. ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ

  • DEFINER : ์ ‘๊ทผ ๊ถŒํ•œ
  • PROCEDURE : ํ”„๋กœ์‹œ์ € ์ด๋ฆ„
  • ๋งค๊ฐœ๋ณ€์ˆ˜ + ํƒ€์ž…
  • SET ๋ณ€์ˆ˜ ์„ค์ •
    • ๊ธฐํ˜ธ๊ฐ€ ์—†์„ ๋•Œ ํ”„๋กœ์‹œ์ € ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ดˆ๊ธฐํ™”
    • @๊ฐ€ ์žˆ์œผ๋ฉด ํ”„๋กœ์‹œ์ €๊ฐ€ ๋๋‚˜๋„ ๊ณ„์† ์œ ์ง€
  • CONCAT() : ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ
  • PREPARE : ์‹คํ–‰ ์ค€๋น„
  • EXECUTE : PREPARE ๋œ ๊ฒƒ์„ ์‹คํ–‰ 

 

โš’ํ”„๋กœ์‹œ์ € ๊ธฐ๋ณธ ํ˜•ํƒœ

CREATE DEFINER=`DB๊ถŒํ•œ์ด ์žˆ๋Š” ์•„์ด๋””`@`%` PROCEDURE `ํ”„๋กœ์‹œ์ €์ด๋ฆ„`
BEGIN
  SELECT * 
  FROM ํ…Œ์ด๋ธ”๋ช…
END

DB์— ์ ‘์†ํ•˜๋Š” ID๋ช…์„ ์ ์–ด์ค€๋‹ค. ์—ฌ๊ธฐ์— ์ ๋Š” ID๋Š” ๋ฌด์กฐ๊ฑด ๊ถŒํ•œ์ด ์žˆ๋Š” ID๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

 

โš’ํ”„๋กœ์‹œ์ € ์ธ์ž ๊ฐ’ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ

CREATE DEFINER=`DB๊ถŒํ•œ์ด ์žˆ๋Š” ์•„์ด๋””`@`%` PROCEDURE `ํ”„๋กœ์‹œ์ €์ด๋ฆ„`(
   IN ๋ณ€์ˆ˜๋ช… ์ž๋ฃŒํ˜•   
   OUT ๋ณ€์ˆ˜๋ช… ์ž๋ฃŒํ˜• 
)
BEGIN
    SELECT *
    FROM ํ…Œ์ด๋ธ”๋ช…
    WHERE ์ปฌ๋Ÿผ๋ช… = ๋ณ€์ˆ˜๋ช…
END

๋ฐ›์„ ๋ณ€์ˆ˜๋ช…๊ณผ ์ž๋ฃŒํ˜• (INT, VARCHAR(40) ๋“ฑ)์„ ์ž…๋ ฅํ•ด์ค€๋‹ค. ๋ฐ›์„ ๋•Œ๋Š” IN์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์€ OUT

 

 

โš’ํ”„๋กœ์‹œ์ € ๋ณ€์ˆ˜ ํ• ๋‹น

 

CREATE DEFINER=`DB๊ถŒํ•œ์ด ์žˆ๋Š” ์•„์ด๋””`@`%` PROCEDURE `ํ”„๋กœ์‹œ์ €์ด๋ฆ„`(
    IN ๋ณ€์ˆ˜๋ช… ์ž๋ฃŒํ˜•
)
BEGIN
    SET @v_code = '123';
    SELECT *
    FROM ํ…Œ์ด๋ธ”๋ช…
    WHERE ์ปฌ๋Ÿผ = ๋ณ€์ˆ˜๋ช… AND
    	  ์ปฌ๋Ÿผ = @v_code
EN

๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๋ฐ”๋กœ ๊ฐ’์„ ์ ์–ด๋„ ๋˜์ง€๋งŒ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (@v_code = (select,,,,from...))ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

โš’ํ”„๋กœ์‹œ์ € ์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ IF, ELSEIF, OR, AND..

CREATE DEFINER=`DB์•„์ด๋””`@`%` PROCEDURE `ํ”„๋กœ์‹œ์ €๋ช…`(
    IN ๋ณ€์ˆ˜๋ช… ์ž๋ฃŒํ˜•
)
BEGIN
    SET @v_code = '123';
    IF @v_code!='' THEN
      SELECT *
      FROM ํ…Œ์ด๋ธ”๋ช…
      WHERE ์ปฌ๋Ÿผ = ๋ณ€์ˆ˜๋ช… AND
    	    ์ปฌ๋Ÿผ = @v_code
    END IF;
END

IF ์กฐ๊ฑด๋ฌธ OR ์กฐ๊ฑด๋ฌธ THEN
์‹คํ–‰ ๋ฌธ๊ตฌ
ELSE IF ์กฐ๊ฑด๋ฌธ THEN
์‹คํ–‰ ๋ฌธ๊ตฌ
END IF;
๋“ฑ์˜ ํ˜•ํƒœ๋กœ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ
NULL ์ฒดํฌ๋Š” IS NOT NULL / IS NULL์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

โš’ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ ์˜ˆ์ œ

CREATE DEFINER='root'@'%' PROCEDURE test_prc(id int(10))
BEGIN
SET @t1 = CONCAT('SELECT * FROM test_', id);
PREPARE s FROM @t1;
EXECUTE s;
END

์ด๋Ÿฐ ์‹์˜ ํ”„๋กœ์‹œ์ €๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋ฐฐ์—ด ๋ณ€์ˆ˜์— ๋‹ด์•„์„œ LOOPING ๋Œ๋ ค ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 


โ€‹

REFERENCE

https://unlimitedcoding.tistory.com/15

https://velog.io/@ym1085/MySQL-%ED%94%84% EB% A1% 9C% EC% 8B% 9C% EC% A0%80% EB% 9E%80

728x90