[PostgreSQL] ํ•จ์ˆ˜

PostgreSQL๋„ ๋‹ค๋ฅธ RDB๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•จ์ˆ˜, ๋‹ค๋ฅธ ๋ง๋กœ ํ”„๋กœ์‹œ์ €๋ผ ํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๋‹จ์œ„๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ–๋‹ค์“ฐ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ๊ตฌ๋ฌธ ๋‚ด์—์„œ๋Š” ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ˜•์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ๋ณ€์ˆ˜๋‚˜ ๊ทธ๋Ÿฐ๊ฑฐ ๋ง์ด๋‹ค. ์ด๋Ÿฐ๊ฑธ PL/SQL์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

ํ•จ์ˆ˜์˜ ์žฅ์ ์œผ๋กœ๋Š”

  1. ํŽธ๋ฆฌํ•œ ์žฌ์‚ฌ์šฉ๊ณผ ์ผ๊ด€์ ์ธ ๊ด€๋ฆฌ
  2. ์ฟผ๋ฆฌ ํ•ด์„ ์‹œ๊ฐ„(๊ณ„ํš์‹œ๊ฐ„) ์ ˆ์•ฝ
  3. ์ž์œ ๋กœ์šด ํ˜•ํƒœ์˜ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ.
    ๋“ฑ์ด ์žˆ๊ณ .

๋‹จ์ ์€ ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ด€๋ฆฌ๋น„์šฉ์ด ์•„์ฃผ ์ปค์ง„๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค.
๊ทธ๋ƒฅ ์ฟผ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋งŒ ๋ณด๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜๊ฐ€ ์„ž์ธ ์ฟผ๋ฆฌ๋Š” ๊ทธ ํ•จ์ˆ˜๋“ค๊นŒ์ง€๋„ ๋‹ค ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋ฉด์„œ ์ดํ•ด๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ˆ˜์‹ญ ์ˆ˜๋ฐฑ๊ฐœ๊ฐ€ ๋„˜๋Š” ๊ฒฝ์šฐ์—” ๊ฐœํŒ์ด ๋ฒŒ์–ด์ง„๋‹ค.
๊ทธ๋ž˜์„œ ํ•จ์ˆ˜, ํ”„๋กœ์‹œ์ €์˜ ์‚ฌ์šฉ์€ ์•ฝ๊ฐ„ ์ง€์–‘๋˜๋Š” ์ถ”์„ธ๋‹ค.

๊ทธ๋ž˜๋„ ์ ๋‹นํžˆ ์ž˜ ์“ฐ๋ฉด ์ข‹๋‹ค.



ํ•จ์ˆ˜์˜ ์ƒ์„ฑ

์ƒ์„ฑ์€ create function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ ๋’ค์—๋Š” ์ด๋ฆ„๊ณผ (๋งค๊ฐœ๋ณ€์ˆ˜), ๋ฆฌํ„ดํƒ€์ž….. ๋“ฑ๋“ฑ์ด ๋“ค์–ด๊ฐ„๋‹ค.

๋งŒ์•ฝ ์ˆซ์ž 2๊ฐœ๋ฅผ ๋”ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

CREATE FUNCTION MY_ADD(lhs int8, rhs int8)
	RETURNS int8
AS
$$
BEGIN
	RETURN lhs + rhs;
END;
$$
LANGUAGE PLPGSQL;

์œ„์˜ ๋‘ ์ค„์€. int8 ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ lhs, rhs๋ฅผ ๋ฐ›๊ณ . int8 ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋œป์ด๊ณ 
begin๊ณผ end ์‚ฌ์ด๊ฐ€ ์‹ค์งˆ์ ์ธ ์‹คํ–‰๊ตฌ๋ฌธ์ด๋‹ค.
return์œผ๋กœ ๊ฐ’์„ ๋”ํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ทธ๋Ÿผ ๊ธฐ๋ณธํ•จ์ˆ˜๋“ค์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ๋งŒ๋“  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



์‚ญ์ œ

์‚ญ์ œ๋Š” ๊ทธ๋ƒฅ DROP FUNCTIONํ•˜๋ฉด ๋œ๋‹ค.



์ต๋ช… ์ฝ”๋“œ ์‹คํ–‰

์กฐ๊ธˆ์€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ง€๋งŒ. ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ์˜์—ญ $$๋งŒ ๋ถ„๋ฆฌํ•ด์„œ, ํ•จ์ˆ˜ ์ •์˜ ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ตณ์ด ์ด๋ ‡๊ฒŒ ์“ธ์ผ์€ ๋ณ„๋กœ ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ
๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๊ณ , ๊ณ„ํš์‹œ๊ฐ„ ๋‹จ์ถ•๋„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.


์ฐธ์กฐ
https://www.postgresql.org/docs/13/plpgsql.html
http://www.gisdeveloper.co.kr/?p=4546