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

पीएल/पीजीएसक्यूएल फ़ंक्शन का उपयोग करके किसी भी तालिका में गतिशील रूप से एकाधिक मानों वाला कॉलम जोड़ें

मैंने इसे refcursor . के साथ किया यदि आप आउटपुट कॉलम सूची पूरी तरह से गतिशील चाहते हैं:

CREATE OR REPLACE FUNCTION is_record_exists(tablename character varying, columns character varying[], keepcolumns character varying[] DEFAULT NULL::character varying[])
    RETURNS SETOF refcursor AS
$BODY$

DECLARE 
    ref refcursor;
    keepColumnsList text;
    columnsList text; 
    valuesList text;
    existQuery text;
    keepQuery text;
BEGIN
    IF keepcolumns IS NOT NULL AND array_length(keepColumns, 1) > 0 THEN
        keepColumnsList :=  array_to_string(keepColumns, ', ');
    ELSE
        keepColumnsList :=  'COUNT(*)';
    END IF;

    columnsList := (SELECT array_to_string(array_agg(name || ' = ' || value), ' OR ') FROM
        (SELECT unnest(columns[1:1]) AS name, unnest(columns[2:2]) AS value) pair);

    existQuery := 'SELECT ' || keepColumnsList || ' FROM ' || tableName || ' WHERE ' || columnsList;
    RAISE NOTICE 'Exist query: %', existQuery;

    OPEN ref FOR EXECUTE
        existQuery;
    RETURN next ref;
END;$BODY$
  LANGUAGE plpgsql;

फिर FETCH ALL IN . पर कॉल करने की जरूरत है परिणाम प्राप्त करने के लिए। विस्तृत सिंटैक्स यहां या वहाँ:https://stackoverflow.com/a/12483222/630169 . ऐसा लगता है कि यह अभी के लिए एकमात्र रास्ता है। आशा है कि PostgreSQL 11 में PROCEDURES के साथ कुछ बदला जाएगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 और अनंत पायथन लिपि

  2. MySQL से PostgreSQL तालिका रूपांतरण बनाएं - वर्णसेट और संयोजन

  3. एकाधिक दशमलव बिंदुओं (.) के साथ PostgreSQL से रिकॉर्ड सॉर्ट करना

  4. PostgreSQL में किसी तालिका की पंक्ति गणना खोजने का तेज़ तरीका

  5. एक ही क्वेरी में दो मानों के बीच इंटरपोलेशन