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;