`
lorry1113
  • 浏览: 262344 次
  • 性别: 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 sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

CREATE SEQUENCE seq_trg_id
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
nocache;

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触发器操作.pptx

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

    Oracle.ManagedDataAccess.dll.rar

    这个RAR压缩包包含了两个不同版本的Oracle.ManagedDataAccess.dll,分别是4.122.1.0和4.122.19.1。根据描述,作者在使用过程中发现高版本(4.122.19.1)的性能表现更好,而低版本(4.122.1.0)可能在某些操作上速度...

    oracleDML触发器.pptx

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

    oracle触发器执行顺序.pdf

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

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

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

    oracle触发器

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

    oracle创建触发器实例

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

    oracle-sql.rar_oracle

    在“oracle-sql.rar”中,我们有两个文件:“oracle常用经典sql查询.doc”和“www.pudn.com.txt”。首先,"oracle常用经典sql查询.doc"很可能包含了各种常见的SQL查询语句,这些语句对于理解和掌握Oracle SQL的基础...

    Oracle触发器好东东

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

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

    "Oracle示例数据库OT"和"oracle示例数据库hr"是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_基本的几种触发器

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

    ORACLE关系数据库中SQL*FORM的触发器.pdf

    例如,以下是一个简单的触发器示例: ``` CREATE TRIGGER trg_example BEFORE INSERT ON table_name FOR EACH ROW BEGIN -- 触发器体 END; ``` 在这个示例中,trg_example是触发器的名称,BEFORE INSERT ON table_...

    Oracle存储过程、触发器

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

    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 ...

    PLSQL触发器.pdf

    PLSQL 触发器 PLSQL 触发器是一种特殊的存储过程,与普通存储过程不同的是,...在上面的示例中,我们创建了一个名为 tr_sal 的行级触发器,该触发器会在更新员工薪水时触发,并检查是否减少了薪水,若是,则抛出异常。

Global site tag (gtag.js) - Google Analytics