PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पीएल/पीजीएसक्यूएल फ़ंक्शन में रिकॉर्ड कैसे पास करें?

पूरी तस्वीर के आधार पर कई विकल्प हैं।
मूल रूप से, आपका सम्मिलित कार्य इस तरह काम कर सकता है:

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 पीएल/पीजीएसक्यूएल के बाहर मान्य प्रकार नहीं है, यह पीएल/पीजीएसक्यूएल में अभी तक अज्ञात पंक्ति प्रकार के लिए एक सामान्य प्लेसहोल्डर है) इसलिए आप इसे फ़ंक्शन घोषणा में इनपुट पैरामीटर के लिए उपयोग नहीं कर सकते हैं।

विभिन्न प्रकार की पंक्तियों को स्वीकार करने वाले अधिक गतिशील फ़ंक्शन के लिए आप एक का उपयोग कर सकते हैं बहुरूपी प्रकार . उदाहरण:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विंडो फ़ंक्शंस:last_value (ORDER BY ... ASC) last_value के समान (ORDER BY ... DESC)

  2. सीरियल/बिगसेरियल कॉलम को पोस्टग्रेज करने के लिए उचित हाइबरनेट आईडी जनरेटर?

  3. postgresql:psql चलाते समय मुझे -h localhost क्यों निर्दिष्ट करना होगा?

  4. क्या कई-से-अनेक संघों के लिए तालिका में शामिल होने के लिए कोई विकल्प हैं?

  5. postgresql में स्पष्ट लेनदेन अलगाव उल्लंघन