VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

允许INSERT使用oid.colname获取值为空

功能描述

兼容Oracle的触发器特性,允许触发器在指定条件下取NULL值。在触发器中,支持使用oid.colname语法获取dml操作之前的旧值。

  • 如果之前是insert操作,oid.colname结果为空。
  • 如果之前是update和delete操作,oid.colname语法获取的值为操作之前的旧值。

注意事项

无。

示例

1、创建测试表。

CREATE TABLE tri_tbl(id int, name varchar(256));

2、创建函数。

CREATE OR REPLACE FUNCTION tri_func() RETURNS TRIGGER AS
$$
DECLARE
n_id int := new.id;
o_id int := old.id;
BEGIN
raise notice 'trigger begin: TG_OP is %',TG_OP;
if TG_OP='INSERT' then
raise notice 'old id:%,old name:%',o_id,old.name;
raise notice 'new id:%,new name:%',n_id,new.name;
end if;
return new;
END $$ LANGUAGE plpgsql;

3、创建触发器。

CREATE TRIGGER be_tri
BEFORE INSERT OR DELETE OR UPDATE
ON tri_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_func();

4、调用函数。

insert into tri_tbl values(1,'aaaaa');

返回结果为:

NOTICE:  trigger begin: TG_OP is INSERT
NOTICE:  old id:<NULL>,old name:<NULL>
NOTICE:  new id:1,new name:aaaaa
INSERT 0 1