Oracle使用触发器和mysql中使用触发器的案例比较

一、触发器

  1.触发器在数据库里以独立的对象存储,

  2.触发器不需要调用,它由一个事件来触发运行

  3.触发器不能接收参数

  --触发器的应用

    举个例子:校内网、开心网、facebook,当你发一个日志,自动通知好友,其实就是在增加日志的时候做一个出发,再向表中写入条目。

  --触发器的效率很高

    举例:论坛的发帖,每插入一个帖子都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,这时使用触发器效率会很高。

二、Oracle 使用 PL/SQL 编写触发器

1.--PL/SQL创建触发器的一般语法

create [or replace] trigger trigger_name
{before | after}
{insert | delete | update [of column[,column ... ]]} on table_name
[for each row]
[where condition]
--trigger_body;
begin
end;

2.--练习

--问题3.使用:old 和 :new 操作符
create or replace trigger tri_update
after
update on employees
for each row
begin
  dbms_output.put_line('更新前:'||:old.salary||' 更新后:'||:new.salary);
end;
--问题2.编写一个触发器,在向 emp 表中插入记录时 打印'hello'
create or replace trigger tri_update
after
insert on emp
begin
  dbms_output.put_line('ok');
end;
--问题1.一个helloworld级别的触发器
--创建一个触发器,在更新employees表的时候触发
create or replace trigger tri_update
after
update on employees
for each row --想在最后执行完打印一个ok,把这句话去掉
begin
  dbms_output.put_line('ok');
end;
--执行
update employees
set salary = salary+1
where department_id = 80

三、在MySql 使用触发器

--假设有两张表 board 和 article
create table board(
  id int primary key auto_increment,
  name varchar(50),
  articleCount int
);
create table article(
  id int primary key auto_increment,
  title varchar(50),
  bid int references board(id)
);
--创建一个触发器
delimiter $$
create trigger insertArticle_trigger
after insert on article
for each row
begin
  update board set articleCount=articleCount+1
where id = new.bid;
end;
$$
delimiter ;
--当我们对article表执行插入操作的是后就会触发这个触发器
insert into board values(null,'test_boardname',0);
insert into article values(null,'test_title',1);
--执行完这条插入语句后,board表中的articleCount字段值回+1;这个操作由触发器完成。

以上所述是小编给大家介绍的Oracle使用触发器和mysql中使用触发器的案例比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • [Oracle] 如何使用触发器实现IP限制用户登录

    下面是一个触发器的例子: 复制代码 代码如下: create or replace trigger logon_ip_controlafter logon on databasedeclare  ip STRING(30);  user STRING(30);beginSELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip

  • Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)

    出现原因,是因为在更新的的表和读取的表是同一个表. CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW FOR EACH ROW DECLARE U_xtfidemp1 varchar(36); u_xtempcode1 varchar(20); u_xtempcodeCount int:=0; U_xtfidempCount int:=0; u_i

  • oracle 触发器 学习笔记

    功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一致性 4. 提供审计和日志记录 5. 防止无效的事务处理 6. 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row wh

  • 详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数 需求产生: 业务系统中,有一步"抽数"流程,就是把一些数据从其它服务器同步到本库的目标表.这个过程有可能 多人同时抽数,互相影响.有测试人员反应,原来抽过的数,偶尔就无缘无故的找不到了,有时又会出来重复行.这个问题产生肯定是抽数逻辑问题以及并行的问题了!但他们提了一个简单的需求:想知道什么时候数据被删除了,什么时候插入了,我需要监控"表的每一次变更"! 技术选择: 第一就想到触发器,这样能在不涉及业务系统的代码情况

  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user  (       id   number(6) not null,       name   varchar2(30)   not null primary key  )

  • Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需要说明一下,触发器可以分为语句级触发器和行级触发器.详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例: 1.

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

    使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中. 代码: 复制代码 代码如下: create or replace trigger test_trigger    before insert or update or delete on test_table    for each row  declare    v_id        varchar2(30);    v_bdlb      varchar2(1);    v_jgdm      VARCHAR2(

  • oracle 触发器 实现出入库

    用语言实现 好处: 1.可以减少对数据库的访问. 2.可移植性好. 坏处: 1.操作起来考虑的东西较多,修改一处就要修改别一处.也就是说是相互关联的.如果少改了某一处,很可能使数据不一致. 用触发器实现 好处: 1.可以使程序员从复杂的相互关联中解放出来,把精力放在复杂的业务上. 坏处: 1.可移植性差. 下面我就用一个例子实现一个简单的出入库.因为是例子表中所用到的字段很少.这里的例子只做为抛砖引玉. 数据表为入库金额表(以下简称入库表)income,出库金额表(以下简称出库表)outlay,

  • oracle 存储过程和触发器复制数据

    一.存储过程的创建和使用 1.创建程序包,并在程序中创建存储过程 create or replace PACKAGE NCS_ICP_TJ AS /*lfx@ncs-cyber.com.cn*/ /* TODO 在此输入程序包声明 (类型, 异常错误, 方法等) */ /*根据备案主体ID拷贝通过表备案数据到备案临时表,拷贝5张*/ PROCEDURE ICP_PASS_TO_TEMP( v_main_id IN icp_gn_temp_baxx_zt.ztid%TYPE, v_lyd IN i

  • Oracle触发器实例代码

    Oracle触发器,用于选单后修改选单的表的触发动作. --备货检验选单后 回写备货状态 CREATE OR REPLACE TRIGGER tri_TobaccoStockINSERT after INSERT ON "TobaccoStockQuality" FOR each ROW BEGIN UPDATE "GoodsStock" SET "FirstCheckState"=-1 WHERE "ID"=:NEW.&qu

随机推荐