Oracle触发器实例代码

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。内容未经允许不得转载,或转载时需注明来源: 创新互联