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

सूचियों / सरणियों के लिए PL/pgSQL नियंत्रण संरचनाएं

CREATE OR REPLACE FUNCTION CREATE_PAYMENT(p_amount_list numeric[])
  RETURNS numeric AS
$func$
DECLARE
   s_chk_amnt numeric := 0; -- init variable!
   r          numeric;
BEGIN
-- IF p_amount_list <> '{}' THEN  -- just noise
   FOREACH r IN ARRAY p_amount_list
   LOOP
      s_chk_amnt := s_chk_amnt + r;
   END LOOP;
-- END IF;

RETURN s_chk_amnt;
END
$func$ LANGUAGE plpgsql

प्रमुख बिंदु

  • Oracle का number है numeric पोस्टग्रेज में . लेकिन अगर आपके पास भिन्नात्मक अंक नहीं हैं, तो आप इसके बजाय int . का उपयोग करेंगे या bigint पोस्टग्रेज में। Oracle और Postgres के बीच टाइप मैपिंग के बारे में।

  • Postgres में "टेबल प्रकार" जैसे Oracle नहीं है . सरणी प्रकारों का उपयोग करें , numeric . की एक सरणी इस मामले में:numeric[]

  • व्यंजक IF p_amount_list <> '{}' ... न्यूल और "खाली सरणी" को समान रूप से रद्द कर देगा। आपके मूल की तरह दूसरे चेक की कोई आवश्यकता नहीं है। लेकिन IF बिल्कुल जरूरत नहीं है। NULL या खाली सरणी के लिए, लूप वैसे भी दर्ज नहीं किया जाता है।

  • r तत्व को ही रखता है, इसके लिए एक अनुक्रमणिका नहीं। (इसलिए यह एक मेल खाने वाला डेटा प्रकार होना चाहिए।)

यह एक FOREACH . के मूल सिंटैक्स को प्रदर्शित करने के लिए जाता है एक plpgsql फ़ंक्शन में लूप। अन्यथा यह महंगी बकवास होगा , बेहतर तरीके से अधिक सरल और तेज़ से बदला गया:

SELECT sum(elem) AS sum_amount
FROM   unnest(p_amount_list) elem;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Google Datastudio के साथ Heroku Postgresql

  2. Django पूर्ण पाठ खोज अनुकूलन - पोस्टग्रेज

  3. यदि मौजूद नहीं है तो डालें, अन्यथा पोस्टग्रेस्क्ल में आईडी लौटाएं

  4. पोस्टग्रेज़ फ़ंक्शन में कस्टम प्रकार सरणी कैसे पास करें

  5. 2 कॉलम के साथ कई रिकॉर्ड में से एक स्ट्रिंग का निर्माण