SQL Academy · पाठ

PL/pgSQL फ़ंक्शन की मूल बातें

पैरामीटर, RETURNS TABLE, नियंत्रण प्रवाह (IF, LOOP, FOREACH) और अपवाद प्रबंधन वाले PL/pgSQL फ़ंक्शन लिखें

पाठ 2, कुल 4 में से13 चरण

PL/pgSQL फ़ंक्शन की मूल बातें, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

PL/pgSQL क्या है

PostgreSQL की अंतर्निहित प्रक्रियात्मक भाषा। SQL में चर, नियंत्रण-प्रवाह, अपवाद और query को गतिशील रूप से चलाने की क्षमता जोड़ी गई है। इसका उपयोग संग्रहित प्रक्रियाओं और ट्रिगर फ़ंक्शन के लिए किया जाता है।

फ़ंक्शन का ढाँचा

एक सरल फ़ंक्शन:

CREATE OR REPLACE FUNCTION add(a INT, b INT)
RETURNS INT AS $$
BEGIN
  RETURN a + b;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

SELECT add(2, 3);   -- 5

चर

DECLARE से घोषित करें; := या INTO से मान दें:

CREATE FUNCTION user_orders(uid BIGINT)
RETURNS INT AS $$
DECLARE
  cnt INT;
BEGIN
  SELECT COUNT(*) INTO cnt FROM orders WHERE user_id = uid;
  RETURN cnt;
END;
$$ LANGUAGE plpgsql STABLE;

नियंत्रण-प्रवाह

IF / ELSE, FOR, WHILE, CASE:

IF cnt = 0 THEN
  RAISE NOTICE 'no orders';
ELSIF cnt < 10 THEN
  RAISE NOTICE 'few';
ELSE
  RAISE NOTICE 'many';
END IF;

FOR i IN 1..10 LOOP
  RAISE NOTICE '%', i;
END LOOP;

Query परिणामों पर लूप चलाना

कर्सर-शैली का पुनरावर्तन:

CREATE FUNCTION recalc_totals() RETURNS VOID AS $$
DECLARE
  r RECORD;
BEGIN
  FOR r IN SELECT id FROM users LOOP
    UPDATE users SET
      order_count = (SELECT COUNT(*) FROM orders WHERE user_id = r.id)
    WHERE id = r.id;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

RETURNS TABLE

परिणाम-समुच्चय लौटाएँ:

CREATE FUNCTION top_buyers(n INT)
RETURNS TABLE (user_id BIGINT, total NUMERIC) AS $$
BEGIN
  RETURN QUERY
    SELECT o.user_id, SUM(o.total)
    FROM orders o
    GROUP BY o.user_id
    ORDER BY SUM(o.total) DESC
    LIMIT n;
END;
$$ LANGUAGE plpgsql STABLE;

SELECT * FROM top_buyers(10);

IN / OUT / INOUT पैरामीटर

एकाधिक वापसी मान:

CREATE FUNCTION stats(uid BIGINT,
  OUT total NUMERIC,
  OUT cnt INT) AS $$
BEGIN
  SELECT SUM(total), COUNT(*) INTO total, cnt
  FROM orders WHERE user_id = uid;
END;
$$ LANGUAGE plpgsql STABLE;

SELECT * FROM stats(42);   -- total | cnt

अपवाद प्रबंधन

BEGIN ... EXCEPTION WHEN ... THEN:

BEGIN
  INSERT INTO users (email) VALUES ($1);
EXCEPTION
  WHEN unique_violation THEN
    RAISE NOTICE 'email already exists';
  WHEN OTHERS THEN
    RAISE;
END;

लॉग दर्ज करने के लिए RAISE

स्तर: DEBUG, LOG, INFO, NOTICE, WARNING, EXCEPTION:

RAISE NOTICE 'processed % rows', cnt;
RAISE EXCEPTION 'bad state: %', state USING ERRCODE = 'check_violation';

अस्थिरता संकेतक

योजनाकार के लिए फ़ंक्शन को सही ढंग से चिह्नित करें:

  • IMMUTABLE — समान तर्क हमेशा → समान परिणाम (कोई I/O नहीं); इनलाइन करने और अनुक्रमणिका में उपयोग की अनुमति देता है
  • STABLE — समान तर्क → एक query के भीतर समान परिणाम
  • VOLATILE — प्रत्येक कॉल पर अलग हो सकता है (डिफ़ॉल्ट; NOW(), RANDOM() के लिए सही)

SECURITY DEFINER

यह फ़ंक्शन के स्वामी के विशेषाधिकारों के साथ चलता है — सावधानी से उपयोग करें:

CREATE FUNCTION sensitive_op() RETURNS VOID
LANGUAGE plpgsql
SECURITY DEFINER
AS $$ ... $$;

-- Always set search_path explicitly to avoid hijacking:
ALTER FUNCTION sensitive_op() SET search_path = public, pg_temp;

पुनरावलोकन

PL/pgSQL, लूप, IF, अपवादों और संरचित रिटर्न के साथ SQL का विस्तार करता है। इसका उपयोग ऐसे सुसंगत, बहु-चरणीय तर्क के लिए करें जिसे डेटा के पास चलने से लाभ मिलता हो।

त्वरित जाँच

ऐसे फ़ंक्शन के लिए कौन-सा वोलैटिलिटी मार्कर उपयोग करना चाहिए जो समान आर्ग्युमेंट्स दिए जाने पर हमेशा समान परिणाम लौटाता हो और जिसके कोई साइड इफ़ेक्ट या I/O न हों?

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
46
पाठ
183

अक्सर पूछे जाने वाले प्रश्न

क्या “PL/pgSQL फ़ंक्शन की मूल बातें” पाठ निःशुल्क है?

हाँ—“PL/pgSQL फ़ंक्शन की मूल बातें” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“PL/pgSQL फ़ंक्शन की मूल बातें” में मैं क्या सीखूँगा?

पैरामीटर, RETURNS TABLE, नियंत्रण प्रवाह (IF, LOOP, FOREACH) और अपवाद प्रबंधन वाले PL/pgSQL फ़ंक्शन लिखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“PL/pgSQL फ़ंक्शन की मूल बातें” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. ट्रिगर की संरचना: BEFORE/AFTER, FOR EACH ROW
  2. PL/pgSQL फ़ंक्शन की मूल बातें
  3. DO ब्लॉक और अनाम कोड
  4. ट्रिगर से तालिकाओं का ऑडिट
← SQL Academy पर वापस जाएँ