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

plpgsql फ़ंक्शन में टैग की सरणी पास करें और इसे WHERE स्थिति में उपयोग करें

आप वास्तव में लौटने . नहीं हैं परिणाम। आप RETURN QUERY EXECUTE . का प्रयोग करेंगे उस के लिए। उदाहरण:

लेकिन शुरू करने के लिए आपको यहां गतिशील SQL की आवश्यकता नहीं है ...

CREATE OR REPLACE FUNCTION get_items_by_tag(VARIADIC tags text[])
  RETURNS TABLE (id int, title text, tag text[]) AS
$func$
BEGIN
   IF array_length(tags, 1) > 0 THEN
      -- NO need for EXECUTE
      RETURN QUERY
      SELECT d.id, d.title, array_agg(t.title)
      FROM   items d
      JOIN   item_tags dt ON dt.item_id = d.id
      JOIN   tags t       ON t.id = dt.tag_id
      AND    t.title = ANY ($1)     -- use ANY construct
      GROUP  BY d.id;               -- PK covers whole table
      -- array_to_string(tags, ',') -- no need to convert array with ANY
-- ELSE ...
   END IF;
END
$func$  LANGUAGE plpgsql;

वास्तविक सरणी के साथ कॉल करें:

SELECT * FROM get_items_by_tag(VARIADIC '{tag1,tag2}'::text[]);

या आइटम की सूची ("शब्दकोश") के साथ कॉल करें:

SELECT * FROM get_items_by_tag('tag1', 'tag2');

प्रमुख बिंदु

सुनिश्चित नहीं हैं कि आपके पास IF array_length(tags, 1) > 0 THEN . क्यों है , लेकिन संभवत:IF tags IS NOT NULL THEN . से बदला जा सकता है या नहीं IF बिल्कुल भी और IF NOT FOUND 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. PostgreSQL, न्यूनतम और अधिकतम तिथियों के बीच पंक्तियों की संख्या

  2. PostgreSQL:त्रुटि:42601:रिकॉर्ड लौटाने वाले कार्यों के लिए एक कॉलम परिभाषा सूची की आवश्यकता होती है

  3. PostgreSQL में स्कीमा की नकल कैसे करें

  4. NodeJS और एक्सप्रेस:​​त्रुटि:स्व-हस्ताक्षरित प्रमाणपत्र

  5. PostgreSQL:एक ही क्वेरी में परिकलित कॉलम का उपयोग करना