[英]Postgresql user-defined type and trigger
I have user defined type in Postgresql and table with this type:我在 Postgresql 中有用户定义的类型和具有这种类型的表:
CREATE TYPE public.hour_integer AS
(
q_1 integer,
q_2 integer,
q_3 integer,
q_4 integer
);
CREATE TABLE IF NOT EXISTS device_hours_data
(
device_hours_data_id serial,
date date,
h01 hour_integer ,
h02 hour_integer ,
h03 hour_integer ,
...
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
Now I need to create a trigger before insert with rule: if h01.q_1 is null then h01.q_1 = 0. How can I use correct syntax please?现在我需要在插入规则之前创建一个触发器:如果 h01.q_1 是 null 那么 h01.q_1 = 0。请问我该如何使用正确的语法?
CREATE OR REPLACE FUNCTION public.device_hours_data_trigger()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
v_hour character varying;
BEGIN
IF (NEW).h01.q_1 = null THEN
NEW.h01.q_1 = 0;
END IF;
...
RETURN NEW;
END;
$BODY$;
I am using something like:我正在使用类似的东西:
NEW.h01.q_1 = 0; - syntax error,
(NEW).h01.q_1 = 0; - syntax error,
(NEW.h01).q_1 = 0; - syntax error....
Could you please help me?请你帮助我好吗? Thanks
谢谢
The only way I could get it to work is as suggested by @a_horse_with_no_name, something like:我可以让它工作的唯一方法是@a_horse_with_no_name 建议的那样,例如:
CREATE OR REPLACE FUNCTION public.device_hours_data_trigger()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
v_hour character varying;
new_hour hour_integer;
BEGIN
new_hour = NEW.h01;
IF new_hour.q_1 = null THEN
new_hour.q_1 = 0;
END IF;
...
NEW.h01 = new_hour;
RETURN NEW;
END;
$BODY$;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.