Oracle触发器根据其中一列的数据更新当前行

时间:2014-04-30 06:45:35

标签: oracle function triggers oracle11g xmltype

我有一个名为my_func的函数,我想传递插入的最新行的一个字段,并使用函数返回的值更新同一行中的另一个字段。

我的DDL是,

create table sampletable ( indexid number(19,0) , xmlcolumn xmltype not null , checkfield raw(30) null) xmltype column xmlcolumn store as binary xml;

这是我的插入查询

insert into sample_table values ( 1 , some_xml_document  );

以下是我的触发器,这是错误的课程

create or replace 
trigger compute_func
after insert on sampletable
for each row
declare 
  returned_value raw(30);
begin
 returned_value := my_func(sampleable.xmlcolumn);
 update sampletrigger set checkfield = returned_value; 
end;

1 个答案:

答案 0 :(得分:2)

请勿使用update分配值。此外,您需要使用BEFORE触发器,因为您无法在AFTER触发器中更改列值。

create or replace trigger compute_func
   before insert on sampletable
for each row
begin
 :new.checkfield := my_func(:new.xmlcolumn);
end;

手册中的更多详细信息:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#LNPLS655