ORACLE
HOME > DB > ORACLE
2018.09.30 / 22:08

[ORACLE] Æ®¸®°Å »ç¿ë ¿¹Á¦

GAScripter
Ãßõ ¼ö 178

[ORACLE] Æ®¸®°Å »ç¿ë ¿¹Á¦

¿À´Ã ¿À¶óŬ¿¡ ´ëÇØ Àá±ñ º¼ ±âȸ°¡ »ý°Ü º¸´øÁß¿¡ Æ®¸®°Å¶ó´Â ³à¼®°ú ¸¶ÁÖÄ¡°Ô µÇ¾ú½À´Ï´Ù.

±×·¡µµ °øºÎÇÑ ³»¿ëÀε¥ ±î¸ÔÁö ¾Ê±â À§ÇØ ±â·ÏÇØ µÖ¾ß °Ú½À´Ï´Ù.

Æ®¸®°Å¸¦ ÀÌ¿ëÇØ Æ¯Á¤ Å×À̺íÀÇ µ¥ÀÌÅÍ¿¡ »ý±â´Â ÀÛ¾÷À» °¨½Ã ÇÏ¿© Ãß°¡ÀûÀÎ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

¸¶Ä¡ ½ºÇÁ¸µ AOPÀÇ Advice°°Àº ´À³¦ÀÔ´Ï´Ù. ÇÏÁö¸¸ DB¿¡¼­ ÀÌ·±°ÍÀ» ¸¶±¸ ¾²´Ùº¸¸é ÆÛÆ÷¸Õ½º ÀúÇÏ´Â ÀÚ¸íÇÑ °á°úÀÏ°Í °°³×¿ä.

[code]SQL> DESC RENTAL_LIST;
 À̸§                                      ³Î?      À¯Çü
 —————————————– ——– —————————-
 NO                                        NOT NULL NUMBER(4)
 RENTAL_DATE                               NOT NULL DATE
 TO_RETURN_DATE                                     DATE
 RETURN_DATE                                        DATE
 CUSTOMER_NO                               NOT NULL NUMBER(4)
 DVD_NO                                    NOT NULL NUMBER(4)



SQL> DESC DVD_TITLE;
 À̸§                                      ³Î?      À¯Çü
 —————————————– ——– —————————-
 NO                                        NOT NULL NUMBER(4)
 TITLE                                     NOT NULL VARCHAR2(20)
 GENRE                                              VARCHAR2(20)
 DIRECTOR                                           VARCHAR2(20)
 MAIN_ACTOR                                         VARCHAR2(20)
 PURCHASE_DATE                                      DATE
 QUANTITY                                  NOT NULL NUMBER(2)[/code]

À§¿Í °°Àº ½ºÅ°¸¶ ±¸Á¶ÀÏ ¶§ DVDÀÇ ·»Å»ÀÌ ÀϾ¸é DVD_TITLEÀÇ QUANTITY¸¦ 1°³ ÁÙÀÌ°í, ¹Ý³³ ÀÏÀÚÀÎ RETURN_DATE¸¦ RENTAL_DATEÀÇ 3ÀÏ ÈÄ·Î ÀÚµ¿ ÀÔ·ÂÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ¿© º¾½Ã´Ù.

BEFORE¿Í AFTER¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.

[code]CREATE OR REPLACE TRIGGER CHANGE_QUANTITY
AFTER INSERT ON RENTAL_LIST FOR EACH ROW
BEGIN
  UPDATE DVD_TITLE SET QUANTITY = QUANTITY – 1 WHERE NO = :NEW.DVD_NO;
END;

INSERT INTO RENTAL_LIST(NO, RENTAL_DATE, TO_RETURN_DATE, RETURN_DATE, CUSTOMET_NO, DVD_NO) 
VALUES(RENTAL_SEQ.NEXTVAL, ¡®2007-11-02¡¯, ¡®2007-11-05¡¯, ¡±, 50, 1) [/code]

À§¿Í °°Àº Äõ¸®¹® ½ÇÇà½Ã :NEW.DVD_NO¿¡´Â ¹æ±Ý ÀÔ·ÂµÈ DVD_NOÀÇ °ªÀÌ ´ëÀԵ˴ϴÙ. DVD_NO·Î DVD_TITLE Å×ÀÌºí¿¡¼­ °ªÀ» ã¾Æ QUANTITY¸¦ 1 °¨¼Ò½ÃÅ°°Ô µË´Ï´Ù.

AFTER INSERT ON RENTAL_LIST ¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ RENTAL_LIST¿¡ INSERT°¡ ÀϾ ÈÄ¿¡ ÀÌ Æ®¸®°Å°¡ ½ÇÇàµË´Ï´Ù.

FOR EACH ROW ´Â ¿©·¯ ROW°¡ ¿µÇâÀ» ¹Þ¾ÒÀ» °æ¿ì °¢°¢À» ½ÇÇàÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù.

À̹ø¿¡´Â INSERT Á÷Àü¿¡ RETURN_DATE¿¡ RENTAL_DATEÀÇ 3ÀÏ ÈÄ ³¯Â¥¸¦ ÀÚµ¿À¸·Î ÀÔ·ÂÇÏ´Â Æ®¸®°Å¸¦ ÀÛ¼ºÇØ º¸ÁÒ.

[code]CREATE OR REPLACE TRIGGER AUTO_ADDED_RETURN_DATE
BEFORE INSERT ON RENTAL_LIST FOR EACH ROW
BEGIN
  :NEW.RETURN_DATE := :NEW.RENTAL_DATE + 3
END;[/code]

BEFORE INSERT ON RENTAL_LIST ¿¡¼­ º¼ ¼ö ÀÖµíÀÌ INSERT°¡ ÀϾ±â Àü¿¡ ½ÇÇàµË´Ï´Ù.

°ªÀÌ ÀԷµÇÁö ¾ÊÀº :NEW.RETURN_DATE ¿¡ :NEW.RENTAL_DATE¸¦ 3Áõ°¡½ÃÄÑ ÀÔ·ÂÇÕ´Ï´Ù. +3À» Çϸé 3ÀÏÀÌ Áõ°¡µË´Ï´Ù.

À̷νá RETURN_DATE¿¡µµ °ªÀÌ ÀÚµ¿À¸·Î ÀԷµ˴ϴÙ.