我有一个函数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中的更多详细信息。
答案 0 :(得分:0)
您的要求没有意义。您希望在新插入的行中包含散列值,因此将该函数放在before insert触发器中。