पूरी तस्वीर के आधार पर कई विकल्प हैं।
मूल रूप से, आपका सम्मिलित कार्य इस तरह काम कर सकता है:
CREATE FUNCTION insert_thing (_thing flavored_view)
RETURNS int AS
$func$
INSERT INTO things (name) VALUES ($1.name) -- plus 30 more columns
RETURNING id;
$func$ LANGUAGE sql;
दृश्य . के पंक्ति प्रकार का उपयोग करना , क्योंकि NEW
आपके ट्रिगर में इस प्रकार का है।
एक साधारण SQL फ़ंक्शन का उपयोग करें, जिसे इनलाइन किया जा सकता है और बेहतर प्रदर्शन कर सकता है।
डेमो कॉल:
SELECT insert_thing('(1, foo, 1, bar)');
आपके ट्रिगर के अंदर flavored_trig ()
:
inserted_id := insert_thing(NEW);
या, मूल रूप से फिर से लिखा गया:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
<स्ट्राइक>record
स्ट्राइक> पीएल/पीजीएसक्यूएल के बाहर मान्य प्रकार नहीं है, यह पीएल/पीजीएसक्यूएल में अभी तक अज्ञात पंक्ति प्रकार के लिए एक सामान्य प्लेसहोल्डर है) इसलिए आप इसे फ़ंक्शन घोषणा में इनपुट पैरामीटर के लिए उपयोग नहीं कर सकते हैं।
विभिन्न प्रकार की पंक्तियों को स्वीकार करने वाले अधिक गतिशील फ़ंक्शन के लिए आप एक का उपयोग कर सकते हैं बहुरूपी प्रकार . उदाहरण:
- पीएल/पीजीएसक्यूएल में पंक्ति के अनुसार तालिका कैसे लौटाएं
- एक PL/pgSQL फ़ंक्शन को रिफ़ैक्टर करें ताकि विभिन्न SELECT क्वेरीज़ का आउटपुट लौटाया जा सके
- ऐसा फ़ंक्शन कैसे लिखें जो टेक्स्ट या पूर्णांक मान लौटाए?