¥·¡¼¥±¥ó¥¹ ¤È¥È¥ê¥¬¡¼¤ò»È¤Ã¤¿¼«Æ°ºÎÈÖµ¡Ç½¡Ê¥ª¡¼¥È¥Ê¥ó¥Ð¡¼¡Ë
Access ¤Ê¤É¤Ë¤¢¤ë¥ª¡¼¥È¥Ê¥ó¥Ðµ¡Ç½¤ò ¥È¥ê¥¬¡¼ ¤È SEQUENCE ¤Ç¼Â¸½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¤·¤«¤·¡¢¤³¤ÎÊýË¡¤Ï¤¢¤Þ¤ê´«¤á¤é¤ì¤Ê¤¤ÊýË¡¤Ç¤Ï¤¢¤ë¡£
´Æºº¤äºî¶È¥í¥°¤Î¤è¤¦¤Ê¥¨¥ó¥É¥æ¡¼¥¶¡¼¤ä¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥×¥í¥°¥é¥Þ¤«¤é¤Ï°ì¸«¡¢ÀßÄꤹ¤ë°ÕÌ£¤ä¸ºß²ÁÃͤ¬¤Ê¤¤¤È
»×¤ï¤ì¤ë¤è¤¦¤Ê¥«¥é¥à¤ËÂФ·¤Æ¤ÏÀßÃÖ¤¹¤ë¤³¤È¤Ç½ÅÊõ¤¬¤é¤ì¤ë¤À¤í¤¦¡£
¤¢¤Þ¤ê¤ª´«¤á¤Ï¤·¤Ê¤¤Íýͳ¤ÏÂ礤¯£²¤Ä
¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹
SQL ¤ËÈó¾ï¤Ëñ½ã¤Ê£±¥«¥é¥àÁý¤ä¤¹¤³¤È¤È³ä¤¬¹ç¤ï¤Ê¤¤¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¡£
¥È¥ê¥¬¤òȯÀ¸¤µ¤»¤ë¤³¤È¤Ç¡¢ËÜÍè¤Ï SQL ¥¨¥ó¥¸¥ó¤À¤±¤Îưºî¤ÇºÑ¤à¤â¤Î¤¬¡¢ SQL ¥¨¥ó¥¸¥ó ¢Í PL/SQL ¥¨¥ó¥¸¥ó ¢Í ¥È¥ê¥¬¡¼¤Î¼Â¹Ô (DUAL ɽ¤Ø¤Î¥¢¥¯¥»¥¹(¢¨)) ¤È¤Ê¤ë¡£¤³¤ì¤ÏȯÀ¸ÉÑÅÙ¡¢·ï¿ô¤È¤ÎÁêÃÌ¡£
¤Þ¤¿¡¢¤³¤Î¥È¥ê¥¬¡¼ ¤Ï ¥À¥¤¥ì¥¯¥È¡¦¥Ñ¥¹¡¦¥¤¥ó¥µ¡¼¥È ¤È¤Ï¶¦Â¸¤Ç¤¤Ê¤¤¡£¤³¤ì¤Ï°ìÉô¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¤Ï¾ùÊ⤷Æñ¤¤Â礤ʥǥá¥ê¥Ã¥È¤Ë¤Ê¤ë¡£
(¢¨) Oracle 11g ¤Ç¤Ï PL/SQL ¤«¤éľÀÜ¥·¡¼¥±¥ó¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¯¥»¥¹¤Ç¤¤ë¡£
¥Ç¡¼¥¿À°¹çÀ
¥È¥ê¥¬¡¼¤ÎÀßÃ֤ϥ¤¥ó¥Ý¡¼¥È¤È¤ÎÁêÀ¤â¹Íθ¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¡£´û¸´Ä¶¤Ë IGNORE=Y ¤Î¥â¡¼¥É¤Ç ¥¤¥ó¥Ý¡¼¥È ¤ò¹Ô¤¦¤È¥È¥ê¥¬¡¼¤¬µ¯Æ°¤¹¤ë¡£¤³¤Î¤È¤¥ª¡¼¥È¥Ê¥ó¥ÐÎó¤Ë¥ê¥ì¡¼¥·¥ç¥ó¤òÀßÃÖ¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤ÏºÙ¿´¤ÎÃí°Õ¤òʧ¤¦É¬Íפ¬¤¢¤ë¡£
¥È¥ê¥¬¡¼¤ò°ì»þŪ¤Ë̲¤Ã¤Æ¤â¤¦¤¤¤¿¤¤¾ì¹ç¤Ë¤Ï
ALTER TABLE table_name {ENABLE|DISABLE} ALL TRIGGERS ;
¤Î¤è¤¦¤Ë¥È¥ê¥¬¡¼¤ò̵¸ú²½¤·¤Æ¤ª¤¯¤Èµ¯Æ°¤·¤Ê¤¯¤Ê¤ë¡£
¤³¤Î¤è¤¦¤Ë»ÈÍѤ¹¤ë¥Æ¡¼¥Ö¥ë¤ä¥«¥é¥àÂоݤȷï¿ô¤ò»öÁ°¤Ë¹Íθ¤·¤ÆÀßÃÖ¤¹¤ëɬÍפ¬¤¢¤ê¡¢Â¿ÍѤϱ¿ÍÑ»þ¤Ë¤Ê¤Ã¤Æº¤¤ë¤³¤È¤Ë¤Ê¤ë¡£
¥·¡¼¥±¥ó¥¹¤È¥È¥ê¥¬¡¼¤Ë¤è¤ë¼ÂÁõÊýË¡
AUTONUMBER_TEST ¥Æ¡¼¥Ö¥ë¤Ë SEQUENCE ¤ò»È¤¤¥ª¡¼¥È¥Ê¥ó¥Ð¡¼Îó SEQ_NO ¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë
-- ºîÀ® DDL
-- ¥Æ¥¹¥È¥Æ¡¼¥Ö¥ë
CREATE TABLE RIVUS.AUTONUMBER_TEST (
SEQ_NO NUMBER PRIMARY KEY, -- ¥ª¡¼¥È¥Ê¥ó¥Ð¡¼Îó
USR_REM VARCHAR2(10)
)
/
-- ȯÈÖÍÑ¥·¡¼¥±¥ó¥¹
CREATE SEQUENCE RIVUS.AUTONUMBER_SEQ
/
-- ȯÈÖÍѥȥꥬ¡¼
CREATE OR REPLACE TRIGGER RIVUS.AUTONUMBER_NUMBERING
BEFORE INSERT ON AUTONUMBER_TEST
FOR EACH ROW
DECLARE
eIKENAIYO EXCEPTION;
-- (¥ª¥×¥·¥ç¥ó) Îã³°¤ÎÉÕ¤±Âؤ¨ DUP_VAL_ON_INDEX
PRAGMA EXCEPTION_INIT(eIKENAIYO, -1);
BEGIN
IF (:NEW.SEQ_NO IS NOT NULL) THEN
RAISE eIKENAIYO;
END IF;
SELECT AUTONUMBER_SEQ.NEXTVAL INTO :NEW.SEQ_NO FROM DUAL ;
-- Oracle 11g
-- NEW.SEQ_NO := AUTONUMBER_SEQ.NEXTVAL ;
END;
/
ȯÈÖ¤µ¤ì¤¿SEQ_NO ¤ò RETURNING ¤Ç INSERT »þ¤Ë¼èÆÀ¤¹¤ë (PL/SQL)
DECLARE
vCurrNo NUMBER;
BEGIN
INSERT INTO AUTONUMBER_TEST (USR_REM) VALUES ('¤¢¤¤¤¦')
RETURNING SEQ_NO INTO vCurrNo;
-- ¥¤¥±¥Ê¥¤Îã
-- INSERT INTO AUTONUMBER_TEST (SEQ_NO, USR_REM) VALUES ( 1, '¤¢¤¤¤¦')
-- RETURNING SEQ_NO INTO vCurrNo;
--
COMMIT;
DBMS_OUTPUT.PUT_LINE('ºÎÈÖ¤µ¤ì¤¿ÈÖ¹æ¤Ï ' || vCurrNo);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('¤½¤ì¤Ï¥¤¥±¥Ê¥¤');
ROLLBACK;
END;
/
...
ºÎÈÖ¤µ¤ì¤¿ÈÖ¹æ¤Ï 1