Oracle Procedure Function Trigger - accidentlywoo/sec GitHub Wiki

sql์˜ ์ •๋ฆฌ ๋จผ์ €

๋‚ด์žฅ ํ•จ์ˆ˜

  • ๋‹จ์ผํ–‰ํ•จ์ˆ˜ : ๋ฌธ์ž/์ˆซ์ž/๋‚ ์งœ/ํ˜•๋ณ€ํ™˜/NULL/์ผ๋ฐ˜ํ•จ์ˆ˜
  • ์—ฌ๋Ÿฌํ–‰ํ•จ์ˆ˜ : COUNT(), SUM(), AVG(), MIN(), MAX()

PL/SQL ์‚ฌ์šฉ์ž์ •์˜ ํ•จ์ˆ˜

  • ๋ฐ˜ํ™˜๊ฐ’์ด ์žˆ๋Š” ํ•จ์ˆ˜ : FUNCTION
  • ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํ•จ์ˆ˜ : PROCEDURE
  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ˆœ์ฐจ์ผ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ (๋ณ€์ˆ˜ํ™œ์šฉ, ์กฐ๊ฑด์ฒ˜๋ฆฌ, ๋ฐ˜๋ณต์ฒ˜๋ฆฌ)

PROCEDURE

๊ตฌ๋ฌธ ํƒ์ƒ‰!

CREATE OR REPLACE PROCEDURE ํ”„๋กœ์‹œ์ €๋ช…([๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฆ„1 ์ž๋ฃŒํ˜•, ...])
IS(๋˜๋Š” AS) [์ง€์—ญ๋ณ€์ˆ˜๋ช…1 ์ž๋ฃŒํ˜•,] (์ง€์—ญ๋ณ€์ˆ˜ ๋งˆ๋‹ค ';'์„ ๋ถ™์ด๊ธฐ)
BEGIN
  ํ”„๋กœ์‹œ์ €๊ฐ€ ํ• ์ผ -> ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—… ์Œ‰ ๊ฐ€๋Šฅ!
  ๋Œ€์ž…์—ฐ์‚ฐ์ž -> :=
  ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ ์ž‘์—…์„ ํ•ด์•ผํ•œ๋‹ค.
  dbms_output.put_line()-> ํด๋ผ์ด์–ธํŠธ ์Šคํฌ๋ฆฝํŠธ์— ๊ฒฐ๊ณผ๋ฌผ์„ ์ฐ์–ด์ฃผ๋Š” ํ•จ์ˆ˜.
  SELECT ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ๋‹ค.
END (ํ”„๋กœ์‹œ์ €๋ช…); 

๋งค๊ฐœ๋ณ€์ˆ˜/์ง€์—ญ๋ณ€์ˆ˜ ์ž๋ฃŒํ˜•

  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• : ์ˆซ์žํ˜•, ๋ฌธ์žํ˜•, ๋‚ ์งœํ˜• [%type] COLUMN%type
  • ์ฐธ์กฐ ์ž๋ฃŒํ˜• : ์ปฌ๋Ÿผ ์ฐธ์กฐํ˜•, ๋ ˆ์ฝ”๋“œ ์ฐธ์กฐํ˜•

ํ”„๋กœ์‹œ์ €์—์„œ SELECT ๊ตฌ๋ฌธ

  SELECT pwd, name INTO vpwd, vname 
  FROM customer 
  WHERE id = 'id8';

๋ฐ˜๋“œ์‹œ INTO๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง€์—ญ๋ณ€์ˆ˜๋กœ ๋‹ด์•„์„œ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ณ , ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์—์„œ๋Š” WHERE ์ ˆ์„ ํ†ตํ•ด ๋‹จ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜์˜ค๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.(Scalar์ฟผ๋ฆฌ)

์—ฌ๋Ÿฌ ํ–‰์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด Cursor์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

ํ”„๋กœ์‹œ์ €์—์„œ IF๋ฌธ

Trigger

CREATE OR REPLACE TRIGGER ํŠธ๋ฆฌ๊ฑฐ๋ช…
    [AFTER/BEFORE] OF ์ปฌ๋Ÿผ ... IN ํ…Œ์ด๋ธ”๋ช…
    FOR EACH ROW
BEGIN
    INSERT/UPDATE/DELETE [DML๋งŒ ๊ฐ€๋Šฅ]
    (:old.์ปด๋Ÿผ๋ช…/:new.์ปฌ๋Ÿผ๋ช…)
END;

ํŠธ๋ฆฌ๊ฑฐ์˜ ์•ˆ์ชฝ์— COMMIT/ROLLBACK์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.