๐ป
Oracle DBMS ๋ฐ SQL - ํ๋ก์์ (PROCEDURE), ์ ์ฅํ๋ก์์ ์ ์ ์ฅํจ์ ๋ณธ๋ฌธ
Oracle DBMS ๋ฐ SQL - ํ๋ก์์ (PROCEDURE), ์ ์ฅํ๋ก์์ ์ ์ ์ฅํจ์
๋ํจ๋ 2020. 4. 20. 15:37--PL/SQL => PL(Procedural Language Extension)/ SQL(Structured Query Language)
--DML์ ๋จ์ ๋ฐ์ดํฐ ํ์ฉ ํ๊ณ๋ก SQL ์ธ์ด์ ์ ์ฐจ์ ์ธ์ด์ ์์๋ฅผ ๋ํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ
--ํฅ์์ํจ ๊ธฐ๋ฅ์ด๋ค. ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ํ์ฌ๋์ด ์๋ค.
--DB์ ์ง์ ํ์ฌ๋์ด ์ปดํ์ผ๋๊ณ ์คํ๋์ด ์ฑ๋ฅ ๋ฉด์์๋ ์ฐ์ํ๋ค.
--1. ๊ธฐ๋ณธ๊ตฌ์ฑ : DECLARE ~ BEGIN ~ EXCEPTION ~ END
--1) ํจ์ ๊ตฌ์ฑ
--์ถ๋ ฅ์ฐฝ์์ ๋ณด๋ ค๊ณ ํ๋ฉด์ ๊ธฐ๋ณธ์ค์ ์ธ OFF๋ฅผ ON์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผํ๋ค.
--2) ์ ํ์ฒ๋ฆฌ : IF ~ THEN ~ END IF, IF ~ THEN ~ ELSE ~ END IF, IF ~ THEN ~ ELSIF ~ END IF
--3) ๋ฐ๋ณต๋ฌธ : LOOP ~ END LOOP, FOR ~ LOOP ~ END LOOP, WHILE ~ LOOP ~ END LOOP
-- FOR ~ LOOP ~ END LOOP
-- LOOP ~ END LOOP
-- WHILE ~ LOOP ~ END LOOP
-- 2. PL/SQL ์์ SQL
-- 1) SELECT ์ปฌ๋ผ๋ฆฌ์คํธ INTO ์ค์นผ๋ผ๋ณ์ FROM ํ
์ด๋ธ WHERE
/* 2-1) PL/SQL ์ฌ์ฉํ๋ DML ๋ช
๋ น์ด
1) SELECT ์ปฌ๋ผ๋ฆฌ์คํธ INTO ์ค์นผ๋ผ๋ณ์ FROM ํ
์ด๋ธ WHERE
2) UPDATE ํ
์ด๋ธ๋ช
SET ์ปฌ๋ผ๋ช
= ์ค์นผ๋ผ๋ณ์(๋ํผ๋ฐ์ค๋ณ์),... ,.. WHERE ์กฐ๊ฑด์ [์ค์นผ๋ผ/๋ํผ๋ณ์]
3) INSERT INTO ํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ฆฌ์คํธ) VALUES(์ค์นผ๋ผ ๋๋ ๋ํผ๋ฐ์ค ๋ณ์, ..., ...)
4) DELETE FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์ [์ค์นผ๋ผ/๋ํผ๋ณ์]
*/
--3. ์ ์ฅ ํ๋ก์์ ์ ํจ์ / ๊ถํ ์ค์ grant create procedure, create session to (๊ณ์ ์ด๋ฆ);
--ํจ์์ ํ๋ก์์ : ๋ฐํ๊ฐ์ด ํ๋๋ฉด ํจ์, ๋ ๊ฐ ์ด์์ด๋ฉด ํ๋ก์์
--ํ๋ก์์ ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
[์ ๋ฆฌ]
--๋ทฐ๋ ์์ฃผ์ฐ๋ ๊ฑฐ ํ ์คํธ๋ก ์ ์ฅํด๋์ ๊ฒ
--PL(์ค์นผ๋ผ๋ณ์, ๋ํผ๋ฐ์ค ๋ณ์, ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ)/SQL ๋ง ์ฌ์ฉํ๋ ๊ฒ์ ํ๊ณ๊ฐ ์๋ค. (UPDATE, INSERT, SELECT, DELETE) ๋ฐ๋ผ์, ํ๋ก์์ ์ ํจ๊ป ์ฌ์ฉํ๋ค.
--ํ๋ก์์ ๊ฐ ๋ญ์ผ? ์์ฃผ ์คํํ๊ฑฐ๋ ๋ณต์กํ ํธ๋์ญ์ ์ ์ํํ๋ PL/SQL ๋ธ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. C๋ JAVA์ธ์ด์ฒ๋ผ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ ์ฅํด๋๊ณ ํ์ํ ๋๋ง๋ค ์ด๋ค.
--INSERT : INSERT INO ํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ฆฌ์คํธ) VALUES(์ค์นผ๋ผ ๋๋ ๋ํผ๋ฐ์ค ๋ณ์, ..., ...)
--DELETE : UPDATE ํ ์ด๋ธ๋ช SET ์ปฌ๋ผ๋ช = ์ค์นผ๋ผ๋ณ์(๋ํผ๋ฐ์ค๋ณ์),... ,.. WHERE ์กฐ๊ฑด์ [์ค์นผ๋ผ/๋ํผ๋ณ์]
--SELECT : SELECT ์ปฌ๋ผ๋ฆฌ์คํธ INTO ์ค์นผ๋ผ๋ณ์ FROM ํ ์ด๋ธ WHERE
--์คํ์ด ์๋๋ค. OUTํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ณ์์ ์ ์ธ์ด ํ์ํ๋ค.
--1) ๋ฐ์ธ๋ฉ ๋ณ์ ์ ์ธ
--VARIABLE ๋ณ์๋ช ์๋ฃํ;
--2) ๋ณ์ ์ถ๋ ฅ
--PRINT๋ณ์๋ช ;
--4. CURSOR & FETCH / ๋ณต์ํ ์ถ๋ ฅ์์ ์ฌ์ฉํ๋ค.
-- ์๊ฐ ํ ์ด๋ธ ๋ด์ฉ ์ถ๋ ฅ
--๋ถ์๋ฒํธ 10์์ ๊ทผ๋ฌดํ๋ ์ฌ์ ์ถ๋ ฅ
[์ ๋ฆฌ]
--์ปค์ ์ ์ธ
CURSOR ์ปค์์ด๋ฆ IS SELECT ๋ฌธ์ฅ;
--์ปค์ ์ด๊ธฐ
OPEN ์ปค์์ด๋ฆ;
--์ปค์๋ก๋ถํฐ ๋ฐ์ดํฐ ์ฝ๊ธฐ(LOOP END์ ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ๋ค)
LOOP
FETCH ์ปค์์ด๋ฆ INTO ์ ์ฅํ ๋ก์ปฌ๋ณ์
EXIT WHEN ์กฐ๊ฑด;
END LOOP;
--์ปค์๋ซ๊ธฐ
CLOSE ์ปค์์ด๋ฆ;
--์ปค์ ์์ฑ
%FOUND -- PL/SQL ์ฝ๋๊ฐ ๋ง์ง๋ง์ผ๋ก ์ป์ ์ปค์์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ์ฐธ.
%NOTFOUND -- %FOUND์ ๋ฐ๋
%ROWCOUNT -- ์ปค์์์ ์ป์ ๋ ์ฝ๋์ ๋ฐํ
%ISOPEN -- ์ปค์๊ฐ ์ด๋ ธ๊ณ ์์ง ๋ซํ์ง ์์ ์ํ๋ผ๋ฉด ์ฐธ
--๊ณผ๋ชฉ๋ฒํธ 101๋ฒ ๋ฃ๊ณ ์คํํ๋ค.
-- ํฉ์ ์ถ๋ ฅํด๋ณด์
--๋ณต์ํ EXECUTE() ์ถ๋ ฅ์ ๋ฐ์ธ๋ฉ ๋ณ์ REFCURSOR ์คํ ํ๊ธฐ ์ํด,
-- URSOR ๊ด๋ จ๋ ๋ด์ฉ์ ๋์ ํ ์ด๋ธ์ ๋ง๊ฒ customize ํด์ผ๋๋ค.
/*
%ROWTYPE์ผ๋ก ํ์ ํต์งธ๋ก ๋ฐ๊ฑฐ๋, ์ฌ๋ฌ ๋ ์ฝ๋์ ํ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ,
์ด๋ฅผ ๋ฐ์ ์ ์๋ ๋ฐ์ธ๋ฉ ๋ณ์ ์๋ฃํ์ด ์๋ค.
REFCURSOR์ ์ฌ์ฉํด์ผํ๋๋ฐ, ๋ง์น JAVA์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค.
*/
--3-3) ํ๋ก์์ ์ญ์
--4. ์ ์ฅํจ์ : PROCEDURE ์ฐจ์ด์ ์ ๋ณต์ํ ์ถ๋ ฅ์ด ์๋จ(CURSOR, FETCH)
-- ํ๋ก์์ ์์ OUT ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ ์ ์์ง๋ง, ์ ์ฅํจ์๋ RETURN ํ๋
'KITRI > ORACLE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
eXERD ์ค์น ๋ฐ Oracle ์ฐ๋ํ๊ธฐ (0) | 2020.04.24 |
---|---|
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง (0) | 2020.04.22 |
Oracle DBMS ๋ฐ SQL - ๋ทฐ(VIEW)์ ์์ฑ, ์ ํ, ์์ , ์ญ์ (0) | 2020.04.20 |
Oracle DBMS ๋ฐ SQL - ์ํ์ค(SEQUENCE) / ROWNUM, TRANSACTION, ์ธ๋ฑ์ค(INDEX) (0) | 2020.04.20 |
Orarcle DBMS ๋ฐ SQL - ์ ์ฝ์กฐ๊ฑด(NOT NULL, UNIQUE, PRIMARY KEY), ๋นํ์ฑ/ํ์ฑ (0) | 2020.04.17 |