Stored Function์ด๋ž€?

0taetaeยท2025๋…„ 1์›” 1์ผ
post-thumbnail

๐Ÿ’กStore Function์ด๋ž€?

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํ•จ์ˆ˜
  • DBMS์— ์ €์žฅ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜
  • SQL์˜ select, insert, update, delete statement์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • loop๋ฅผ ๋Œ๋ฉด์„œ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰,
  • case ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์— ๋”ฐ๋ผ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ, ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ฑฐ๋‚˜ ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’กStore Function ์ƒ์„ฑํ•˜๊ธฐ

  • ์ž„์ง์› ID๋ฅผ ์—ด์ž๋ฆฌ ์ •์ˆ˜๋กœ ๋žœ๋คํ•˜๊ฒŒ ๋ฐœ๊ธ‰.
    ์ด๋•Œ, ID์˜ ๋งจ ์•ž์ž๋ฆฌ๋Š” 1
    delimiter $$
    CREATE FUNCTION id_generator()  -- ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ด„ํ˜ธ์•ˆ์€ ๊ณต๋ฐฑ 
    RETURNS int  -- RETURNS + ๋ฐ˜ํ™˜ ํƒ€์ž… 
    NO SQL  -- MySQL์—์„œ stored function์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ • ์ง€์ •์ž
    BEGIN
       RETURN (1000000000 + floor(rand() * 1000000000));  -- rand() : 0 ~ 1 ์‚ฌ์ด์˜ ์ •์ˆ˜, floor() : ๋‚ด๋ฆผ 
    END
    $$
    delimiter;

    delimiter ๋ž€โ“

    function๋‚ด๋ถ€์—์„œ ์ •์˜ํ•  ๋•Œ ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ์‚ฌ์šฉํ• ๊ฑด๋ฐ
    delimiter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚ด๋ถ€์— ์žˆ๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ๋งŒ๋‚ฌ์„๋•Œ function์ด ๋๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
    ๊ทธ๋ž˜์„œ, delimiter๋กœ ;๋ฅผ $$๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  function์„ ์ž‘์„ฑํ•œ ํ›„ ๋‹ค์‹œ delimiter๋กœ $$๋ฅผ ;๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค.

  • ๋ถ€์„œ ID๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ๋ถ€์„œ์˜ ํ‰๊ท  ์—ฐ๋ด‰์„ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜
    -- ๋ณ€์ˆ˜ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ• 
    delimiter $$
    CREATE FUNCTION dept_avg_salary(d_id int)  -- (ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํƒ€์ž…)
    RETURNS int
    READS SQL DATA
    BEGIN
       DECLARE avg_sal int;  -- DECLARE : ๋ณ€์ˆ˜ ์„ ์–ธ 
       select avg(salary) into avg_sal
          from employee
          where dept_id = d_id;
       RETURN avg_sal;
    END
    $$
    delimiter ;
    
    -- ๋ณ€์ˆ˜ ์„ ์–ธ ์—†์ด ์ž‘์„ฑ ๋ฐฉ๋ฒ• : @ ์‚ฌ์šฉํ•˜๊ธฐ 
    delimiter $$
    CREATE FUNCTION dept_avg_salary(d_id int) 
    RETURNS int
    READS SQL DATA
    BEGIN
       select avg(salary) into @avg_sal
          from employee
          where dept_id = d_id;
       RETURN @avg_sal;
    END
    $$
    delimiter ;
    
    -- ๋ถ€์„œ ์ •๋ณด์™€ ๋ถ€์„œ ํ‰๊ท  ์—ฐ๋ด‰
    SELECT *, dept_avg_salary(id)
    FROM department;
  • ํ† ์ต 800 ์ด์ƒ์„ ์ถฉ์กฑํ–ˆ๋Š”์ง€
    delimiter $$
    CREATE FUNCTION toeic_pass_fail(toeic_score int)
    RETURNS char(4)
    NO SQL
    BEGIN
       DECLARE pass_fail char(4);
       IF toeic_score is null THEN SET pass_fail = 'fail';
       ELSEIF toeic_score < 800 THEN SET pass_fail = 'fail';
       ELSE SET pass_fail = 'pass';
       END IF;
       RETURN pass_fail;
    END
    $$
    delimiter ;
    
    -- ๋ณ€์ˆ˜ ์„ ์–ธ ์—†์ด ์ž‘์„ฑ ๋ฐฉ๋ฒ• : @ ์‚ฌ์šฉํ•˜๊ธฐ 
    delimiter $$
    CREATE FUNCTION toeic_pass_fail(toeic_score int)
    RETURNS char(4)
    NO SQL
    BEGIN
       IF toeic_score is null THEN SET @pass_fail = 'fail';
       ELSEIF toeic_score < 800 THEN SET @pass_fail = 'fail';
       ELSE SET @pass_fail = 'pass';
       END IF;
       RETURN @pass_fail;
    END
    $$
    delimiter ;
    
    SELECT *, toeic_pass_fail(toeic)
    FROM student;

๐Ÿ’กStore Function ์‚ญ์ œํ•˜๊ธฐ

DROP FUNCTION stored_function_name;

๐Ÿ’ก๋“ฑ๋ก๋œ Store Function ํŒŒ์•…ํ•˜๊ธฐ

  • ํ•ด๋‹น DB์˜ function์ด๋ฆ„์„ ์•Œ๊ณ ์‹ถ์„๋•Œ

    SHOW FUNCTION STATUS where DB = 'company';

    โœ”๏ธfunction์„ ๋งŒ๋“ค ๋•Œ, DB๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ง€์ •๋˜์–ด ์žˆ๋Š” ์ด์œ ๋Š”โ“ function์„ ๋งŒ๋“ค ๋•Œ ํ™œ์„ฑํ™”๋œ DB๋กœ ์ง€์ •๋œ๋‹ค.

  • function์„ ๋งŒ๋“ค ๋•Œ DB๋ฅผ ๋ช…์‹œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

    CREATE FUNCTION DB์ด๋ฆ„.function์ด๋ฆ„
  • DB์˜ ์ด๋ฆ„์„ ์•Œ๊ณ ์‹ถ์„๋•Œ

    SHOW DATABASES;
  • ํ•ด๋‹น function์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•  ๋•Œ

    SHOW CREATE FUNCTION function์ด๋ฆ„;

๐Ÿ’ก3๊ณ„์ธต ๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์€ ์ฃผ๋กœ 3๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฅธ๋‹ค.

  1. Presentation ๊ณ„์ธต
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์„ ๋‹ด๋‹น
    • HTML, javascript, CSS, native app, desktop app
  2. Logic ๊ณ„์ธต
    • ์„œ๋น„์Šค์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๊ณผ ์ •์ฑ… ๋“ฑ๋“ฑ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹น
    • application ๊ณ„์ธต, middle ๊ณ„์ธต ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
    • Java + Spring, Python + Django ๋“ฑ
  3. Data ๊ณ„์ธต
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์ œ๊ณตํ•˜๋Š” ์—ญํ• 
    • MySQL, Oracle, SQL Server, PostgreSQL, MongoDB

0๊ฐœ์˜ ๋Œ“๊ธ€