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์ ์ฌ์ฉํ์ง ์๋๋ค.