開始我在 SQL 中的第一步。
我正在嘗試將時間戳表的最后一行插入到另一個表中。
我寫了這個觸發器:
CREATE TRIGGER update_analysis()
AFTER INSERT ON data
FOR EACH ROW
EXECUTE PROCEDURE insert_to_analysis();
我定義了一個函式,我知道它是錯誤的,但不明白如何正確撰寫它。(目標表有這些列)
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';
提前致謝
uj5u.com熱心網友回復:
如果您要參考剛剛插入的相同資料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';
uj5u.com熱心網友回復:
由于它是一個觸發器函式,它應該回傳一個觸發器。
它針對每一行,因此可以從值插入。
例子
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 | 貓3 |
|---|---|---|---|---|
| 2021-12-27 14:53:17.822649 | 1 | 1 | 2 | 3 |
關于db<>fiddle 的演示在這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395779.html
標籤:sql PostgreSQL的 用户定义函数
