๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/SQL Database

[SQL / Database] ์ €์žฅ ํ”„๋กœ์‹œ์ €(Stored procedure) ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

by Connecting-the-dots 2023. 6. 4.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก์ €์žฅ ํ”„๋กœ์‹œ์ €(Stored procedure) ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

๐Ÿ’œ ์ €์žฅ ํ”„๋กœ์‹œ์ €(Stored procedure) ์•Œ์•„๋ณด๊ธฐ

  • ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” SQL ๋ฌธ์ด ์žˆ์„ ๋•Œ ๋งค๋ฒˆ ๊ธธ๊ฒŒ ํƒ€์ดํ•‘ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•ด์„œ ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  • ์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ SQL ๋ฌธ ์ €์žฅ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’œ DBeaver ์—์„œ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉํ•˜๊ธฐ

  • ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•˜์œ„ ํ•ญ๋ชฉ์ธ Procedures ๋ฅผ ์šฐํด๋ฆญ ํ›„ Create New Procedure ๋ฅผ ํด๋ฆญํ•œ๋‹ค.

  • ๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ์ฐฝ์ด ๋œจ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ํ”„๋กœ์‹œ์ €๋ช…์„ ์ •ํ•˜์—ฌ ์ž…๋ ฅํ•œ ํ›„ ํ™•์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

  • ๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜๋˜๋Š”๋ฐ, Source ํƒญ์—์„œ BEGIN ๊ณผ END ์‚ฌ์ด์— ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  • ์ฃผ์˜ํ•  ์ ์€ SELECT ๋ฌธ ๋์— ์„ธ๋ฏธ์ฝœ๋ก (;) ์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ์ž˜ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด์ œ SQL ํŽธ์ง‘๊ธฐ์—์„œ CALL ํ”„๋กœ์‹œ์ €๋ช…() ์˜ ํ˜•ํƒœ๋กœ ์‹คํ–‰ํ•˜๋ฉด BEGIN ๊ณผ END ์‚ฌ์ด ์— ์ €์žฅํ•ด๋‘” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    (ํ˜น์‹œ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด CALL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช….ํ”„๋กœ์‹œ์ €๋ช…() ์œผ๋กœ ์‹คํ–‰ํ•ด๋ณด์ž!)

๐Ÿ’œ SQL ๋ช…๋ น์–ด๋กœ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉํ•˜๊ธฐ

// ๊ธฐ์กด ํ”„๋กœ์‹œ์ € ์‚ญ์ œํ•  ๋•Œ
DROP PROCEDURE IF EXISTS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช….ํ”„๋กœ์‹œ์ €๋ช…;

// ํ”„๋กœ์‹œ์ € ์ €์žฅํ•  ๋•Œ
DELIMITER $$
$$
CREATE PROCEDURE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช….ํ”„๋กœ์‹œ์ €๋ช…()
BEGIN
  SELECT * FROM ํ…Œ์ด๋ธ”๋ช… where ์กฐ๊ฑด๋ฌธ;
END 
$$
DELIMITER ;

// ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉํ•  ๋•Œ
CALL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช….ํ”„๋กœ์‹œ์ €๋ช…();
  • ๊ธฐ์กด์— ๊ฐ™์€ ์ด๋ฆ„์˜ ํ”„๋กœ์‹œ์ €๊ฐ€ ์กด์žฌํ•˜๋ฉด ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ, ๊ธฐ์กด์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ๋•Œ ์œ„์ฒ˜๋Ÿผ DROP PROCEDURE ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • SQL ๋ฌธ ์ž‘์„ฑ ์‹œ ๋ฌธ์žฅ๋ผ๋ฆฌ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋ฏธ์ฝœ๋ก (;) ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด ๋•Œ๋ฌธ์— ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ DELIMITER ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • DELIMITER ๋Š” ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž๋ฅผ $$ ์ด๋Ÿฐ ๊ฑธ๋กœ ์ž„์‹œ๋กœ ๋ณ€ํ™˜ํ•ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ์˜ SQL ๋ช…๋ น์–ด์ด๋‹ค.

๐Ÿ’œ ์ €์žฅ ํ”„๋กœ์‹œ์ € ๋ฏธ์‚ฌ์šฉ/์‚ฌ์šฉ ์‹œ ์†๋„ ๋น„๊ตํ•˜๊ธฐ

์ถœ์ฒ˜: ์ฝ”๋”ฉ์• ํ”Œ

  • ์ž‘์„ฑ๋œ SQL ๋ฌธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์‹คํ–‰๋œ๋‹ค.
    1. ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•์˜ค๋ฅ˜ ์กด์žฌ ์—ฌ๋ถ€ ์ฒดํฌ
    2. ํ…Œ์ด๋ธ” ํ™•์ธ ๋ฐ ํ•ด๋‹น ํ…Œ์ด๋ธ” ์—ด๋žŒ๊ถŒํ•œ ์ฒดํฌ
    3. ์ด๋ฏธ ์‹คํ–‰๋œ ์  ์žˆ๋Š” ์ฟผ๋ฆฌ ์—ฌ๋ถ€ ์ฒดํฌ(์‹คํ–‰๋œ ์  ์žˆ๋Š” ๊ฒฝ์šฐ 4, 5๋ฒˆ ๊ณผ์ • ์ƒ๋žต)
    4. ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ์ตœ์ ์˜ ๋ฐฉ๋ฒ• ์„ ํƒ
    5. ํ•ด๋‹น ์ฟผ๋ฆฌ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•์„ ์ž„์‹œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ(์žฌ์‚ฌ์šฉ ๋Œ€๋น„)
    6. ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ ํ›„ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
  • ์ €์žฅ ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉ ์‹œ 3๋ฒˆ ๊ณผ์ •์—์„œ ์ฒดํฌ ํ›„ ์šฐ์ธก์œผ๋กœ ๋น ์ ธ์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์•„์ฃผ ์กฐ๊ธˆ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์‹ค์ œ CPU ์—์„œ์˜ SQL ๋ฌธ ์ž‘๋™์†๋„๋Š” ์ง์ ‘ SELECT ๋ฌธ์„ ์“ฐ๋‚˜ ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €๋ฅผ ์“ฐ๋‚˜ ์ฐจ์ด๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.
728x90
๋ฐ˜์‘ํ˜•