oracle触发器问题

 

id pid
1 0
2 1
3 1

比如oracle表中数据是这样的,怎么定义触发器,比如,更改id=1的id时,使id=2,3的行的pid跟着更改

还有删除id=1的行,pid为1的行也删除

0
liuyinhuan0409
liuyinhuan0409 楼主来了也把问题给结了呗
6 年多之前 回复

2个回答

[code="sql"]
create or replace trigger trigger_test
after update or delete on whisky
referencing old as old new as new
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;
-- local variables here
begin
--for update
if updating then
update whisky set pid = :new.id where pid = :old.id;
else
--for delete
delete from whisky where pid = :old.id;
end if;
commit;
end trigger_test;

[/code]
我测试是ok的,不知是否满足你的需求。。。

0
liuyinhuan0409
liuyinhuan0409 啊哦啊哦,谢谢
6 年多之前 回复
dzq584462393
dzq584462393 你的回答我怎么没收到信息呢,我还以为你没回呢>对不起啊
6 年多之前 回复
liuyinhuan0409
liuyinhuan0409 :x :( :x :(
6 年多之前 回复
liuyinhuan0409
liuyinhuan0409 忽悠我咧。。。 :cry: :cry: :cry:
接近 7 年之前 回复
liuyinhuan0409
liuyinhuan0409 这个能满足你需求么? 第3行:用来取出trigger触发前、后的新、老值;第6行:声明一个自治事物,一般对本table的操作的trigger需要使用自治事物,不然会引发死锁等其他问题。
接近 7 年之前 回复
dzq584462393
dzq584462393 受不了了,大神就是大神,想请教下3,6行是什么意思,多帮忙下,反正分给你了
接近 7 年之前 回复

[code="java"]
create or replace trigger trig_test_tb
after delete on test_tb
for each row
declare
pragma autonomous_transaction;
begin
delete from test_tb where pid=:old.id;
commit;
end;
[/code]

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
高并发场景下oracle触发器+序列产生序号的一些现象与思考
最近工作上因为在处理系统同步的时候遇到了一些问题,在解决过程中,发现了一些现象,所以在这里mark一下,我现有的残缺理论体系还无法支撑做出合理的解释,在网上找了一下,也没有找到类似的案例,还望各位大拿指点一二。 话不多说,直接上案例,在pl/sql上做的模拟。 原始案例(故障): 1.先创建一个表test,三个字段id,name,sno create table test(id i
被Oracle触发器给坑了
例行检查数据库AWR报告,有一条update语句执行多次,每次执行时间30多秒,这条SQL语句很简单,就是根据主键条件修改数据,主键个数是1到100之间。这个问题由来已久,只是偶尔出现。主键是varchar2,类似序列,由于之前有迁移过数据,特别在主键上为迁移的这部分数据加过标记,用肉眼看主键的分布是不均匀的。     第一次诊断:这个表有150万的数据,执行慢是因为update的时候没走到主键
对oracle 触发器的一些见解
前些日子在某国企做数据库的时候被告知他们的oracle数据库里面不建议用trigger,说了一大堆理由,概括一下就是不稳定,可靠性低。 我一时间想不明白,既然Oracle这么顶级的数据库,如此成熟的产品,如果触发器不可靠的话早就该舍弃掉换做其他方式替代了。 今天我修改数据库表结构的时候终于发现了这个问题。   我有两张表A和B,A有一个触发器,作用是插入A表之前做一些操作然后把数据出发到B。
关于触发器死循环的问题
有如下触发器: CREATE TRIGGER tri_UpdateJobTime ON 招聘表 FOR UPDATE AS BEGIN UPDATE 招聘表 SET 更新日期=GETDATE() WHERE 招聘id=Inserted.招聘id END 按道理来讲,这个触发器会导致死循环,但是实际应用时,却没发现任何异样。 在查询分析器里,执行 Update 招聘表
Oracle解决主键ID自增问题触发器序列--进阶篇
Oracle触发器解决插入时ID自增问题--进阶篇第一种 序列触发器自增第二种 直接用触发器自增ID 第一种 序列触发器自增 这个是流行的做法,废话不多说直接上码: --简单介绍一下序列参数的意思 CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1 ...
oracle使用快照和触发器同步不同数据库中的表数据
假设有数据库db1和db2 , 表db1.t_task_msg, db2.t_task_msg 现在同步db1.t_task_msg数据到db2.t_task_msg 1, 在db2建立到db1的连接source_link [code="java"] create database link source_link    connect to db1_user identified ...
Oracle12--变异表(五十四)
啥是变异表 定义:当一张数据表执行了更新操作后,就成为了一张变异表; 问题:如果在变异表上设置了行级触发器,就会出现ORA-04091的异常; 示例1:通过一个程序来说明此问题。定义一张数据表 DROP TABLE info PURGE ; CREATE TABLE info( id NUMBER , title VARCHAR2(50)
oracle trigger 范了一个巨大的错误 递归了
CREATE OR REPLACE TRIGGER UPT_PARENTFUN AFTER UPDATE ON DAPS.UT_ROLEFUNC REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE v_parentid varchar2(50); v_count number; BEGIN if :n...
Oracle触发器调用外部java
导入jar包和外部java代码 当导入Java文件时,可以用如下命令:   loadjava –u username/userpassword –v -resolve filename.java 当导入jar文件时,可以用如下命令:   loadj
【Oracle】利用触发器,序列实现id自增长
如何实现插入数据之后,id自增长参考博客: http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.htmlORACLE SEQUENCE用法在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence首先要有CREATE SEQUENCE或者CREATE ANY S
关于ORACLE触发器中存在CLOB字段不能同步数据解决方法
最近项目中与其它公司做对接的时候需要同步其它公司的数据,选择用触发器实时同步数据。当表中存在CLOB字段时,同步过来的数据中CLOB字段无数据。 在网上搜索了一大堆答案...
Oracle创建触发器的时候因为大小写编译出错
创建表的时候id写成了小写,如图: 创建触发器的时候使用了大写,如图: 结果会报一个错误:success with compilation error (创建成功但编译出错)如图: 一开始以为Oracle是忽略大小写问题的,没往这方面想,被卡住了很久。 结果最后只需把他们都小写或都大写就没问题了。
ORACLE触发器(trigger)的使用
1、触发器说明触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用2、触发器语法create [or replace] trigger trigger_name {before | after | instead of} trigger_event on {table_name | view_name} [for each row] begin PL/SQL语句 ...
oracle触发器实例及异常处理
1.写触发器的业务需求:     我需要在工单表(up_ask)插入数据或更新数据时通过触发器(currentnew_ask_trigger)将工单表的数据插入到一个中间表(nosc_reportnew)中 2.出现的问题:     如果工单表的数据超过了中间表字段数据长度就会报错,并且导致工单表也没有插入或更新成功,影响了业务处理。 3.解决方法:    通过在触发器中添加一个异常处理
ORACLE触发器的测试
1.打开并登录pl/sql,File->New->Test Window; 2.在出现的窗口中的begin后输入脚本,该语句应该能够调用存储过程、函数,或语句能触发触发器; 比如我为某个表users的insert操作建立了触发器,那么test中的语句就是 update TABLE1 或者 INSERT TABLE2 注意sql语句结尾不需要加分号。 3.这时候如果直接在测试窗口执行F9,不会进入调试状态,也不会执行上边的插入语句。需要在trigger右击,选中“添加调试信息”。
Oracle(触发器删除外键约束)
表grade,和表stu具有外键约束,数据表grade就不能随便删除数据 ,这时候就用触发器解决此类问题,即使有外键关联,也要删除。  --级联删除是指在建立外键约束时通过on delete cascade子句设置,这样在删除父表数据时,由父表数据关联的所有子表数据都会被同时删除 注意:触发器不能有事务,触发的过程中:事件(不能rollback) create or replace trig...
oracle数据库删除触发器实例
请求表操作表: 用户信息表(person_tab)   种类: Before delete                功能描述: 关联删除所有外键指向该表的数据行,删除与人员关连的数据行        操作表: 日历提示信息表(calendarNote_tab) 公文基础信息表(documentBaseInfo_tab) AB角工作分工信息表(divideWork_tab) 公文
oracle触发器创建完无效问题解决
最近因统计对表增删改操作统计要使用oracle的触发器,但是触发器创建完使用时报错 在网上找了好久终于找到了解决的方法。 1.找到触发器 可以看到触发器上面有个小红叉号,说明这个触发器是有问题的。 2.右键编辑(edit)  点击下面的报错日志,会自动定位到有错误的行上,我的是因为updating写成了updateing 3.改正 修改创建触发器的语句,重新创建一次触发器,...
Oracle 中重新编译无效的存储过程, 或函数、触发器等对象
Oracle 中的存储过程在有些情况下会变成失效状态,在 PL/SQL Developer 中该存储过程的图标左上角显示一把小红叉叉。比如储过程所引用的对象失效,dblink 出问题啦都可能引起用到它的存储过程失效。再就我的存储过程经常会变成无效,至今原因都未查明。查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 cre
【hibernate】与触发器一起运行
触发器的事件 1、插入事件 2、更新事件 3、删除事件 数据库触发器经常用来生成审计日志,对重要数据的更新记录事件,这种记录审计日志的办法简便,有很好的性能,缺点是不支持跨数据库平台。 触发器引起的问题及解决方法 问题: 触发器执行的操作对Session来说是透明的,如果触发器修改了对象的属性,Session无法检测到数据库中数据的变化,因此Session
OGG 复制禁用触发器
1.首先,在目标端增加 DBOPTIONS DEFERREFCONST2.把OGG绑定到ORACLE 上面ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;3. 赋予权限:exec dbms_goldengate_auth.grant_admin_privilege('ogg','*',TRUE);exec dbms_...
关于Oracle触发器新旧值判断容易搞混的问题
本文旨在记录触发的各种操作之间,对比 :old 和 :new 值的变化,方便在写触发器判断值的时候,容易混乱的问题。                例如我有一条记录               id  name     create_date               1   张三     2018-01-20 00:00:00                       1. 新增
oracle 触发器
oracle 触发器 oracle 触发器 oracle 触发器 oracle 触发器 oracle 触发器
oracle 触发器:条件判断自动执行某些任务,不仅仅用于自增id
实现功能:当某张表写入数据时,同时将处理后的数据写入另一张表 create or replace trigger TG_sale_warehousein_gh after insert ON t_sale_warehousein FOR EACH ROW declare yes number; begin select count(*) into yes from t_
oracle数据库实时同步(trigger的方式)
前段时间公司在做一个数据仓库,但是这个数据仓库很奇怪,他需求把实时变化的数据同步到本库。这个大大的增加了工作的难度。 当时让我提方案,我提出了OGG,dg,SymmetricDS,trigger,sqlldr,exp,megre 等方案 首先sqlldr和exp对于实时变化的表同步基本上是不可能的(除非一直不停的truncate),如果有哪位大神基于这两种做出来,希望能指点小弟 其次数据仓库
Oracle使用序列和触发器实现自增ID
需求:         向表中插入记录时,使得某列能够自动插入ID,并且插入的ID是自增的。        我们可以先创建一个序列,例如 GOODS_GOODS_ID,然后每次使用如下SQL语句即可完成该功能, insert into Goods(GoodsID, name) values ( GOODS_GOODS_ID.nextval, '农夫烤鸡'); 若我们希望如下方式的SQL操作
Oracle在触发器中自定义异常以及修改列的值
一:存储过程的定义     1>过程(多次编译 多次执行):        --过程实现计算器        declare p1 number:=1;        p2 number:=2;        sign varchar2(3):='-';        begin          if sign='+' then             syso(p1+p2);
ora-04080触发器:xxxxx不存在问题
问题由来 pl/sql触发器右键删除不了触发器名称加引号的 oralce触发器对大小写敏感 问题解决 手写命令删除触发器 drop triggers  "触发器名称" 起因 今天用软件自动生成了触发器,有些触发器有问题需要进行删除,如下图 于是想这简单嘛,右键进行删除,哦豁,然后上百度上谷歌也没看到是个啥原因,手动写sql 从左边复制触发器名字进行删除触发器也报错找不到 ...
Oracle12C--系统触发器(58)
系统触发器定义 定义:系统触发器用户监视数据库服务的打开,关闭,错误等信息的取得,或者监控用户的行为操作等; 语法: CREATE [OR REPLACE] TRIGGER 触发器名称[BEFORE | AFTER] [数据库事件] ON [DATABASE | SCHEMA][WHEN 触发条件][DECLARE] [程序声明部门;]BEGIN 程
Oracle实现自增方式:序列+触发器
Oracle不能像MySQL那样设置主键自增,Oracle用 的方式使数据表的一列或多列实现自增 序列sequence+触发器trigger:实现数据表S_DEPART中的主键的自增 PL/SQL图示:   1、创建数据表,如下,DEPARTID是主键     2、创建序列Sequences 在oracle中sequence就是序列,
Oracle触发器中的:new和:old的使用
:new— 触发器执行过程中触发表作操作的当前行的新纪录 :old— 触发器执行过程中触发表作操作的当前行的旧纪录   我们在使用:new或者:old的操作时需要注意以下问题:   1、 必须是行级触发器,因为:new或者:old是当前触发表操作的当前行的新数据或者旧数据,所以必须在行级触发器中才能使用。否则编译时会出现错误。   2、 当触发器被不同事件触发时,需要注意:
oracle创建触发器的脚本在sqlplus中执行不了问题的解决
今天打项目补丁时,在数据库服务器上用sqlplus执行写好的触发器怎么就执行不了,也不报错。 结果折腾了很久,查到在sqlplus中执行床架触发器sql脚本需要在脚本最后加 /结束;果然啊,一个/让我折腾了小半天;希望童鞋们以后碰到能对你有帮助。
Oracle使用触发器实现两台不同服务器上的数据库的两张表进行数据同步增删改
下面用oracle数据库进行测试,假设使用这两个表,192.168.2.2服务器上用户test表LEGAL_CASE,192.168.2.3服务器上用户test表LEGAL_CASE。 需求:只需改动192.168.2.2服务器上的表,192.168.2.3服务器上即可自动改变。     条件:         1.两个表能建立DB LINK,即两个数据库所在的服务器能互相ping通。  ...
Oracle创建触发器成功,并且编译通过,执行却出错ora-04088
今天在创建oracle触发器时,在A表上创建触发器,在A表插入数据之后通过查询A表中符合条件的数据编译成功,但是执行还是报错,ora-04088 CREATE OR REPLACE TRIGGER TRIG_UPDATE_A AFTER INSERT  ON A FOR EACH ROW BEGIN ........语句 END; 因为在语句中使用了A表中的查询结果,执行过程中
oracle错误(四) ORA-04088: 触发器 'SL.CMS_CHANNEL_TRI' 执行过程中出错的解决办法
创建一个新表后,插入第一条新数据时,报错信息如下: 2015-06-08 14:51:45,956 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource org.springframework.jdbc.UncategorizedSQLExcept
oracle触发器实现
oracle触发器oracle触发器oracle触发器oracle触发器
Oracle数据库用触发器实现两张表数据同步
编写触发器实现两张表数据同步,sql代码如下: [code="sql"] create or replace trigger buid_mend_manager after insert or update or delete on TMP_EIC_MEND referencing old as old_value new as...
oracle创建和使用触发器
触发器:类似于AOP(面向切面编程)中的拦截器;不能传递参数,输出参数,也不能显示调用,只有满足触发器条件时会由Oracle自动调用。 触发器分类:   语句级触发器;DML操作 insert delete update select   行级触发器;   系统事件触发器;数据库的关闭 启动   用户事件触发器;DDL操作 drop alter create --创建员工表t_
Oracle触发器查看源码
ORACLE查出表所有的触发器及触发器详细信息 一.查all_triggers表得到trigger_name Sql代码 select trigger_name from all_triggers where table_name='XXX';  二.根据trigger_name查询出触发器详细信息 Sql代码   select text from all_source where type='T...
Oracle触发器入门案例
触发器 触发器:类似于AOP(面向切面编程)中的拦截器;不能传递参数,输出参数,也不能显示调用,只有满足触发器条件时会由Oracle自动调用。 触发器分类: 语句级触发器;DML操作 insert delete update select 行级触发器; 系统事件触发器;数据库的关闭 启动 用户事件触发器;DDL操作 drop alter create 下边我们以实际例子为根据来操作触...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 数据库课程设计触发器