`
茶是树叶
  • 浏览: 59483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle触发器例子

阅读更多
把这些例子都亲自敲一遍,Oracle触发器就应该了解的差不多了
--格式:
create or replace trigger 名称
[after|before][delete|update|insert]
[on 表 | on schema]
[referencing new as 别名 old as 别名]
[for each row]
declare
....
begin
...
exception
....
end;

--创建一个delete类型行级触发器
--删除的一行数据保存在:old
create or replace trigger emp_delete_row_trigger
after delete
on emp
referencing new as n old as o
for each row
begin
dbms_output.put_line('emp_delete_row_trigger called.');
dbms_output.put_line('删除员工:' ||.empno || ' ' ||.ename);
end;

delete from emp where empno=7499;
delete from emp;
--创建一个insert类型行级触发器
--插入的一行新数据保存在:new
create or replace trigger emp_insert_row_trigger
after insert
on emp
for each row
begin
dbms_output.put_line('emp_insert_row_trigger called.');
dbms_output.put_line('添加员工:' || :new.empno || ' ' || :new.ename);
end;

insert into emp(empno,ename) values(1,'empxxx');

--创建一个update类型行级触发器
--修改前的数据保存在:old
--修改后的数据保存在:new
create or replace trigger emp_update_row_trigger
after update
on emp
for each row
begin
dbms_output.put_line('emp_update_row_trigger called.');
dbms_output.put_line('修改前:' ||ld.empno || ' ' ||ld.ename);
dbms_output.put_line('修改后:' || :new.empno || ' ' || :new.ename);
end;

update emp
set ename='xxxx'
where empno=7499;

--语句级触发器(update,delete,insert)
create or replace trigger delete_stmt_trigger
after delete
on emp
begin
dbms_output.put_line('delete_stmt_trigger called.');
end;

delete from emp;
--判断触发器类型

----------------------------------------------------------
--每进行一次交易,就要调用触发器,自动扣除或增加账户金额
----------------------------------------------------------
create table account
(
customerName varchar2(30) primary key,
cardID varchar2(8),
currentMoney number
);
insert into account values('Daivd','10010001',5000);
insert into account values('Jason','10010002',3000);

create table trans
(
transDate date,
cardID varchar2(8),
transType varchar2(10),
transMoney number
);
insert into trans
values(sysdate,'10010001','取款',1000);

create or replace trigger trans_trigger
before insert
on trans
for each row
declare
v_currentMoney account.currentMoney%type;
begin
--判断类型
if :new.transType='取款' then
--取款
select currentMoney into v_currentMoney
from account
where cardID=:new.cardID;

if v_currentMoney < :new.transMoney then
raise_application_error(-20001,'余额不足');
end if;

update account
set currentMoney=currentMoney-:new.transMoney
where cardID=:new.cardID;
else
--存款
update account
set currentMoney=currentMoney+:new.transMoney
where cardID=:new.cardID;
end if;
exception
when no_data_found then
raise_application_error(-20002,'无效的帐户');
end;


--模式(schema)级触发器
create or replace trigger schema_trigger
before drop
on schema
begin
dbms_output.put_line('schema_trigger called');
dbms_output.put_line(ora_dict_obj_name);
dbms_output.put_line(ora_dict_obj_type);

if ora_dict_obj_name='ACCOUNT' then
raise_application_error(-20003,'ACCOUNT表不能被删除');
end if;
end;

drop table account;
--ora_dict_obj_name 操作对象名称
--ora_dict_obj_type 操作对象类型

--启用触发器
alter trigger schema_trigger enable;
--禁用触发器
alter trigger schema_trigger disable;
分享到:
评论

相关推荐

    oracle触发器语法要点

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

    Oracle触发器里调用Java程序

    本篇文章将探讨如何在Oracle触发器中调用Java程序,以扩展数据库的功能并利用Java丰富的库资源。 首先,我们需要了解Oracle的PL/SQL(Procedural Language/Structured Query Language)语言,它是Oracle数据库内置...

    oracle函数触发器游标等几个小例子

    3. **Oracle触发器**:触发器是一种特殊的存储过程,会在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。`V_InsertEquip.sql`可能包含一个插入触发器的示例,这种触发器在向特定表中插入新数据时被...

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

    本文将通过一个具体的例子来展示如何在Oracle数据库中创建一个触发器,用于自动记录用户的登录信息。 #### 二、需求分析与设计 假设我们正在为一家企业开发一个基于Oracle数据库的安全管理系统。为了提高系统的...

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

    在这个例子中,触发器 `biu_emp_deptno` 在 `Emp` 表的 `deptNo` 字段进行插入或更新操作之前被触发,如果新值不等于40,则将 `comm` 列设为0。 ### 触发器的组成部分 触发器主要由三部分组成:触发语句、触发限制...

    oracle触发器实现二维码

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

    oracle数据库触发器实例

    本文将通过三个具体的例子来展示如何创建和使用Oracle数据库中的触发器。 #### 二、示例1:记录表变更日志 **目的**:记录对`test`表进行插入、更新和删除操作的日志信息。 **步骤**: 1. **创建表**:首先创建`...

    Oracle触发器

    Oracle触发器是数据库管理系统Oracle中的一个重要特性,它允许在特定事件(如数据修改DML操作:INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/SQL代码块。触发器可以用来实现复杂的业务规则,审计跟踪,或者在...

    oracle创建触发器实例

    Oracle 创建触发器是一种数据库编程技术,用于在特定的数据库事件发生时自动执行一段代码。在这个实例中,我们看到的是一个防止非本地机器执行DDL(Data Definition Language)操作的触发器,比如`TRUNCATE`、`ALTER...

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

    在“Oracle触发器与存储过程高级编程”中,我们将深入探讨这两个概念以及相关的高级特性。 首先,让我们关注用户自定义运算符(User-Defined Operators)。这些运算符允许开发人员扩展SQL语言,创建符合特定业务...

    oracle触发器使用笔记

    Oracle触发器是数据库管理系统Oracle中的一个关键特性,用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/SQL代码。触发器可以用来强制执行业务规则、实现复杂的数据验证和同步操作,...

    Oracle触发器好东东

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

    oracle触发器详解

    Oracle触发器是数据库管理系统中的一种重要机制,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行一段预定义的SQL代码或PL/SQL块。这对于实现业务规则、数据验证、日志记录等场景非常有用。...

    16.Oracle触发器1

    Oracle触发器是数据库对象,它是一种在特定事件发生时自动执行的存储过程。触发器的执行无需用户显式调用,而是由数据库系统在特定事件(如DML操作或DDL操作)触发时隐式运行。触发器由三部分组成:触发条件(即触发...

    oracle监控某表变动触发器例子(监控增,删,改)

    总结来说,这个Oracle监控表变动触发器例子是通过创建一个触发器来实时捕获对`test_table`的DML操作,并将这些操作的信息存入历史表`test_table_h`。这种方法可以有效地跟踪数据的变动,确保数据完整性,并且有助于...

    一个DDL触发器例子(阻止DDL并记警告日志)

    有时我们需要控制用户对表执行DDL操作,包括truncate等操作。为了达到灵活控制的目的,我们使用了DDL trigger

    ORACLE触发器语法

    在深入探讨ORACLE触发器语法之前,我们先来理解一下触发器的基本概念。触发器是数据库中的一个存储过程,它会在特定的事件(如数据插入、更新或删除)发生时自动执行。ORACLE触发器是一种强大的工具,允许数据库管理...

    Oracle触发器在税务MIS开发中的应用.pdf

    Oracle触发器在税务MIS开发中扮演着至关重要的角色,主要应用于数据完整性的维护、分布式删除操作、数据冗余管理以及动态数据处理。在税务信息管理系统(MIS)的开发中,通常会遇到数据一致性、批量删除和实时信息...

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

    在Oracle数据库系统中,存储过程、触发器和定时器是三个关键的数据库管理工具,它们在数据处理和业务逻辑执行中扮演着重要角色。本文将详细介绍这三个概念,并结合实际例子来帮助理解它们的工作原理和应用。 1. **...

Global site tag (gtag.js) - Google Analytics