插入同一行后触发更新

时间:2014-05-29 05:30:05

标签: oracle plsql triggers oracle11g xmltype

我有一个函数my_func,这个函数的输入是插入后同一行中的一列,如何实现这个。

我使用

创建了表格
create table sample_trigger_hash ( INDEXID number(19,0) ,
     XMLCOLUMN XMLTYPE ,
     CHECKFIELD RAW(30)
) XMLTYPE COLUMN XMLCOLUMN STORE AS BINARY XML;

我正在考虑来自perl的DBD :: Oracle的插入语句,只有前两个字段。

以下是我的触发器,

CREATE OR REPLACE
TRIGGER hash_trigger
AFTER INSERT ON sample_trigger_hash
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
   SELECT my_hash(EXTRACT(:OLD.XMLCOLUMN ,''))
         INTO :NEW.CHECKFIELD
     FROM dual;
END hash_trigger;

得到错误,

ORA-04084: cannot change NEW values for this trigger type
04084. 00000 -  "cannot change NEW values for this trigger type"
*Cause:    New trigger variables can only be changed in before row
           insert or update triggers.
*Action:   Change the trigger type or remove the variable reference.

但我的要求是在插入后获取XMLType值,如何实现这一点。如果我对XMLType使用CLOB存储选项,则在存储之前和存储之后我得到相同的哈希值。但是当我将其存储为二进制XML时,情况并非如此。 (XSI部分添加到二进制版本中)this other question中的更多详细信息。

1 个答案:

答案 0 :(得分:0)

您的要求没有意义。您希望在新插入的行中包含散列值,因此将该函数放在before insert触发器中。