आप INSTEAD OF INSERT
. का उपयोग करके बहुत बेहतर हैं यहां ट्रिगर करें:
CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
id integer;
BEGIN
INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
RETURN NEW;
END; $$ LANGUAGE PLPGSQL;
CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
FOR EACH ROW EXECUTE PROCEDURE MyFuncName();
किसी अन्य तालिका में क्या डाला गया था यह देखने के लिए अनुक्रम के वर्तमान मान की जाँच करना खराब बुरा बुरा . है अभ्यास। जब आप यहां एक ही लेन-देन में हों, तब भी ऐसा न करें।
आप RETURNING
. के मुद्दे को लेकर असमंजस में हैं जानकारी, क्योंकि जब मैं आपका प्रश्न पढ़ता हूं तो मैं भी भ्रमित होता हूं। किसी फ़ंक्शन के अंदर INTO
. का उपयोग करें रिकॉर्ड मान रखने के लिए स्थानीय रूप से घोषित चरों को पॉप्युलेट करने के लिए क्लॉज जिसे आप बाद के बयानों में उपयोग कर सकते हैं। किसी फ़ंक्शन के बाहर, RETURNING
का उपयोग करें क्लॉज जैसा कि आप अपने टॉप-मोस्ट कोड स्निपेट में करते हैं।