请问:当删除一个表中的记录时,能否在触发器中得到被删除的记录的字段值?(50分)

  • 主题发起人 主题发起人 touip
  • 开始时间 开始时间
T

touip

Unregistered / Unconfirmed
GUEST, unregistred user!
不知能否?
 
可以啊

SQL SERVER:deleted.field
Interbase: old.field
Oracle : :Old.field
 
可以的,如果是sql被删除的记录都在临时表deleted中
 
To djdsz:
请看看下面错在哪里,在Interbase老是执行出错
(Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, char -1
on):
create trigger memotrig
on memo
for delete
as

update memo set seq_no=seq_no-1
where memo.order_no=old.order_no
and memo.seq_no>old.seq_no
 
对于当前的触发表是不可以修改这个变化中的表的数据的
包括查询
 
语法错误啊,正确的如下(不要想着MSSQL的语法了)
set term !! /*说明结束符号是 !!*/

create trigger memotrig for/*不是on*/ memo
after delete //点火顺序有before,after,position
as
/*定义变量的语句必须写在这*/
/*declare variable varname vartype*/
begin /*必须用begin..end*/
update memo set seq_no=seq_no-1
where
memo.order_no=old.order_no
and
memo.seq_no>old.seq_no;
end; !! /*结束符号是 !! */

set term ; !!
 
to :cchh
那是Oracle的行级触发器限制吧,似乎可以用包解决的
 
to djdsz:
Oracle的行级触发器能否举个例子,如何用包解决,
Oracle我会用一点,但还没有写过它的触发器。
 
先定义一个package,在package里定义变量,在行级触发器记录值到包的变量,然后在After
序的表级触发器修改变化表,似乎如此
 
在触发器中得到被更新、新添加的记录的字段值:
SQL SERVER:?
Interbase: ?
Oracle : ?
 
to djdsz:
Interbase通过,谢谢!
但我在SQL SERVER中
create trigger memotrig
on memo
for delete
as
update memo set seq_no=seq_no-1
where memo.order_no=deleted.order_no
and memo.seq_no>deleted.seq_no
出现:
The column prefix 'deleted' does not match with a table name or alias name used in the query.
请问:该如何解决?
 
to djdsz:
拜托您回答一下,先给你30分,我去赚点分,然后再给您50分,好吗?
 
分数啊,不用了。
update memo set seq_no=seq_no-1 from Deleted
where memo.order_no=deleted.order_no
and memo.seq_no>deleted.seq_no

似乎如此,你试试看
 
to djdsz:
在触发器中能否得到被更新或新添加的记录的字段值:
SQL SERVER:(更新)updated? (添加)inserted
Interbase: (更新)new(添加)new?
Oracle : (更新)? (添加)?
 
SQL Server:更新 inserted(新),Deleted(旧)
interbase :更新 new (新) old (旧)
Oracle :更新 :new (新) :Old (旧)

添加是Inserted/Old 更新二者都有,删除是Deleted/Old
 
多人接受答案了。
 
后退
顶部