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

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

ब्लू स्टार ने पहले ही उल्लेख किया है कि अल्पविराम से अलग किए गए स्ट्रिंग को एक सरणी में बदलने के लिए एक अंतर्निहित फ़ंक्शन है।

लेकिन मैं सुझाव दूंगा कि शुरू करने के लिए अल्पविराम से अलग स्ट्रिंग पास न करें। यदि आप आईडी की एक चर संख्या पास करना चाहते हैं तो variadic . का उपयोग करें पैरामीटर।

आपको पहले सेलेक्ट चलाने की भी आवश्यकता नहीं है, आप सिस्टम से पूछ सकते हैं कि UPDATE स्टेटमेंट के बाद कितनी पंक्तियों को अपडेट किया गया था।

CREATE FUNCTION update_status(p_status text, p_id variadic integer[]) 
  RETURNS character varying
  LANGUAGE plpgsql
AS
$$
DECLARE
  v_row_count bigint DEFAULT 0;
BEGIN
  UPDATE test
  SET status     = p_status,
      updated_by = 'admin'
  WHERE user_id = any (p_id);
    
  get diagnostics v_row_count = row_count;
  if v_row_count = 0 then 
    return 'User not found';
  end if;
  
  return concat(v_row_count, ' users updated');
END
$$;

आप इसे इस तरह इस्तेमाल कर सकते हैं:

select update_status('active', 1);
select update_status('active', 5, 8, 42);

यदि किसी कारण से, आपको इसे एक तर्क के रूप में पारित करना है, तो इसके बजाय एक वास्तविक सरणी का उपयोग करें:

CREATE FUNCTION update_status(p_status text, p_id integer[]) 

फिर इसे इस तरह पास करें:

select update_status('active', array[5,8,42]);

या

select update_status('active', '{5,8,42}');


  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. एक निर्दिष्ट बिंदु (एक टाइमस्टैम्प या एक लेनदेन आईडी) के बाद से वृद्धिशील अद्यतनों को क्वेरी कैसे करें?

  5. 'स्वामित्व वाली' विशेषता के बिना पोस्टग्रेज अनुक्रम Django 1.3 में एक आईडी वापस नहीं करते हैं