Lit*_*Bit 3 sql sql-server oracle triggers
我在一个SQL Server数据库迁移到Oracle,在那里我有转换它采用特殊的表称为SQL Server过程的过程INSERTED,并DELETED在SQL Server中.
根据我的理解,这些表保存了最后插入/删除的记录的数据.(在这里找到msdn文章:http://msdn.microsoft.com/en-us/library/ms191300.aspx)
Oracle中是否有类似的表来实现这一目标..?请指教.
更新:
感谢您的回答和评论,我想我需要更多地解释一下情况.以下是了解真实情景的完整故事;
或者我必须使用前缀手动编写所有这些触发器:NEW和:OLD而不是尝试动态生成它们.
我正在使用Oracle 11g
Oracle触发器使用伪记录而不是特殊表.也就是说,我们可以访问各列的值而不是表.
我们通过使用前缀:NEW和来区分受影响的表中的伪记录和(其他)表中的记录:OLD.Oracle允许我们为这些声明自己的名称,但实际上没有理由放弃该标准.
我们可以访问哪些列值?
Action :OLD :NEW
------ ---- ----
INSERTING n/a Inserted value
UPDATING Superseded value Amended value
DELETING Deleted value n/a
Run Code Online (Sandbox Code Playgroud)
你会看到:OLD相同的MSSQL表DELETED和:NEW相同的表INSERTED
因此,要在某个列更新时触发业务规则检查:
create or replace trigger t23_bus_check_trg
before update on t23
for each row
begin
if :NEW.col_1 != :OLD.col_1 then
check_this(:NEW.col_1 , :OLD.col_1);
end if;
end t23_bus_check_trg;
Run Code Online (Sandbox Code Playgroud)
PL/SQL Reference中有关于记录的整章. 了解更多.