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
是要删除的触发器的名称。
文章题目:Oracle触发器实例代码
标题链接:http://www.shufengxianlan.com/qtweb/news32/478132.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联