triggers删除问题与partition by

kiken10 2011-05-30 04:39:16
我将table中的某一笔资料删除后

想要在triggers中将最靠近(删除的那笔资料),的某个栏位值变成null

为什么triggers中却无法使用partition by呢??

程式码如下
IF DELETING THEN
UPDATE aaa D
SET D.a =''
WHERE D.b = (
SELECT b FROM (select T.*,row_number() over (partition by dep order by date_1,time_1 DESC) P from aaa t )→错误会在这
WHERE dep = :OLD.dep
WHERE a = 'n'
AND P = 1)
AND D.date_1 = (
SELECT date_1 FROM (select T.*, row_number() over (partition by dep order by date_1,time_1 DESC) NUM from aaa t)→错误会在这
WHERE dep = :OLD.dep
AND a = 'n'
AND NUM = 1);

END IF;

table资料如下
dep date_1 time_1 b
a 20110512 12:30 y
a 20110512 14:40 y
a 20100530 13:00 →我把这笔删除后,系统会把20110512,4:40这笔的b栏位改成null

请问在triggers中我该如何修改这段程式码,或是有更精简的方法可以让我完成我需要的资料,拜托了谢谢..
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiken10 2011-05-31
  • 打赏
  • 举报
回复
SORRY我不太懂
怎么在处里的时候就把逻辑处理掉?
可不可以举个例子
tangren 2011-05-31
  • 打赏
  • 举报
回复
不要在触发器中实现这个逻辑。
在你修改数据时,一并处理这个逻辑。而不是触发器内部。
kiken10 2011-05-31
  • 打赏
  • 举报
回复
不行执行馁
试过您所说的create or replace trigger tr_tab1
after delete on tab1
他出现的错误讯息是"触发程式/函数无法检试它"

请问
当我把B栏位为空值的资料删掉的时候要去把最靠近被删除那笔资料的B栏位打开我要怎么写呢???
然后在把打开的那笔资料的DEP值输入到BBB资料表中的PP栏位????

tangren 2011-05-30
  • 打赏
  • 举报
回复
不在触发器中修改本身,比如:
create or replace trigger tr_tab1
after delete on tab1
begin
update tab1 set ............
end;

虽然可以使用自治事务,但容易死锁,最好不要这样做。
create or replace trigger tr_tab1
after delete on tab1
pragma autonomous_transaction;
begin
update tab1 set ............
end;

最好在外部实现。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧