Oracle触发器实例代码:创建表employees,定义触发器emp_salary_check,在插入或更新时检查薪资是否合法。
Oracle触发器实例代码
在Oracle数据库中,触发器(Trigger)是一类特殊的存储过程,它会在特定的数据库操作发生时自动执行,触发器可以用来实现数据完整性约束、审计日志记录、同步复制等功能,本文将通过一个实例来介绍如何创建和使用Oracle触发器。
创建触发器
我们创建一个名为employees
的表,用于存储员工信息:
CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50), salary NUMBER, department_id NUMBER );
接下来,我们创建一个名为departments
的表,用于存储部门信息:
CREATE TABLE departments ( id NUMBER PRIMARY KEY, name VARCHAR2(50) );
现在,我们创建一个触发器,当向employees
表中插入新记录时,自动检查department_id
字段是否在departments
表中存在,如果不存在,则抛出异常并阻止插入操作。
CREATE OR REPLACE TRIGGER check_department_id BEFORE INSERT ON employees FOR EACH ROW BEGIN IF :new.department_id NOT IN (SELECT id FROM departments) THEN RAISE_APPLICATION_ERROR(-20001, 'Invalid department_id'); END IF; END; /
使用触发器
现在,我们尝试向employees
表中插入一条记录:
INSERT INTO employees (id, name, salary, department_id) VALUES (1, '张三', 5000, 1);
由于department_id
为1的部门不存在于departments
表中,所以触发器会抛出异常并阻止插入操作,我们可以通过查询employees
表来验证这一点:
SELECT * FROM employees;
接下来,我们向departments
表中插入一条记录:
INSERT INTO departments (id, name) VALUES (1, '人事部');
现在,我们再次尝试向employees
表中插入记录:
INSERT INTO employees (id, name, salary, department_id) VALUES (1, '张三', 5000, 1);
这次插入操作会成功,因为department_id
为1的部门已经存在于departments
表中,我们可以再次查询employees
表来验证这一点:
SELECT * FROM employees;
相关问题与解答
1、什么是Oracle触发器?
答:Oracle触发器是一类特殊的存储过程,它会在特定的数据库操作发生时自动执行,触发器可以用来实现数据完整性约束、审计日志记录、同步复制等功能。
2、触发器的执行时机有哪些?
答:触发器的执行时机分为三类:BEFORE(之前)、AFTER(之后)和INSTEAD OF(替代),BEFORE触发器在指定操作发生之前执行;AFTER触发器在指定操作发生之后执行;INSTEAD OF触发器用于视图上,替代原始操作执行。
3、触发器的执行频率有哪些?
答:触发器的执行频率分为两类:FOR EACH ROW(行级)和FOR EACH STATEMENT(语句级),FOR EACH ROW触发器针对每个受影响的行执行一次;FOR EACH STATEMENT触发器针对整个SQL语句执行一次。
4、如何删除触发器?
答:可以使用以下语句删除触发器:
DROP TRIGGER trigger_name;
trigger_name
是要删除的触发器的名称。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/315026.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复