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

पोस्टग्रेएसक्यूएल आईएफ स्टेटमेंट

DO
$do$
BEGIN
   IF EXISTS (SELECT FROM orders) THEN
      DELETE FROM orders;
   ELSE
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

मानक SQL में कोई प्रक्रियात्मक तत्व नहीं होते हैं। IF स्टेटमेंट डिफ़ॉल्ट प्रक्रियात्मक भाषा PL/pgSQL का हिस्सा है। आपको एक फ़ंक्शन बनाने या DO . के साथ एक एड-हॉक स्टेटमेंट निष्पादित करने की आवश्यकता है आदेश।

आपको एक अर्धविराम चाहिए (; ) plpgsql में प्रत्येक कथन के अंत में (अंतिम END को छोड़कर) )।

आपको END IF; IF . के अंत में बयान।

उप-चयन कोष्ठकों से घिरा होना चाहिए:

    IF (SELECT count(*) FROM orders) > 0 ...

या:

    IF (SELECT count(*) > 0 FROM orders) ...

यह समकक्ष और बहुत तेज़ है, हालांकि:

    IF EXISTS (SELECT FROM orders) ...

वैकल्पिक

अतिरिक्त SELECT आवश्यकता नहीं है। यह वही करता है, तेज़:

DO
$do$
BEGIN
   DELETE FROM orders;
   IF NOT FOUND THEN
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

हालांकि संभावना नहीं है, एक ही टेबल पर लिखने वाले समवर्ती लेनदेन हस्तक्षेप कर सकते हैं। पूरी तरह से सुनिश्चित होने के लिए, प्रदर्शन के अनुसार आगे बढ़ने से पहले उसी लेनदेन में तालिका को राइट-लॉक करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल:घातक - उपयोगकर्ता के लिए सहकर्मी प्रमाणीकरण विफल (पीजी ::त्रुटि)

  2. पोस्टग्रेएसक्यूएल पैरामीटराइज्ड ऑर्डर बाय / लिमिट इन टेबल फंक्शन

  3. रेल और पोस्टग्रेएसक्यूएल में समय क्षेत्र को पूरी तरह से अनदेखा करना

  4. Postgres में पुनरावर्ती JSON कुंजी एकत्र करें

  5. खाली या शून्य मान की जांच करने का सबसे अच्छा तरीका