@ user3243781的答案接近,但不是因为工作,返回错误:
-747表或列匹配触发语句引用的对象。
时触发的SQL语句作用于 触发表,或当两个语句的更新,并且在触发的操作更新的列 是一样的列返回此错误是 触发语句更新。
因此,替代方法是直接处理NEW变量。 为此,您需要使用一个与触发器参考资源的过程,这意味着该过程将能够像自己触发一样。
下面是我用dbaccess在Informix v11.70上运行的示例。
此资源仅适用于引擎版本+11,据我记忆。
create table teste (Name NVARCHAR(100), Type INT , Plan NVARCHAR(100));
Table created.
create procedure check_name_values()
referencing new as n for teste ;;
define check_type integer ;;
define check_plan NVARCHAR ;;
if upper(n.name) like 'F%' then
let n.type = 1;;
let n.plan = "Test";;
end if
end procedure ;
Routine created.
;
create trigger trg_tablename_ins
insert on teste
referencing new as new
for each row
(
execute procedure check_name_values() with trigger references
);
Trigger created.
insert into teste values ('cesar',99,'myplan');
1 row(s) inserted.
insert into teste (name) values ('fernando');
1 row(s) inserted.
insert into teste values ('Fernando',100,'your plan');
1 row(s) inserted.
select * from teste ;
name cesar
type 99
plan myplan
name fernando
type 1
plan Test
name Fernando
type 1
plan Test
3 row(s) retrieved.
drop table if exists teste;
Table dropped.
drop procedure if exists check_name_values;
Routine dropped.