oracle中trigger文档在哪,在oracle中使用Trigger

1、初始目标

在对表h1插入一条数据时,同时插入一条重复的数据(只有主键不同)

2、在PL/SQL里New一个Trigger或者手动敲入代码

先说明一下,表h1包括4列ID、C1、C2、C3

create or replace trigger Trigger_Test

after insert on h1

for each row

declare

--variables

begin

insert into h1 values(:new.C1, :new.C2, :new.C3, :new.ID);

end Trigger_Test;

3、F8编译通过,新建一个窗口执行insert窗口,测试trigger是否有效,用了一个名为sequence_test的序列:

insert into h1 values('aa','bb','cc',sequence_test.nextval);

报错:表h1发生了变化,触发器/函数不能读。

4、网上搜的说法是“触发器不能修改触发表的数据,除非使用自治事务”,OK那就用自治事务:

declare

--variables

//改为:

declare

pragma autonomous_transaction;

再试报错:等待资源时检测到死锁。仔细一查,哦原来是目标有问题,Insert连着Insert,无限循环,不是资源死锁就是内存不足或者栈溢出。

5、目标更新为:在对表h1插入一条数据时,同时插入一条相同的数据到历史表里,把trigger里的insert修改为:

insert into h1_history values(:new.C1, :new.C2, :new.C3, :new.ID);

再跑又报错:检测到活动的自治事务处理,已经回退。

6、网上接着搜,说是有事务没提交。其实这是之前目标设定有问题,触发器一般不会修改触发表,用了自治事务,就要commit;如果是插入历史表,可以都不加。

declare

pragma autonomous_transaction;

commit;

delete from h1 where ID = 1;

commit;

//如果不操作触发表,则可以去掉自治事务的这一串声明

declare

insert into h1_history values(:new.C1, :new.C2, :new.C3, :new.ID);

7、小结

Trigger在修改其他表(非触发表)的时候,最方便,直接像写存储过程即可;

若要使用Trigger修改触发表的数据,需要配合使用自治事务并commit,比较麻烦;

对新操作的记录本身(比如新Insert/Update/Delete的数据),无法做修改,并且如果强行修改的话,既不会报错,也没有效果。

【Oracle】详解ORACLE中的trigger(触发器)

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

oracle中的trigger

https://blog.csdn.net/indexman/article/details/8023740/ https://www.cnblogs.com/sharpest/p/7764660.h ...

oracle中利用trigger,sequence自动生成ID

http://zhanghong.iteye.com/blog/865937 1. 首先创建数据库表 SQL> create table customer( 2  id number(8) no ...

在Oracle中使用Entity Framework 6 CodeFirst

项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...

oracle中imp命令详解 .

转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

Oracle中的自动增长字段

Oracle中的自动增长字段 Oracle 中不像MYSQL 和MSSQLServer 中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段. 在Or ...

Oracle中HWM与数据库性能的探讨

Oracle中HWM与数据库性能的探讨 一.什么是高水位 HWM(high water mark),高水标记,这个概念在segment的存储内容中是比较重要的.简单来说,HWM就是一个segment中 ...

oracle中有关用户、角色的一些概念。

oracle中的每个用户对应一个单独的方案(schema),方案的名字与用户名一样,方案中包含很多数据对象,表,视图,触发器,存储过程等元素. oracle中管理数据库的角色有sys,system,数 ...

oracle中imp命令具体解释

oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...

随机推荐

错误400-The request sent by the client was syntactically incorrect

springMVC中,某个页面提交时报400错误,如下图.     解决方法: 1.在网上找了一下,答案是通常遇到这个错误是因为前端jsp页面的控件名称和controller中接收的参数名称不一致.但 ...

jQuery form表单序列化为JSON对象!

/* 来源于博客园http://www.cnblogs.com/nixil/archive/2010/12/08/1900745.html */ function paramString2obj(se ...

mysql 查询优化

不说话,先贴代码 public PageResult getLargeList(BaseCondition baseCondition) { PageResult&lt ...

怎样从altera下载软件与器件库

首先要注册一个帐号,否则是不能下载的. step1:进入support->download 这是页面下方的显示,可以选择想要安装的Quartus版本以及该版本支持的器件.这里以16.0标准版为例 ...

django数据库动态添加列

方法一: python manage.py migrate 方法二: python manage.py migrate 效果: ---〉

x5设置经典门户登录

runtime\UIServer\index.jsp   java.lang.String url = request.getContextPath() + "/portal2/proces ...

ASP.NET C#_HTML练习

1. textarea和的区别是什么?  前者是多行输入框,后者是单行输入框 2. 如何让下拉框菜单支持多选?

nmap 使用脚本引擎进行扫描

1.下载nmap(nmap官网). 2.安装nmap. 3.编辑环境变量(windows下所需),保存.

设置Cookie,登录记住用户登录信息,获取用户登录过得信息

function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Da ...

jQuery 对象与Dom 对象互转

jQuery 对象与Dom 对象互转: $obj --[i],get(i)-->obj --$(obj)-->$obj; obj--$($(obj))-->$obj,多包装了也是$o ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值