PL/SQL
- Procedural Language extension to SQL
- Oracle Corporation์์ ๊ฐ๋ฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- SQL์ ๋จ์ ์ ๋ณด์ํ์ฌ SQL๋ฌธ์ฅ ๋ด์์ ๋ณ์์ ์ ์, ์กฐ๊ฑด์ฒ๋ฆฌ, ๋ฐ๋ณต์ฒ๋ฆฌ ๋ฑ ์ง์
- ํ๋ก์์ , ํธ๋ฆฌ๊ฑฐ, ํจ์ ๋ฑ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ
DECLARE (์ ์ธ๋ถ)
BEGIN (์คํ๋ถ)
EXCEPTION (์์ธ์ฒ๋ฆฌ๋ถ)
์ถ๋ ฅ ๋ด์ฉ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ก ์ค์
-- ๊ธฐ๋ณธ๊ฐOFF์ฌ์ ON์ผ๋ก ๋ณ๊ฒฝ SET SERVEROUTPUT ON;
์ถ๋ ฅํ ๋
DBMS_OUTPUT.PUT_LINE('์ถ๋ ฅํ ๋ด์ฉ||๋ณ์||'์ถ๋ ฅํ ๋ด์ฉ');
์ ๋ ฅํ ๋
&์ ๋ ฅ
- ๋ฌธ์ํ์ ์ ๋ฐ์ ๋๋
''
๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌ- ๋์ด์ฐ๊ธฐ ์ ๊ณต๋ฐฑ ๋ค์ ๋ด์ฉ์ด ๊ฐ์ ํฌํจ๋จ
ex) '&์ฌ์ ์ฌ๋ฒ'(x)
ex) '&์ฌ์_์ฌ๋ฒ'(o)
๋ณ์ ๋๋ ์์๋ฅผ ์ ์ธํ๋ ๋ถ๋ถ (์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ ๊ฐ๋ฅ)
๋ฐ์ดํฐ(ํ์ ) ์ ์ธ ์ข ๋ฅ
- ์ผ๋ฐํ์
- ๋ ํผ๋ฐ์ค ํ์
- ROWํ์
[ํํ์]
๋ณ์๋ช
[CONSTANT] ์๋ฃํ [:=๊ฐ];
CONSTANT
์์ฑ:=๊ฐ
ํ์์ผ๋ก ์์ฑ[์์]
DECLARE
EID NUMBER;
ENAME VARCHAR2(20);
PI CONSTANT NUMBER := 3.14;
BEGIN
-- ๋ณ์์ ๊ฐ์ ๋์
EID := 100;
ENAME := 'ํ๊ธธ๋';
-- EID, ENAME, PI ๋ณ์์ ๊ฐ์ ์ถ๋ ฅ
-- ํน์ ๋ฌธ์์ ๋ณ์๋ฅผ ๊ฐ์ด ์ถ๋ ฅํ๊ณ ์ ํ ๋๋ ์ฐ๊ฒฐ์ฐ์ฐ์(||)๋ฅผ ์ฌ์ฉ
DBMS_OUTPUT.PUT_LINE('EID : ' || EID);
DBMS_OUTPUT.PUT_LINE('ENAME : ' || ENAME);
DBMS_OUTPUT.PUT_LINE('PI : ' || PI);
END;
/
[์์] - ๊ฐ์ ์
๋ ฅ ๋ฐ์ ๋
๊ฐ์ ์
๋ ฅ๋ฐ์ ๋ '&๋์ฒด๋ณ์๋ช
' ํ์์ผ๋ก ์์ฑ
DECLARE
EID NUMBER;
ENAME VARCHAR2(20);
PI CONSTANT NUMBER := 3.14;
BEGIN
-- ๊ฐ์ ์
๋ ฅ๋ฐ์
EID := &๋ฒํธ;
ENAME := 'ํ๊ธธ๋';
DBMS_OUTPUT.PUT_LINE('EID : ' || EID);
DBMS_OUTPUT.PUT_LINE('ENAME : ' || ENAME);
DBMS_OUTPUT.PUT_LINE('PI : ' || PI);
END;
/
์ด๋ค ํ ์ด๋ธ์ ์ด๋ค ์ปฌ๋ผ์ ๋ฐ์ดํฐํ์ ์ ์ฐธ์กฐํด์ ํด๋น ํ์ ์ผ๋ก ๋ณ์๋ฅผ ์ง์
[ํํ์]
๋ณ์๋ช
ํ
์ด๋ธ๋ช
.์ปฌ๋ผ๋ช
%TYPE;
๋ณ์๋ช .์ปฌ๋ผ๋ช ์ผ๋ก ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผ
[์์]
DECLARE
EID EMPLOYEE.EMP_ID%TYPE;
ENAME EMPLOYEE.EMP_NAME%TYPE;
SAL EMPLOYEE.SALARY%TYPE;
BEGIN
-- EMPLOYEE ํ
์ด๋ธ์์ ์ฌ๋ฒ์ด 200๋ฒ์ธ ์ฌ์์ ์ฌ๋ฒ, ์ฌ์๋ช
, ์๊ธ ์กฐํ
SELECT EMP_ID, EMP_NAME, SALARY
INTO EID, ENAME, SAL -- ๊ฐ ์ปฌ๋ผ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ณ์์ ๋์
FROM EMPLOYEE
WHERE EMP_ID = &์ฌ๋ฒ; -- ์ฌ๋ฒ์ ์
๋ ฅ๋ฐ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ๋์
DBMS_OUTPUT.PUT_LINE('EID : ' || EID);
DBMS_OUTPUT.PUT_LINE('ENAME : ' || ENAME);
DBMS_OUTPUT.PUT_LINE('SAL : ' || SAL);
END;
/
ํ
์ด๋ธ์ ํ ํ์ ๋ํ ๋ชจ๋ ์ปฌ๋ผ๊ฐ์ ํ๊บผ๋ฒ์ ๋ด์ ์ ์๋ ๋ณ์
[ํํ์]
๋ณ์๋ช
ํ
์ด๋ธ๋ช
%ROWTYPE;
SELECT ์ปฌ๋ผ, ์ปฌ๋ผ
INTO ๋ณ์, ๋ณ์ --ROW ํ์
๋ณ์
FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]
์ข ๋ฅ
1. ๋จ๋ IF ๋ฌธ
2. IF ~ ELSE๋ฌธ
3. IF ~ ELSIF๋ฌธ
4. CASE ~ WHEN ~ THEN๋ฌธ
IF ์กฐ๊ฑด์
THEN ์ํํ ๊ตฌ๋ฌธ
END IF;
IF ์กฐ๊ฑด์
THEN ์ํํ ๊ตฌ๋ฌธ
ELSE ์ํํ ๊ตฌ๋ฌธ
END IF;
IF ์กฐ๊ฑด์
THEN ์ํํ ๊ตฌ๋ฌธ
ELSIF ์กฐ๊ฑด์2
THEN ์ํํ ๊ตฌ๋ฌธ
END IF;
CASE ๋น๊ต๋์
WHEN ๋๋ฑ๋น๊ต๊ฐ1 THEN ๊ฒฐ๊ณผ๊ฐ1
WHEN ๋๋ฑ๋น๊ต๊ฐ2 THEN ๊ฒฐ๊ณผ๊ฐ2
...
ELSE ๊ฒฐ๊ณผ๊ฐN
END;
์ข ๋ฅ
1. BASIC LOOP๋ฌธ
2. FOR LOOP ๋ฌธ
3. WHILE LOOP ๋ฌธ
LOOP
๋ฐ๋ณตํ ๊ตฌ๋ฌธ
IF ์กฐ๊ฑด์ THEN EXIT;
END IF;
EXIT WHEN ์กฐ๊ฑด์
END LOOP;
FOR ๋ณ์ IN [REVERSE] ์์๊ฐ.. ๋๊ฐ
LOOP
๋ฐ๋ณต ์ํ๋ ๊ตฌ๋ฌธ
END LOOP;
* REVERSE : ๋๊น๋ถํฐ ์์๊ฐ์ผ๋ก ๋ฐ๋ณต์ ์ํ
WHILE ์กฐ๊ฑด์
LOOP
๋ฐ๋ณต์ํํ ๊ตฌ๋ฌธ
END LOOP;
EXCEPTION
WHEN ์์ธ๋ช
1 THEN ์์ธ์ฒ๋ฆฌํ ๊ตฌ๋ฌธ;
WHEN ์์ธ๋ช
2 THEN ์์ธ์ฒ๋ฆฌํ ๊ตฌ๋ฌธ;
...
WHEN OTHERS THEN ์์ธ์ฒ๋ฆฌํ ๊ตฌ๋ฌธ;
์ค๋ผํด์์ ๋ฏธ๋ฆฌ ์ ์ํด ๋ ์์ธ๋ช
์กฐํ๋ ๊ฒฐ๊ณผ๊ฐ ์์ ๋ ์์ธ ๋ฐ์ ์
์กฐํ๋ ๊ฒฐ๊ณผ๊ฐ ๋ง์ ๋ ์์ธ ๋ฐ์ ์
0์ผ๋ก ๋๋ ๋
UNIQUE ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ๊ฒฝ์ฐ