【发布时间】:2021-12-08 01:38:02
【问题描述】:
我在 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;
现在我需要在插入规则之前创建一个触发器:如果 h01.q_1 为空,则 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$;
我正在使用类似的东西:
NEW.h01.q_1 = 0; - syntax error,
(NEW).h01.q_1 = 0; - syntax error,
(NEW.h01).q_1 = 0; - syntax error....
你能帮帮我吗? 谢谢
【问题讨论】:
-
我认为您首先需要将该列分配给您的用户类型的局部变量:
declare new_hour hour_integer; begin new_hour := new.h01; ... -
该自定义类型的具体用途是什么?您是否尝试推出自己的
interval或time实施? -
我在一小时内有 4 个值季度数字,在一张表中一天有 24 列。但这只是一个例子。问题是如何在触发器中为 NEW.h01.q_1 分配一些值。
标签: postgresql