簡體   English   中英

Postgresql 用戶自定義類型和觸發器

[英]Postgresql user-defined type and trigger

我在 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 是 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$;

我正在使用類似的東西:

 NEW.h01.q_1 = 0; - syntax error,
(NEW).h01.q_1 = 0; - syntax error,
(NEW.h01).q_1 = 0; - syntax error....

請你幫助我好嗎? 謝謝

我可以讓它工作的唯一方法是@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM