मुख्य सामग्री पर जाएं
मॉड्यूल 12 · पाठ 2 का 4पाठ्यक्रम में 46/57~15 min
मॉड्यूल पाठ (2/4)

पीएल/पीजीएसक्यूएल के साथ उन्नत तर्क

LANGUAGE sql में लिखे गए फ़ंक्शन केवल एक के बाद एक मानक क्वेरी चला सकते हैं। यदि हमें कुछ अधिक उन्नत की आवश्यकता है जैसे "यदि दर्ज किया गया कुल 100 से अधिक है तो छूट लागू करें", सादा SQL अपने आप ऐसा नहीं कर सकता। हमें PL/pgSQL का उपयोग करने की आवश्यकता है, जो Postgres में निर्मित एक पूर्ण प्रक्रियात्मक प्रोग्रामिंग भाषा है।

PL/pgSQL में हम BEGIN .. END, वेरिएबल्स और सशर्त कथनों से बनी क्लासिक बॉडी जोड़ते हैं।

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

यह शक्ति हमें दोहराव वाले तर्क के विशाल ब्लॉकों को लोड करने देती है जिन्हें हम अन्यथा जेएस में लिखते हैं, उन्हें बहुत कम विलंबता के साथ डेटा के करीब निष्पादित सुरक्षित, तेज़ कार्यों में पैक करते हैं!

खुद कोशिश करना

व्यायाम#sql.m12.l2.e1
प्रयास: 0लोड हो रहा है...

हम एक जटिल फ़ंक्शन चाहते हैं जो पहले से मौजूद होने पर स्वयं को प्रतिस्थापित कर दे ('get_price_label'), 'मूल्य' को NUMERIC के रूप में स्वीकार करता है, और एक वर्बोज़ टेक्स्ट लौटाता है।\nPL/pgSQL का उपयोग करें। BEGIN खोलें।\nतर्क लिखें: यदि कीमत > 100.00 है तो स्ट्रिंग 'प्रीमियम' वापस कर दें। अन्यथा 'इकोनॉमिको' लौटाएं।\nसशर्त अंत बंद करें; और शरीर.

संपादक लोड हो रहा है...
संकेत दिखाएँ

फ़ंक्शन बनाएं या बदलें get_price_label(price numeric) यदि मूल्य > 100.00 है तो $$ शुरू होने पर टेक्स्ट लौटाता है, फिर 'प्रीमियम' लौटाता है; अन्यथा 'इकोनॉमिको' लौटें; अंत यदि; अंत; $$ भाषा plpgsql;

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#sql.m12.l2.e2
प्रयास: 0लोड हो रहा है...

आप DECLARE कीवर्ड के साथ BEGIN से पहले अस्थायी वेरिएबल घोषित कर सकते हैं।\nएक फ़ंक्शन 'saluta_utente(userid INTEGER)' लिखें -> TEXT, PL/pgSQL लॉजिक लौटाता है।\nइसके अंदर एक स्ट्रिंग वेरिएबल 'nome_utente TEXT;' DECLARE करें।\nफिर, BEGIN के अंदर, विशेष क्लॉज का उपयोग करके गतिशील रूप से 'ग्राहकों' को क्वेरी करके उस वेरिएबल को पहले_नाम के साथ पॉप्युलेट करें। 'फर्स्ट_नाम को nome_utente FROM से चुनें... जहां आईडी = यूजरआईडी'। अंत में, RETURN वेरिएबल को 'Ciao' में जोड़ता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

घोषित करें nome_utente पाठ; \nशुरू करें nome_utente में पहला_नाम चुनें... \n'Ciao' वापस करें || nome_utente;

3 प्रयासों के बाद समाधान उपलब्ध है