DataBase ํ๋ฉด Oracle.
๊ฑฐ์ ์์์ด์ฒ๋ผ ๋งํ๊ฒ ๋๋ ๊ฒ ์ค ํ๋์ด๋ค.
์ฌ๋ ๋์ ๋ค๋ฆ์์ด ํ๋ก์ ํธ๋ฅผ ์ํํ๋ ์ค
Oracle์ด๋ผ๋ PL/SQL์ ์ฒ์ ๋ฃ๊ฒ ๋์๋ค.
PL/SQL ์ด๋?
SQL์ ํ์ฅํ ์ ์ฐจ์ ์ธ์ด(Procedural Language) ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋๋ Oracle์ ํ์ค ๋ฐ์ดํฐ ์ก์ธ์ค ์ธ์ด์ด๋ค. ์ฝ๊ฒ ๋งํด SQL์ ๋จ์ ์ ๋ณด์ํ SQL์ ํ์ฅํ์ด๋ผ๊ณ ๋งํ ์ ์๋ค. PL/SQL์ ๋ธ๋กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ค์ค๋ก๊ฐ ์ปดํ์ผ ์์ง์ ํฌํจํ๊ณ ์๋ค. ๋ํ DML๊ณผ Query๋ฌธ, ์ ์ฐจํ ์ธ์ด(IF๋ฌธ, LOOP) ๋ฑ์ ์ฌ์ฉํ์ฌ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ ๊ฐ๋ ฅํ ํธ๋์ญ์ ์ธ์ด์ด๋ค.
์ฅ์ ๋ฐ ์ฌ์ฉํ๋ ์ด์
PL/SQL์ ํน์ง ์ค ํ๋์ธ ๋ธ๋กํ ๊ตฌ์กฐ๊ฐ ์ฃผ๋ชฉ๋ฐ๋ ์ด์ ๋ ๋ค์์ SQL๋ฌธ์ ํ ๋ฒ์ ORACLE DB๋ก ๋ณด๋ด ์ฒ๋ฆฌํ ์ ์์ด ์ํ ์๋๋ฅผ ํฅ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ DB์๊ฒ ๋ ๊ณผ์ ์ธ ์๋ ๊ฐ์ ์์ ๊ทน์ ์ผ๋ก ๋์์ค ์ ์๋ ์ฅ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ํ ๋ ๊ฐ ์ด์์ ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ ๋ชจ๋ ์์๋ ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํ์ฌ ๋ณด๋ค ์ด์์ฑ์ด ์ข๋ค. ์ด๋ ๊ณง ๊ฐ๋ ฅํ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ํ ํ๋ก์์ ์์ฑ์์ SQL์ ํตํฉ์ด ๊ฐ๋ฅํ๊ณ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๊ธฐ์กด SQL์ ๋จ์ ์ ๋ณด์ํ ์ธ์ด๋ผ๊ณ ์ค๋ช ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ํน์ฑ์ด ๋ถํธํ๋์ง ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ์.
โถ ๊ธฐ์กด SQL์ ๋จ์
1) ๋ณ์๊ฐ ์๋ค.
2) ํ ๋ฒ์ ํ๋์ ๋ช ๋ น๋ฌธ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ฌ ์๋์ ์ผ๋ก ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ค.
3) ์ ์ด๋ฌธ IF, LOOP ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
4) ์์ธ์ฒ๋ฆฌ๊ฐ ์๋ค.
ํน์ง
DECLARE์ ์์๋ง ๋ณ์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, BEGIN ์น์ ์์ ์ ๊ฐ์ด ํ ๋น๋ ์ ์๋ค. IF๋ฌธ์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ณ , ์ปค์ CURSOR๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ ๊ฒ์ํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ค. PL/SQL์ SELECT๋ฌธ์ ํด๋น SELECT์ ๊ฒฐ๊ณผ๋ฅผ PL/SQL ์์ง์ผ๋ก ๋ณด๋ด๋๋ฐ ์ด๋ ์บ์นํ๊ธฐ ์ํ ๋ณ์๋ฅผ DECLARE ํด์ผ ํ๊ณ , INTO ์ ์ ์ ์ธํ์ฌ ๋ณ์๋ฅผ ํํํด์ผ ํ๋ค. DECLARE, BEGIN, Exception๋ฌธ์ ์ ์ธํ END๋ฌธ๊ณผ ๋ชจ๋ PL/SQL ๋ฌธ์ฅ์ ์ค์ ๋ง์ง๋ง์ ์ธ๋ฏธ์ฝ๋ก (;)์ ๋ฐ๋์ ๋ถ์ฌ์ผ ํ๋ค.
๊ตฌ์กฐ (์ ์ธ๋ถ / ์คํ๋ถ / ์์ธ์ฒ๋ฆฌ๋ถ): 3๊ฐ์ ์น์
1) ์ ์ธ๋ถ (ํ์ X)
DECLARE๋ฌธ์ผ๋ก ์์ํ์ฌ ๋ธ๋ก์์ ์ฌ์ฉ๋ ๋ณ์, ์์, ์ปค์, ์์ธ Exception๋ฅผ ์ ์ธํ๋ ์น์ ์ผ๋ก ์๋ต ๊ฐ๋ฅํ๋ค.
2) ์คํ๋ถ (ํ์ O)
BEGIN๋ฌธ์ผ๋ก ์์ํ์ฌ END;๋ฌธ์ผ๋ก ์ข ๋ฃํ๋ฉฐ ์ํ๋ ์์ ์ body์ด๋ค. SQL๋ฌธ(SELECT/UPDATE/INSERT/DELETE), ์ ์ด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ์ปค์ ์์ฑ ๋ฑ์ ์ด์ฉํ์ฌ ๋ธ๋ก์์ ์คํํ body๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
3) ์์ธ์ฒ๋ฆฌ๋ถ (ํ์ X)
์์ธ์ฒ๋ฆฌ ์น์ ์ END;๋ฌธ ๋ฐ๋ก ์์ ์์นํ๋ฉฐ ๋ฏธ๋ฆฌ ์ ์๋ ์์ธ, ์ฌ์ฉ์ ์ ์ ์์ธ, Exception ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ ํ๊ณ ๋ช ์๋ ์กฐ๊ฑด์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ทจํ ์์ ์ ์ ์ํ๋ค. ์ ์ธ๋ถ์ ๋ง์ฐฌ๊ฐ์ง๊ณ ์ ํ์ ์น์ ์ด๋ค.
*) END๋ฌธ (ํ์ O)
PL/SQL์ ์ข ๋ฅ: (์ต๋ช ๋ธ๋ก vs. ์ด๋ฆ์ด ์๋ ๋ธ๋ก)
โท ์ต๋ช ๋ธ๋ก
์ด๋ฆ์ด ์๋ PL/SQL Block์ผ๋ก DB์ ์ ์ฅ๋์ง ์๊ณ , ์ฌ์ฉ์๊ฐ ํ์ํ ๋๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํ์ฌ ์คํํ๋ค.
โท ์ด๋ฆ์ด ์๋ ๋ธ๋ก
1) ํ๋ก์์ : ๋ฆฌํด ๊ฐ์ ํ๋ ์ด์ ๊ฐ์ง ์ ์๋ ํ๋ก๊ทธ๋จ.
2) ํจ์: ๋ฆฌํด ๊ฐ์ ํ๋ ์ด์ ๊ฐ์ง ์ ์๋ ํ๋ก๊ทธ๋จ.
3) ํจํค์ง: ํ๋ ์ด์์ ํ๋ก์์ , ํจ์, ๋ณ์, ์์ธ ๋ฑ์ ๋ฌถ์.
4) ํธ๋ฆฌ๊ฑฐ : ์ง์ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์๋์ผ๋ก ์คํ๋๋ PL/SQL ๋ธ๋ก