PL/SQL
SQL ์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋๋ก ํ์ฅํ ์ธ์ด
โข
PL/SQL ๊ธฐ๋ณธ ๊ตฌ์กฐ
โข
๊ธฐ๋ณธ ๋ฌธ๋ฒ์ฌํญ
โข
PL/SQL ๊ตฌ์ฑ์์
โฆ
๋ณ์
โฆ
์์
โฆ
์ฐ์ฐ์
โฆ
์ฃผ์
โฆ
DML ๋ฌธ
โข
๋ฐ์ดํฐ ํ์
โข
์ฐ์ฐ์
โข
์ฃผ์
โข
DML ๋ฌธ
โข
์ ์ด๋ฌธ
โฆ
์กฐ๊ฑด๋ฌธ
โฆ
๋ฐ๋ณต๋ถ
โข
ํจ์ (FUNCTION)
โข
ํ๋ก์์ (PROCEDURE)
PL/SQL ๊ธฐ๋ณธ ๊ตฌ์กฐ
โข
๋ธ๋ก
โข
PL/SQL ์ถ๋ ฅ
๋ธ๋ก
DECLARE
ํ์ํ ์์๋ฅผ ์ ์ธ; -- ์ ์ธ๋ถ
BEGIN
์คํ ๋ช
๋ น์ด; -- ์คํ๋ถ
EXCEPTION
์์ธ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ -- ์์ธ ์ฒ๋ฆฌ๋ถ
END;
/
SQL
๋ณต์ฌ
PL/SQL ์ถ๋ ฅ
SET SERVEROUTPUT ON; -- ์คํ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ก ์ค์
SQL
๋ณต์ฌ
BEGIN
DBMS_OUTPUT.PUT_LINE('์ถ๋ ฅ ๋ฉ์์ง');
END;
/
SQL
๋ณต์ฌ
๊ธฐ๋ณธ ๋ฌธ๋ฒ์ฌํญ
โข
๋ธ๋ก์ ๋ถ๋ถ์ ์ง์ ํ๋ ๋ช
๋ น์์๋ ;(์ธ๋ฏธ์ฝ๋ก )์ ์ฌ์ฉํ์ง ์๋๋ค
(DECLARE, BEGIN, EXCEPTION)
โข
๋ธ๋ก์ ๊ฐ ๋ถ๋ถ์์ ์คํํ๋ ๋ฌธ์ฅ์๋ ;(์ธ๋ฏธ์ฝ๋ก )์ ์ฌ์ฉํ๋ค
โข
ํ ์ค ์ฃผ์(--), ์ฌ๋ฌ ์ค ์ฃผ์ (/* */)
โข
PL/SQL ์์ฑ ํ ์คํ ์, ๋ง์ง๋ง์ / ๋ฅผ ์ฌ์ฉ
PL/SQL ๊ตฌ์ฑ์์
โข
๋ณ์
โข
์์
โข
์ฐ์ฐ์
โข
์ฃผ์
โข
DML๋ฌธ
๋ณ์ ์ ์ธ
๋ณ์๋ช
๋ฐ์ดํฐํ์
:= ๊ฐ;
SQL
๋ณต์ฌ
์์ ์ ์ธ
์์๋ช
CONSTANT ๋ฐ์ดํฐํ์
:= ๊ฐ;
SQL
๋ณต์ฌ
๋ณ์์ ๊ธฐ๋ณธ๊ฐ ์ง์
๋ณ์๋ช
๋ฐ์ดํฐํ์
DEFAULT ๊ฐ;
SQL
๋ณต์ฌ
๋ณ์์ NOT NULL ์ง์
๋ณ์๋ช
๋ฐ์ดํฐํ์
NOT NULL ๊ฐ;
SQL
๋ณต์ฌ
๋ฐ์ดํฐ ํ์
์ข
๋ฅ | ๋ด์ฉ |
์ค์นผ๋ผํ | NUMBER, CHAR, VARCHAR2, DATE, BOOLEAN |
์ฐธ์กฐํ | ์ด๋ฏธ ํ
์ด๋ธ์ ์ ์๋ ์ปฌ๋ผ์ ํ์
์ ์ฐธ์กฐ
* ๋ณ์๋ช
ํ
์ด๋ธ๋ช
.์ปฌ๋ผ%TYPE := ๊ฐ; |
์ฐ์ฐ์
(์ฐ์ ์์ ๋์)
** | ์ ๊ณฑ ์ฐ์ฐ์ |
+, - | ๋ถํธ ์ฐ์ฐ์ (+10, -10) |
*, / | ๊ณฑ์
, ๋๋์
|
+, -, || | ๋ง์
, ๋บ์
, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์ (1+2) |
>, <, >=, <= | ๋น๊ต ์ฐ์ฐ์ |
NOT | ๋ถ์ ์ฐ์ฐ์ |
AND | ๊ทธ๋ฆฌ๊ณ |
OR | ๋๋ |
(์ฐ์ ์์ ๋ฎ์)
์ฃผ์
์ข
๋ฅ | ๊ธฐํธ |
ํ ์ค ์ฃผ์ | -- |
์ฌ๋ฌ ์ค ์ฃผ์ | /*
ํ ์ค
๋ ์ค
*/ |
DML ๋ฌธ
์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒฐ๊ณผ๊ฐ์ ๋ณ์์ ๋์
ํ๋ SELECT ๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค.
โข
SELECT, INSERT, UPDATE, DELETE.
โข
PL/SQL ์์์ DDL ์ ์ง์ ์ธ ์ ์๋ค.
โข
PL/SQL ์์๋ ์ฃผ๋ก DML ์ ์ฌ์ฉํ๋ค.
INTO ์ ์ ์ด์ฉํด์, ์กฐํ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ๋์
ํ๋ค.
ex) SELECT e.emp_name, d.dept_title
INTO vs_emp_name, vs_dept_name -- ์กฐํ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ๋์
์ ์ด๋ฌธ
โข
์กฐ๊ฑด๋ฌธ
โข
๋ฐ๋ณต๋ฌธ
โข
๊ธฐํ ์ ์ด๋ฌธ
์กฐ๊ฑด๋ฌธ
์คํํ๋ฆ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ดํ๋ ๋ฌธ์ฅ
โข
์ข
๋ฅ
โฆ
IF
โฆ
CASE
IF
โข
IF ~ THEN
โข
IF ~ THEN ~ ELSE
โข
IF ~ THEN ~ ELSIF
IF ~ THEN
IF ์กฐ๊ฑด์ THEN ์คํํ ๋ช
๋ น์ด;
END IF;
SQL
๋ณต์ฌ
IF ~ THEN ~ ELSE
IF ์กฐ๊ฑด์
THEN
์คํํ ๋ช
๋ น์ด;
ELSE
์คํํ ๋ช
๋ น์ด;
END IF;
SQL
๋ณต์ฌ
IF ~ THEN ~ ELSIF
IF ์กฐ๊ฑด์
THEN ์คํํ ๋ช
๋ น์ด;
ELSEIF ์กฐ๊ฑด์
THEN ์คํํ ๋ช
๋ น์ด;
ELSEIF ์กฐ๊ฑด์
THEN ์คํํ ๋ช
๋ น์ด;
ELSE
์คํํ ๋ช
๋ น์ด;
END IF;
SQL
๋ณต์ฌ
CASE
CASE ๋น๊ต ๊ธฐ์ค
WHEN ๊ฐ1 THEN
์คํํ ๋ช
๋ น์ด;
WHEN ๊ฐ2 THEN
์คํํ ๋ช
๋ น์ด;
...
ELSE
์คํํ ๋ช
๋ น์ด;
END CASE;
SQL
๋ณต์ฌ
๋ฐ๋ณต๋ฌธ
์คํํ๋ฆ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ๋ณตํ๋ ๋ฌธ์ฅ
โข
์ข
๋ฅ
โฆ
LOOP
โฆ
WHILE LOOP
โฆ
FOR LOOP
LOOP
LOOP
๋ฐ๋ณต ์คํํ ๋ช
๋ น์ด;
(EXIT WHEN ์ข
๋ฃ์กฐ๊ฑด);
END LOOP;
SQL
๋ณต์ฌ
WHILE LOOP
WHILE ์กฐ๊ฑด์ LOOP
๋ฐ๋ณต ์คํํ ๋ช
๋ น์ด;
END LOOP;
SQL
๋ณต์ฌ
FOR LOOP
FOR i IN ์์๊ฐ..์ข
๋ฃ๊ฐ LOOP
๋ฐ๋ณต ์คํํ ๋ช
๋ น์ด;
END FOR;
FOR i N REVERSE ์์๊ฐ..์ข
๋ฃ๊ฐ LOOP
๋ฐ๋ณต ์คํํ ๋ช
๋ น์ด;
END LOOP;
SQL
๋ณต์ฌ
๊ธฐํ ์ ์ด๋ฌธ
โข
EXIT
โข
CONTINUE
์ข
๋ฅ | ๋ด์ฉ |
EXIT | ๋ฐ๋ณต๋ฌธ ์ข
๋ฃ |
EXIT WHEN ์กฐ๊ฑด | ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด, ๋ฐ๋ณต ์ข
๋ฃ |
CONTINUE | ํ์ฌ ๋ฐ๋ณต์ฃผ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค |
CONTINUE WHEN ์กฐ๊ฑด | ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด, ํ์ฌ ๋ฐ๋ณต์ฃผ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค |
ํจ์ (FUNCTION)
์คํ๋ฌธ์ ์งํฉ
โข
ํจ์ ์์ฑ
โข
ํจ์ ์คํ
โข
ํจ์ ์ญ์
ํจ์ ์์ฑ
CREATE OR REPLACE FUNCTION ํจ์๋ช
(
ํ๋ผ๋ฏธํฐ1 [IN] ๋ฐ์ดํฐํ์
,
ํ๋ผ๋ฏธํฐ2 [IN] ๋ฐ์ดํฐํ์
,
...
)
RETURN ๋ฐํํ์
IS | AS
์ ์ธ๋ถ;
BEGIN
์คํ๋ถ;
RETURN (๋ฐํ ๊ฐ);
EXCEPTION
์์ธ ์ฒ๋ฆฌ๋ถ;
END [ํจ์๋ช
];
SQL
๋ณต์ฌ
ํจ์ ์คํ
โข
๋ธ๋ก์์ ์คํ
โข
SELECT์์ ์คํ
โข
๋ธ๋ก์์ ์คํ
DECLARE
๋ณ์๋ช
๋ฐ์ดํฐํ์
;
BEGIN
๋ณ์๋ช
:= ํจ์๋ช
(์ธ์1, ์ธ์2, ...);
END;
/
SQL
๋ณต์ฌ
โข
๋ธ๋ก์์ ์คํ
SELECT ํจ์๋ช
(์ธ์1, ์ธ์2, ... )
FROM ํ
์ด๋ธ๋ช
;
SQL
๋ณต์ฌ
ํจ์ ์ญ์
DROP FUNCTION ํจ์๋ช
;
SQL
๋ณต์ฌ
ํ๋ก์์ (PROCEDURE)
ํน์ ์
๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ์ผ๋ จ์ ์์
์ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ์ฅํ์ฌ ์ฌ์ฉํ๋ ๊ฐ์ฒด
โข
ํ๋ก์์ ์์ฑ
โฆ
ํ๋ผ๋ฏธํฐ
โฆ
ํ๋ผ๋ฏธํฐ
โข
ํ๋ก์์ ์คํ
โข
ํ๋ก์์ ์ญ์
ํ๋ก์์ ์์ฑ
โข
ํ๋ผ๋ฏธํฐ
โข
ํ๋ผ๋ฏธํฐ
โข
ํ๋ผ๋ฏธํฐ
CREATE OR REPLACE PROCEDURE ํ๋ก์์ ๋ช
IS | AS
์ ์ธ๋ถ
BEGIN
์คํ๋ถ
EXCEPTION
์์ธ ์ฒ๋ฆฌ๋ถ
END [ํ๋ก์์ ๋ช
];
SQL
๋ณต์ฌ
โข
ํ๋ผ๋ฏธํฐ
CREATE OR REPLACE PROCEDURE ํ๋ก์์ ๋ช
(
ํ๋ผ๋ฏธํฐ1 [IN / OUT / IN OUT] ๋ฐ์ดํฐํ์
[ := ๊ฐ | DEFAULT ๊ธฐ๋ณธ๊ฐ ],
ํ๋ผ๋ฏธํฐ2 [IN / OUT / IN OUT] ๋ฐ์ดํฐํ์
[ := ๊ฐ | DEFAULT ๊ธฐ๋ณธ๊ฐ ],
...
)
IS | AS
์ ์ธ๋ถ
BEGIN
์คํ๋ถ
EXCEPTION
์์ธ ์ฒ๋ฆฌ๋ถ
END [ํ๋ก์์ ๋ช
];
SQL
๋ณต์ฌ
โข
ํ๋ก์์ ์คํ
โข
ํ๋ผ๋ฏธํฐ ์์ ๋
EXCUTE ํ๋ก์์ ๋ช
;
SQL
๋ณต์ฌ
โข
ํ๋ผ๋ฏธํฐ ์์ ๋ (IN)
EXCUTE ํ๋ก์์ ๋ช
(์ธ์1, ์ธ์2, ...);
SQL
๋ณต์ฌ
EXCUTE ํ๋ก์์ ๋ช
(ํ๋ผ๋ฏธํฐ1 => ์ธ์1, ํ๋ผ๋ฏธํฐ2 => ์ธ์2, ...);
SQL
๋ณต์ฌ
โข
ํ๋ผ๋ฏธํฐ ์์ ๋ (OUT)
DECLARE
์ ์ธ๋ถ : OUTํ๋ผ๋ฏธํฐ๋ช
BEGIN
ํ๋ก์์ ๋ช
( ์ธ์1, ์ธ์2, OUTํ๋ผ๋ฏธํฐ๋ช
, ... );
EXCEPTION
์์ธ ์ฒ๋ฆฌ๋ถ
END;
/
SQL
๋ณต์ฌ
โข
ํ๋ก์์ ์ญ์
DROP PROCEDURE ํ๋ก์์ ๋ช
;
SQL
๋ณต์ฌ