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

इनपुट मापदंडों की चर संख्या के साथ कार्य

उन्नत सुविधाएं जैसे VARIADIC या यहां तक ​​कि बहुरूपी इनपुट प्रकार और गतिशील SQL बहुत शक्तिशाली हैं। इस उत्तर का अंतिम अध्याय एक उन्नत उदाहरण प्रदान करता है:

  • एक PL/pgSQL फ़ंक्शन को रिफ़ैक्टर करें ताकि विभिन्न SELECT क्वेरीज़ का आउटपुट लौटाया जा सके

लेकिन आपके जैसे साधारण मामले के लिए, आप केवल डिफ़ॉल्ट मान . का उपयोग कर सकते हैं फ़ंक्शन मापदंडों के लिए। यह सब सटीक आवश्यकताओं पर निर्भर करता है।
यदि विचाराधीन कॉलम सभी परिभाषित हैं NOT NULL , यह शायद आसान और तेज़ होगा:

CREATE OR REPLACE FUNCTION update_site(_name      text    -- always required
                                     , _city      text    DEFAULT NULL
                                     , _telephone integer DEFAULT NULL)
  RETURNS integer AS
$func$
BEGIN
   IF _city IS NULL AND _telephone IS NULL THEN
      RAISE WARNING 'At least one value to update required!';
      RETURN;  -- nothing to update
   END IF;

   UPDATE "Sites"
   SET    "City"      = COALESCE(_city, "City")
        , "Telephone" = COALESCE(_telephone, "Telephone")
   WHERE  "SiteName"  = _name;
END
$func$  LANGUAGE plpgsql;

मैनुअल में डिफ़ॉल्ट मानों के बारे में पढ़ें!

पैरामीटर और कॉलम नामों के बीच नामकरण संघर्ष से बचने के लिए मैं इसे _ . के साथ इनपुट पैरामीटर उपसर्ग करने की आदत बना देता हूं . यह स्वाद और शैली की बात है।

  • पहला पैरामीटर name कोई डिफ़ॉल्ट नहीं है, क्योंकि यह हर समय आवश्यक है।
  • अन्य मापदंडों को छोड़ा जा सकता है।
  • कम से कम एक की आवश्यकता है, या एक WARNING उठाया जाता है और कुछ नहीं होता है।
  • UPDATE केवल दिए गए पैरामीटर के लिए कॉलम बदलेगा।
  • आसानी से N . के लिए विस्तारित किया जा सकता है पैरामीटर।

फ़ंक्शन कॉल

चूंकि पोस्टग्रेज 9.5 :

आसान तरीका है स्थितीय संकेतन . के साथ मापदंडों के लिए। यह केवल सबसे सही पैरामीटर को छोड़ने की अनुमति देता है:

SELECT update_site('foo', 'New York');  -- no telephone

नामित संकेतन कोई भी छोड़ने की अनुमति देता है पैरामीटर जिसका डिफ़ॉल्ट मान है:

SELECT update_site(name => 'foo', _telephone => 123);  -- no city

दोनों को मिश्रित नोटेशन . में जोड़ा जा सकता है :

SELECT update_site('foo', _telephone => 123);  -- still no city

पोस्टग्रेज 9.4 . में या पुराने, := कॉल में असाइनमेंट के लिए इस्तेमाल किया गया था:

SELECT update_site(name := 'foo', _telephone := 123);
SELECT update_site('foo', _telephone := 123);

पश्चगामी संगतता के लिए Postgres 12 में अभी भी मान्य है, बल्कि आधुनिक संकेतन का उपयोग करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में कर्सर आधारित रिकॉर्ड

  2. UPPER () - PostgreSQL में अपरकेस में कनवर्ट करें

  3. NodeJS और Postgres का उपयोग करके लेनदेन श्रृंखला में वैकल्पिक INSERT विवरण

  4. PostgreSQL में CONCAT () फ़ंक्शन कैसे काम करता है

  5. पोस्टग्रेज में क्रिएटबी के साथ समस्याएं