由于学艺不到家,对Oracle的触发器不深了解,在此求个触发器的写法。下面是这种情况:A表中有enterpiseId和B表中enterpriseId是关联的,当A表中CRUD时,就在B表的NO字段进行自动+1,但是enterpriseId要和A表中的crud时对应。这个实例怎么使用触发器实现,求教了。先多谢各位大侠些了。
解决方案 »
- 重启weblogic后webservice服务出现java.lang.NoClassDefFoundError异常
- struts2取得session的问题。
- struts查询数据如何跳转到iframe显示
- 聊天服务器
- JAVA中哪个队列能实现同步,因为有多线程存和取?谢谢!急~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
- 急问hibernate的saveOrUpdate的应用问题!
- 请问怎样把weblogic卸干净?
- 关于setLastDate(java.sql.Timestamp lastDate)的问题(在线等待)
- EJB实体不支持SQL server??
- maven项目install到本地仓库后,再次修改项目如何直接更新本地仓库里的文件
- Spring2.5换成Spring3.0出现Cannot cache an unknown entity异常
- session串值
--可能有问题 , 这里没oracle环境 不好测试 ,
create or replate trigger test
after update or insert or delete or select on A --不知道这里能不能用or关键字相连 , 还有不知道能不能对select进行监听 ,这以前都没试过,你试试。
for each row
begin
update B b set b.NO = (b.No + 1) , b.enterpriseId = :new.enterpiseId ;
end;
/code]
--可能有问题 , 这里没oracle环境 不好测试 ,
create or replate trigger test
after update or insert or delete or select on A --不知道这里能不能用or关键字相连 , 还有不知道能不能对select进行监听 ,这以前都没试过,你试试。
for each row
begin
update B b set b.NO = (b.No + 1) , b.enterpriseId = :new.enterpiseId ;
end;
--可能有问题 , 这里没oracle环境 不好测试 ,
create or replate trigger test
after update or insert or delete or select on A --不知道这里能不能用or关键字相连 , 还有不知道能不能对select进行监听 ,这以前都没试过,你试试。
for each row
begin
update B b set b.NO = (b.No + 1) , b.enterpriseId = :new.enterpiseId where b.enterpriseId = :old.enterpiseId; --更正一下 ,这里最重要的where刚才忘记写了
end;
多谢哥们的帮助,我试了下,删除、修改能够满足功能,只是在新增条记录的时候,B表的中NO没有更新。下面我把,我写的给你看下,还有什么地方需要更改的。create or replace
TRIGGER TEST_TRIGGER
BEFORE INSERT OR DELETE OR UPDATE ON TB_ACTIVEINFO
FOR EACH ROW
BEGIN
UPDATE tb_interface_update t SET t.UPDATE_VERSION_NO = t.UPDATE_VERSION_NO+1,t.enterpriseid=:new.enterpriseid WHERE t.update_id=1 AND t.enterpriseid =:old.enterpriseid;
END;
CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。
我贴出来,帮我看看,有什么问题没??触发器实在对我有点困难。
create or replace
TRIGGER TEST_TRIGGER
BEFORE INSERT OR DELETE OR UPDATE ON TB_ACTIVEINFO
FOR EACH ROW
BEGIN
IF UPDATING OR DELETING THEN
UPDATE tb_interface_update t SET t.UPDATE_VERSION_NO = t.UPDATE_VERSION_NO+1,t.enterpriseid=:new.enterpriseid WHERE t.update_id=1 AND t.enterpriseid =:old.enterpriseid;
ELSE
UPDATE tb_interface_update t SET t.UPDATE_VERSION_NO = t.UPDATE_VERSION_NO+1,t.enterpriseid=:new.enterpriseid WHERE t.update_id=1 AND t.enterpriseid =:new.enterpriseid;
END IF;
END;
IF UPDATING OR DELETING THEN -- 这样写 , 可以吗? 好像不行吧?
这个可以,ORACLE对触发器的触发类型有分类的。分为INSERTING /UPDATING/DELETING
create or replace
TRIGGER DRESSUP_UPDATE_TRIGGER
BEFORE INSERT OR DELETE OR UPDATE ON TB_DRESSUPINFO
FOR EACH ROW
DECLARE
ENTERID NUMBER(32,0);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF UPDATING OR DELETING THEN
SELECT b.enterpriseid INTO ENTERID FROM tb_brandinfo b WHERE b.brandid = (SELECT DISTINCT(brandorproductid) FROM tb_dressupinfo t WHERE t.brandorproductid=:old.brandorproductid);
ELSIF INSERTING THEN
SELECT b.enterpriseid INTO ENTERID FROM tb_brandinfo b WHERE b.brandid = (SELECT DISTINCT(brandorproductid) FROM tb_dressupinfo t WHERE t.brandorproductid=:new.brandorproductid);
END IF;
UPDATE tb_interface_update t SET t.UPDATE_VERSION_NO = t.UPDATE_VERSION_NO+1, t.update_date=sysdate,t.enterpriseid=ENTERID WHERE t.update_id=1 AND t.enterpriseid =ENTERID;
END;
本地更改已清除
UPDATE "ADMIN"."TB_DRESSUPINFO" SET CARDRESSUPNAME = '车前窗2' WHERE ROWID = 'AAAR+gAAEAAAAFOAAA' AND ORA_ROWSCN = '4361942'
ORA-06519: 检测到活动的独立的事务处理, 已经回退
ORA-06512: 在 "ADMIN.DRESSUP_UPDATE_TRIGGER", line 15
ORA-04088: 触发器 'ADMIN.DRESSUP_UPDATE_TRIGGER' 执行过程中出错
保存对表 "ADMIN"."TB_DRESSUPINFO" 的更改时出现一个错误:
行 8: ORA-06519: 检测到活动的独立的事务处理, 已经回退
ORA-06512: 在 "ADMIN.DRESSUP_UPDATE_TRIGGER", line 15
ORA-04088: 触发器 'ADMIN.DRESSUP_UPDATE_TRIGGER' 执行过程中出错