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