簡體   English   中英

使用另一個 select 查詢的結果觸發將數據插入表

[英]Trigger insert of data into table with result from another select query

從 SQL 開始我的第一步。

我正在嘗試將帶時間戳的表的最后一行插入到另一個表中。

我寫了這個觸發器:

CREATE TRIGGER update_analysis()
AFTER INSERT ON data
FOR EACH ROW
    EXECUTE PROCEDURE insert_to_analysis();

我定義了一個 function,我知道這是錯誤的,但不明白如何正確編寫。 (目標表有這些列)

CREATE FUNCTION UPDATE_ANALYSIS() RETURNS TABLE
AS
$$ BEGIN
INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER,CAT1,CAT2,CAT3)
SELECT (TIME, CYCLENO , I1 , I2 * 2 ,I3*3)
FROM DATA
ORDER BY TIME DESC
LIMIT 1;)

RETURN 
END;

$$ LANGUAGE 'plpgsql';

提前致謝

由於它是一個觸發器的 function,它應該返回一個觸發器。

它適用於每一行,因此可以從值中插入。

例子

CREATE FUNCTION FN_INSERT_TO_ANALYSIS() RETURNS TRIGGER AS $ins_analysis$ BEGIN INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER, CAT1, CAT2, CAT3) VALUES (NEW.TIME, NEW.CYCLENO, NEW.I1, NEW.I2 * 2, NEW.I3 * 3); RETURN NEW; END $ins_analysis$ LANGUAGE 'plpgsql';
 CREATE TRIGGER trg_data_ins_analysis AFTER INSERT ON data FOR EACH ROW EXECUTE PROCEDURE fn_insert_to_analysis();
 insert into data values (current_timestamp,1,1,1,1)
 select * from data
時間 循環無 i1 i2 i3
2021-12-27 14:53:17.822649 1 1 1 1
 select * from ANALYSIS
時間 周期數 貓1 貓2 三類
2021-12-27 14:53:17.822649 1 1 2 3

關於db<>fiddle 的演示在這里

如果您引用剛剛插入的相同數據data ,您可以簡單地引用您插入的內容而不是SELECT :ing,如下所示:

CREATE FUNCTION UPDATE_ANALYSIS() RETURNS TABLE
AS
$$ BEGIN
INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER,CAT1,CAT2,CAT3)
VALUES (NEW.TIME, NEW.CYCLENO , NEW.I1 , NEW.I2 * 2 ,NEW.I3 * 3);


RETURN NEW;
END;

$$ LANGUAGE 'plpgsql';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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