`
huigang10086
  • 浏览: 1409 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

oracle触发器(trigger)的使用示例

阅读更多
创建一个DML语句级触发器,当对emp表执行INSERT, UPDATE, DELETE 操作时,它自动更新dept_summary 表中的数据。由于在PL/SQL块中不能直接调用DDL语句,所以,利用ORACLE内置包DBMS_UTILITY中的EXEC_DDL_STATEMENT过程,由它执行DDL语句创建触发器。

CREATE TABLE dept_summary(
Deptno NUMBER(2),
Sal_sum NUMBER(9, 2),
Emp_count NUMBER);

INSERT INTO dept_summary(deptno, sal_sum, emp_count)
SELECT deptno, SUM(sal), COUNT(*)
FROM emp
GROUP BY deptno;

--创建一个PL/SQL过程disp_dept_summary
--在触发器中调用该过程显示dept_summary标中的数据。
CREATE OR REPLACE PROCEDURE disp_dept_summary
IS
Rec dept_summary%ROWTYPE;
CURSOR c1 IS SELECT * FROM dept_summary;
BEGIN
OPEN c1;
FETCH c1 INTO REC;
DBMS_OUTPUT.PUT_LINE('deptno    sal_sum    emp_count');
DBMS_OUTPUT.PUT_LINE('-------------------------------------');
WHILE c1%FOUND LOOP
    DBMS_OUTPUT.PUT_LINE(RPAD(rec.deptno, 6)||
      To_char(rec.sal_sum, '$999,999.99')||
      LPAD(rec.emp_count, 13));
    FETCH c1 INTO rec;
END LOOP;
CLOSE c1;
END;
BEGIN
DBMS_OUTPUT.PUT_LINE('插入前');
Disp_dept_summary();
DBMS_UTILITY.EXEC_DDL_STATEMENT('
    CREATE OR REPLACE TRIGGER trig1
      AFTER INSERT OR DELETE OR UPDATE OF sal ON emp
    BEGIN
      DBMS_OUTPUT.PUT_LINE(''正在执行trig1 触发器…'');
      DELETE FROM dept_summary;
      INSERT INTO dept_summary(deptno, sal_sum, emp_count)
      SELECT deptno, SUM(sal), COUNT(*)
      FROM emp GROUP BY deptno;
    END;
');


INSERT INTO dept(deptno, dname, loc)
VALUES(90, ‘demo_dept’, ‘none_loc’);
INSERT INTO emp(ename, deptno, empno, sal)
VALUES(USER, 90, 9999, 3000);

DBMS_OUTPUT.PUT_LINE('插入后');
Disp_dept_summary();

UPDATE emp SET sal=1000 WHERE empno=9999;
DBMS_OUTPUT.PUT_LINE('修改后');
Disp_dept_summary();

DELETE FROM emp WHERE empno=9999;
DELETE FROM dept WHERE deptno=90;

DBMS_OUTPUT.PUT_LINE('删除后');
Disp_dept_summary();
DBMS_UTILITY.EXEC_DDL_STATEMENT(‘DROP TRIGGER trig1’);
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);

END;
分享到:
评论

相关推荐

    oracle 触发器实时调用java 中http接口

    总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...

    Oracle触发器备份表数据

    综上所述,使用Oracle触发器备份表数据是一种高效且灵活的方法,但同时也需要注意其潜在的局限性和挑战。通过合理设计和优化触发器,可以有效提升数据备份的效率和安全性,为数据库管理提供有力的支持。

    oracle触发器功能介绍

    理解并正确使用Oracle触发器,可以帮助我们更好地管理和保护数据库中的数据,同时要注意合理使用,以避免潜在的问题。通过学习和实践,我们可以将触发器作为工具箱中的一项有力武器,为数据库的健壮性和稳定性保驾...

    oracle触发器语法要点

    ### Oracle触发器语法要点 #### 一、触发器概述 Oracle触发器是一种存储过程,它在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以用于实施复杂的业务规则、数据完整性检查或者自动生成...

    oracle触发器与存储过程高级编程

    总之,“Oracle触发器与存储过程高级编程”是数据库开发中的重要技能,理解它们的工作原理、如何创建和使用,以及何时应该避免使用,对于提升数据库管理效率和数据安全性至关重要。通过实践和学习,你可以更好地掌握...

    oracle触发器

    ### Oracle触发器详解 在Oracle数据库管理中,触发器是一种非常强大的工具,它允许你在特定的数据库事件(如数据插入、更新或删除)发生时自动执行预定义的SQL语句或PL/SQL代码块。这使得数据库能够在无需外部程序...

    ORACLE触发器、内置程序包教学.doc )

    根据给定的文件信息,我们将深入探讨Oracle数据库中的触发器和内置程序包,重点解析触发器的概念、创建方法以及其在数据库管理中的作用。 ### 触发器:自动化执行的存储过程 触发器是一种特殊类型的存储过程,它在...

    Oracle触发器详解

    ### Oracle触发器详解 在数据库管理系统中,Oracle触发器是一种特殊类型的存储过程,它自动执行对数据的操作,当特定事件发生时(如插入、更新或删除数据)在数据库表上执行。触发器可以用于实现复杂的数据完整性...

    oracle触发器实例

    Oracle触发器是数据库管理系统Oracle中的一个重要特性,它允许开发者在特定的数据操作语言(DML)事件发生时自动执行预定义的PL/SQL代码。触发器主要用于实现数据的完整性、一致性控制,以及执行复杂的业务规则。...

    触发器使用教程和命名规范

    Oracle 触发器的示例: * 例一:行级触发器之一,用于插入员工记录时自动分配员工编号。 * 例二:行级触发器之二,用于更新员工记录时检查员工状态。 * 例三:INSTEAD OF 触发器,用于在视图上执行插入、更新或...

    oracle触发器调用存储过程

    ### Oracle触发器调用存储过程 #### 知识点概览 1. **触发器基本概念** 2. **存储过程简介** 3. **触发器如何调用存储过程** 4. **示例代码详解** 5. **注意事项** 6. **自主事务(Autonomous Transaction)** 7. ...

    Oracle触发器语法

    Oracle触发器是数据库管理系统Oracle中的一种重要特性,用于在特定数据操作(如插入、删除、更新)发生时自动执行预定义的SQL语句或PL/SQL代码块。这些语句或代码块通常用来实现复杂的数据完整性规则、安全性控制、...

    oracle触发器的创建和跨数据库查询.zip

    Oracle触发器是数据库对象之一,它允许在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行一段PL/SQL代码。触发器是数据库级的程序,可以在数据更改前或后执行,用来实现复杂的业务规则和逻辑。在这个...

    oracle触发器使用,很详细

    触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,...

    oracle触发器实现二维码

    在这个场景中,我们讨论的是如何利用Oracle触发器来实现二维码的生成与存储。 首先,"oracle触发器实现二维码"这个标题意味着我们将结合Oracle数据库和二维码技术。二维码(Quick Response Code,简称QR Code)是一...

    oracle中记录用户登录信息的触发器的例子

    使用`create or replace trigger`语句创建触发器`logon_trigger`,当用户登录时执行以下操作: - 将当前登录用户的用户名(`user`)、客户端IP地址(`sys_context('userenv','ip_address')`)以及当前日期(`sysdate`)...

    oracle数据库触发器实例

    以上三个示例详细展示了如何在Oracle数据库中创建和使用触发器。触发器能够自动化处理数据变更,简化开发人员的工作流程,同时确保数据的一致性和准确性。通过这些示例,我们可以看到触发器的强大功能及其在实际应用...

    oracle触发器实现主键自动增长

    本文将深入探讨如何利用Oracle触发器来实现这一功能,同时也会讲解背后的原理与实践步骤。 ### Oracle触发器与序列 在Oracle中,触发器是一种存储过程,它被定义为当特定事件(如数据的插入、更新或删除)发生时...

    Oracle Table Form Trigger

    - Trigger.txt 可能详细讲解了如何编写和管理Oracle触发器,包括各种类型的触发器和最佳实践。 - Oracle Forms Trigger.txt 可能专注于如何在Oracle Forms中使用触发器,如在表单级别触发器的应用,以及它们如何与...

    Oracle触发器好东东

    根据提供的文件信息,本文将详细解释Oracle触发器的相关知识点,包括触发器的基本概念、类型以及在实际场景中的应用示例。 ### Oracle触发器基础 触发器是数据库管理系统中的一种存储过程,它会在特定的数据库事件...

Global site tag (gtag.js) - Google Analytics