关于oracle触发器问题请教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle触发器问题请教相关的知识,希望对你有一定的参考价值。

问题:需要将Adt_Log表的log_date_time字段最大值修改到pat_visit1表中的MOVE_DATE4 字段;
备注:1.pat_visit1表 和 Adt_Log表 都有 PATIENT_ID 和 visit_id 字段,可以做关联;
2.Adt_Log 表的 log_date_time 时间字段,当存在多条数据时,需要取最大值;
以下为本人(新人)写的触发器,感觉用不了,求大神们指点,语法哪里不对

create or replace trigger 修改adt字段 after update of log_date_time on Adt_Log
for each row
begin
update pat_visit1 a
set MOVE_DATE4 = (select max(log_date_time) from Adt_Log b where b.PATIENT_ID = a.PATIENT_ID and b.visit_id = a.visit_id);
end;

感觉也你这个 update,没有写where条件,更新时会影响多条数据,貌似会报错的吧? 参考技术A 将MOVE_DATE4 改为:new.MOVE_DATE4

SQL问题,请教高手

已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行.

这个是我碰到的错误信息,导致的结果是行无法删除,请问该如何解决

先删除从表中相关行
delete 从表 where 外键列 = '主键值'
然后删除主表行
delect 主表 where 主键列 = '主键值'
参考技术A /*********
。进查询分析器,按 F4。
选择好库名,选择全部,在下面把其他勾去掉,点上触发器。
开始查找。
看下,你delete的那张表上 是不是有触发器。
如果有,你看下那个触发器就明白了。触发器的头应该如下:
*************/
create trigger xxx on tablename
for deleted,inserted,update
as
begin

--语句没写完。你看下我的猜测对不?

参考资料:如果问题解决、请厚道点给我分分哟!!

参考技术B 这样就行了:
select distinct * into #tmp from tablename
delete #tmp
insert into tablename select * from #tmp
参考技术C 数据有重复的吧 多加个条件判断 比如加个 ID= 每行的ID让他自加 就不会重复 参考技术D 应该是有外键关联
这个表和其他表有关联,你删除这行会导致其他表的数据发生错误,
你可以看一下这张表的外键连接了那几张表,要删除就所有数据都删除
第5个回答  2008-04-05 因该在表关系中找原因,数据可能与其它表中数据有关联,导致数据不能删除

以上是关于关于oracle触发器问题请教的主要内容,如果未能解决你的问题,请参考以下文章

oracle 创建触发器问题

关于oracle触发器的一个问题,求解答

关于oracle 触发器,与事务回滚

oracle触发器中定时执行sql

使用此触发器 oracle 数据库更改表

数据库上的 Oracle ddl 触发器