`
microjava
  • 浏览: 318630 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

两个经典的Oracle触发器示例

阅读更多
【案例一】

题目:
--触发器:
--添加员工信息,流水号作为自动编号(通过序列生成),
--并且判断如果工资小于0,则改为0;如果大于10000,则改为10000。
CREATE TABLE emp2(
e_id NUMBER,
e_no NUMBER,
e_name VARCHAR2(20),
e_sal NUMBER
)

SELECT * FROM emp2;

CREATE SEQUENCE seq_trg_id;

INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子',
 1000000000000)
INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子怡',-10)


CREATE OR REPLACE TRIGGER trg_add_emp_info
  BEFORE INSERT
  ON emp2
  FOR EACH ROW
  DECLARE
    -- local variables here
  BEGIN
    SELECT seq_trg_id.NEXTVAL INTO :NEW.e_id FROM dual;
    IF  :NEW.e_sal < 0 THEN
       :NEW.e_sal := 0;
    ELSIF  :NEW.e_sal > 10000 THEN
       :NEW.e_sal := 10000;
    END IF;
  END;

【 案例二】

题目:

--扩充练习:
--为emp建立触发器,将删除的记录放到emp3表中(autoid,deptno,empno,ename,del_rq-删除日期)
--测试代码
CREATE TABLE emp3(
autoid NUMBER PRIMARY KEY,
deptno NUMBER,
empno NUMBER,
ename VARCHAR2(20),
del_rq DATE
)

CREATE SEQUENCE seq_trg_del_autoid;

INSERT INTO emp
  (empno, ename, deptno)
VALUES
  (114, '阿娇', 10);
 COMMIT;
 
 SELECT * FROM emp;
 
 DELETE emp WHERE empno = 114;
 SELECT * FROM emp3;
 
 答案:

CREATE OR REPLACE TRIGGER trg_del_emp_info
  BEFORE DELETE
  ON emp
  FOR EACH ROW
  DECLARE
    -- local variables here
  BEGIN
    INSERT INTO emp3(autoid,deptno,empno,ename,del_rq)
          VALUES(seq_trg_del_autoid.NEXTVAL,:OLD.deptno,:OLD.empno,:OLD.ename,sysdate);
  END;
分享到:
评论

相关推荐

    oracle触发器

    - `:new` 和 `:old` 是两个伪记录,分别代表新值和旧值,在`UPDATE`操作中特别有用。 #### 触发器的管理和控制 除了创建触发器外,Oracle还提供了丰富的命令来管理它们: - **查看触发器状态**:使用 `SELECT ...

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

    在Oracle中,触发器和存储过程是两个关键的数据库编程元素,它们在数据管理和业务流程自动化中发挥着重要作用。本节将深入探讨“Oracle触发器与存储过程高级编程”的相关知识。 **触发器(Triggers)** 触发器是一...

    oracle创建触发器实例

    总结来说,这个Oracle创建触发器的实例展示了如何使用触发器进行权限控制和日志记录,同时提供了关于如何处理和阻止非预期的DDL操作的示例。这在大型企业系统中尤其重要,因为它们需要严格的数据安全性和审计追踪...

    Oracle触发器好东东

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

    ORACLE中触发器和存储过程介绍相关代码

    以下是一个简单的触发器示例: ```sql CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT ON my_table FOR EACH ROW BEGIN IF :new.column_value IS NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Column value...

    Oracle触发器操作.pptx

    - 这两个特殊变量在DML操作触发触发器时产生,存储记录的旧值(:OLD)和新值(:NEW)。 - :OLD用于DELETE和UPDATE操作,存储被修改或删除行的副本。 - :NEW用于INSERT和UPDATE操作,存储新插入或更新行的副本。 ...

    oracle触发器执行顺序.pdf

    Oracle触发器是数据库对象,用于在特定的DML操作(INSERT、UPDATE、DELETE)发生时自动执行一段PL/SQL代码。它们可以帮助实现复杂的业务逻辑和数据验证。在Oracle中,触发器可以分为两种类型:行级触发器和语句级...

    oracle_基本的几种触发器

    例如,如果有一个视图`v_employee`,它基于两个表`employee`和`department`,我们可以在视图上创建一个Instead-of触发器来处理插入操作: ```sql CREATE OR REPLACE TRIGGER ins_v_employee INSTEAD OF INSERT ON v_...

    Oracle中触发器示例详解

    以下是一个简单的DML触发器示例,用于记录删除的员工信息: ```sql CREATE TABLE emp_audit ( name VARCHAR2(10), delete_time DATE ); CREATE OR REPLACE TRIGGER delete_trigger AFTER DELETE ON emp FOR EACH ...

    oracle示例数据库OT,oracle示例数据库 hr,SQL源码.zip.zip

    "Oracle示例数据库OT"和"oracle示例数据库hr"是Oracle公司为了帮助用户熟悉其数据库系统而提供的两个典型示例数据库。这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的...

    Oracle存储过程、触发器

    Oracle触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器常用于实现数据完整性约束、业务规则或审计功能。创建触发器的语法如下: ```sql CREATE TRIGGER ...

    存储过程、触发器、定时器例子(oracle)

    例如,一个简单的存储过程可能用于计算两个数字的和: ```sql CREATE OR REPLACE PROCEDURE add_numbers (p_num1 NUMBER, p_num2 NUMBER, OUT_RESULT OUT NUMBER) IS BEGIN OUT_RESULT := p_num1 + p_num2; ...

    oracle触发器实现

    #### 二、触发器示例解析 在提供的代码片段中,展示了两个触发器的创建语句:`AddTrainDayMove` 和 `EditTrainMonthMove`。我们将逐一分析这两个触发器的功能及其实现细节。 ##### 2.1 AddTrainDayMove 触发器 该...

    Oracle 示例方案 ----Mysql版数据脚本

    2. **数据类型转换**:Oracle和MySQL中数据类型的对应关系,如何在两个系统之间映射数据类型。 3. **对象关系模型**:在MySQL中实现Oracle的复杂表结构,如嵌套表、索引组织表和分区表。 4. **事务和并发控制**:...

    oracle 触发器、存储过程、函数、包

    包由两个部分组成:规范(Specification),定义公共接口;主体(Body),包含实际的代码实现。通过包,开发者可以隐藏内部实现细节,只暴露必要的接口给其他模块使用。 在实际应用中,你可能会看到如下示例: - ...

    oracleDML触发器.pptx

    7. **触发器示例** - 创建一个AFTER DELETE语句级触发器,记录orderdetails表中被删除的记录,可以使用以下代码: ```sql CREATE TABLE orderdetails_tablelog(who varchar2(40), oper_date date, operate ...

Global site tag (gtag.js) - Google Analytics