Oracle等效于SQL Server INSERTED和DELETED表

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中是否有类似的表来实现这一目标..?请指教.

更新:

感谢您的回答和评论,我想我需要更多地解释一下情况.以下是了解真实情景的完整故事;

  • 数据库包含表和影子表(影子有一个额外的列).
  • 更新表时,相应的更改应记录在相关的影子表中,并附带一些其他数据.
  • 为此,他们为每个表都有触发器(这些触发器将数据复制到相关的影子表).
  • 上面提到的过程为每个表动态生成这些触发器.
  • 现在真正的问题是我没有关于列的知识,因为触发器是为每个表动态生成的.
  • 基本上我不能像以下APC提到的那样获得价值:NEW.col_1或:OLD.col_1.我可以吗.?

或者我必须使用前缀手动编写所有这些触发器:NEW和:OLD而不是尝试动态生成它们.

我正在使用Oracle 11g

APC*_*APC 7

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中有关于记录的整章. 了解更多.