Search

PL/SQL

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
๋ณต์‚ฌ