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

IF कथन के लिए शर्त के रूप में गतिशील SQL (EXECUTE)

यह निर्माण संभव नहीं है:

<स्ट्राइक> IF EXECUTE 'EXISTS (SELECT 1 FROM mytable)' THEN ...

आप इसे आसान बना सकते हैं:

IF EXISTS (SELECT 1 FROM mytable) THEN ...

लेकिन आपका उदाहरण शायद सरलीकृत है। गतिशील SQL . के लिए EXECUTE . के साथ क्रियान्वित , यहां मैनुअल पढ़ें। आप विशेष चर की जांच कर सकते हैं FOUND किसी भी डीएमएल कमांड को निष्पादित करने के तुरंत बाद यह देखने के लिए कि क्या यहां कोई पंक्ति प्रभावित हुई है:

IF FOUND THEN ...

हालांकि:

<ब्लॉकक्वॉट>

विशेष रूप से ध्यान दें कि EXECUTE GET DIAGNOSTICS . का आउटपुट बदलता है , लेकिन नहीं बदलता FOUND

बोल्ड जोर मेरा। एक सादे EXECUTE के लिए इसके बजाय ऐसा करें:

...
DECLARE
   i int;
BEGIN
   EXECUTE 'SELECT 1 FROM mytable';  -- something dynamic here

   GET DIAGNOSTICS i = ROW_COUNT;

   IF i > 0 THEN ...

या यदि उपयुक्त हो - विशेष रूप से केवल एकल-पंक्ति परिणामों के साथ - INTO . का उपयोग करें EXECUTE . के साथ क्लॉज सीधे गतिशील क्वेरी से परिणाम प्राप्त करने के लिए। मैं यहां मैनुअल को उद्धृत करता हूं:

<ब्लॉकक्वॉट>

यदि कोई पंक्ति या चर सूची प्रदान की जाती है, तो उसे क्वेरी के परिणामों की संरचना से बिल्कुल मेल खाना चाहिए (जब एक रिकॉर्ड चर का उपयोग किया जाता है, तो यह परिणाम संरचना से स्वचालित रूप से मिलान करने के लिए स्वयं को कॉन्फ़िगर करेगा)। यदि एक से अधिक पंक्तियाँ लौटाई जाती हैं, तो केवल पहली पंक्ति कोINTO . को सौंपा जाएगा चर। यदि कोई पंक्तियाँ नहीं लौटाई जाती हैं, तो NULL को INTO . को सौंपा जाता है चर (ओं)।

...
DECLARE
   _var1 int;  -- init value is NULL unless instructed otherwise
BEGIN

EXECUTE format('SELECT var1 FROM %I WHERE x=y LIMIT 1', 'my_Table')
INTO    _var1;

IF _var1 IS NOT NULL THEN ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे Justify_interval () PostgreSQL में काम करता है

  2. Psycopg2 में एक पैरामीटर के रूप में टेबल का नाम पास करना

  3. जेपीए में 2 तिथियों के बीच दिनों की संख्या गिनें

  4. Oracle से PostgreSQL:इसके साथ प्रारंभ/कनेक्ट करें

  5. PostgreSQL 11 में नया क्या है?