Oracle PL / SQL – INSERT触发器示例之后

本文详细介绍了如何在Oracle数据库中创建INSERT触发器,该触发器会在执行插入新用户操作后自动运行。当字段信息不完整时,触发器会将记录插入到指定表中。内容包括触发器的创建、数据测试以及触发效果的展示。
摘要由CSDN通过智能技术生成

本文向您展示了如何使用AFTER INSERT TRIGGER ,它将在执行插入操作后AFTER INSERT TRIGGER

1. INSERT触发后

在这个例子中,如果在创建新的用户user_details ,但像场passport_nodriving_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日 待处理

参考文献

  1. 创建DML触发器:示例
  2. PL / SQL触发器:-Oracle官方文档
  3. Oracle PL / SQL – INSERT触发器之前的示例

翻译自: https://mkyong.com/oracle/oracle-plsql-after-insert-trigger-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值