本文向您展示了如何使用AFTER INSERT TRIGGER
,它将在执行插入操作后AFTER INSERT TRIGGER
。
1. INSERT触发后
在这个例子中,如果在创建新的用户user_details
,但像场passport_no
或driving_license_no
丢失,新的记录将被插入到user_reminders
通过在“插入后”触发user_details
1.1创建表并触发。
USER_DETAILS
CREATE TABLE USER_DETAILS
(
USER_ID number(10) primary key,
USER_NAME varchar2(15),
EMAIL varchar2(20),
PHONE number(12),
PASSPORT_NO varchar2(10),
DRIVING_LICENSE_NO varchar2(10)
);
USER_REMINDERS
CREATE TABLE USER_REMINDERS
(
USER_ID number(10),
REMINDER_TEXT varchar2(200),
REMINDER_DATE date,
STATUS varchar2(10)
);
trg_after_insert_user
CREATE OR REPLACE TRIGGER trg_after_insert_user
AFTER INSERT
on USER_DETAILS
FOR EACH ROW
DECLARE
counter number(2);
reminder_text varchar2(200);
BEGIN
counter := 0;
reminder_text := '';
IF(:NEW.PASSPORT_NO = '' OR :NEW.PASSPORT_NO is null) THEN
reminder_text := 'Please insert your passport details into system. ';
counter := counter+1;
END IF;
IF(:NEW.DRIVING_LICENSE_NO = '' OR :NEW.DRIVING_LICENSE_NO is null) THEN
reminder_text := reminder_text || 'Please insert your Driving license details into system.';
counter := counter+1;
END IF;
-- If passport_no and/or driving_license_no is missing
-- then counter will be >0 and below code will insert into user_reminders table.
IF(counter>0) THEN
INSERT INTO USER_REMINDERS VALUES (:NEW.USER_ID,reminder_text,sysdate+3,'PENDING');
END IF;
END;
1.2插入数据以测试触发器。
-- fire after insert trigger, no action.
INSERT INTO USER_DETAILS VALUES (1,'USERNM1','abcdxyz@abc.com',9999999999,'PASSNUM123','DRIVLIC999');
-- fire after insert trigger, password is null, insert new record into USER_REMINDERS
INSERT INTO USER_DETAILS VALUES (2,'USERNM22','xyzabcd@abc.com',1111111111,null,'LICNC12345');
-- fire after insert trigger, password and driving no are null, insert new record into USER_REMINDERS
INSERT INTO USER_DETAILS VALUES (3,'USERNM33','xyztttt@abc.com',3333333333,null,null);
-- fire after insert trigger, driving no is null, insert new record into USER_REMINDERS
INSERT INTO USER_DETAILS VALUES (4,'USERNM44','ghijkl@abc.com',4444444444,'ONLYPASS11',null);
1.3显示数据。
select * from USER_DETAILS;
用户身份 | 用户名 | 电子邮件 | 电话 | 护照号 | DRIVING_LICENSE_NO |
---|---|---|---|---|---|
1个 | 用户NM1 | abcdxyz@abc.com | 9999999999 | 密码 | DRIVLIC999 |
2 | 用户NM22 | xyzabcd@abc.com | 1111111111 | 空值 | LICNC12345 |
3 | 用户NM33 | xyztttt@abc.com | 3333333333 | 空值 | 空值 |
4 | 用户NM44 | ghijkl@abc.com | 4444444444 | 仅限通行证11 | 空值 |
select * from USER_REMINDERS;
用户身份 | REMINDER_TEXT | REMINDER_DATE | 状态 |
---|---|---|---|
2 | 请将您的护照详细信息插入系统。 | 2017年6月21日 | 待处理 |
3 | 请将您的护照详细信息插入系统。 请将您的驾驶执照详细信息插入系统。 | 2017年6月21日 | 待处理 |
4 | 请将您的驾驶执照详细信息插入系统。 | 2017年6月21日 | 待处理 |
参考文献
翻译自: https://mkyong.com/oracle/oracle-plsql-after-insert-trigger-example/