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

टेक्स्ट या पूर्णांक मान लौटाने वाले फ़ंक्शन को कैसे लिखें?

शायद आपको क्या चाहिए

सबसे अधिक संभावना है कि आपको text return वापस करने के लिए एक फ़ंक्शन की आवश्यकता होगी और दूसरा integer लौटाने के लिए या एक फ़ंक्शन जो boolean लौटाता है सफलता का संकेत देने के लिए। यह सब मामूली है और मैं आपको CREATE FUNCTION पर उत्कृष्ट मैनुअल के बारे में बताऊंगा या SO पर समान प्रश्नों में कोड उदाहरण।

आपने वास्तव में क्या पूछा

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

टेक्स्ट या पूर्णांक मान लौटाने वाला फ़ंक्शन कैसे लिखें?

... इस अर्थ में कि हमारे पास एक . है वापसी प्रकार या तो text . है या integer . इतना तुच्छ नहीं, लेकिन असंभव भी नहीं जैसा कि सुझाया गया है। मुख्य शब्द है:बहुरूपी प्रकार

इस साधारण टेबल पर निर्माण:

CREATE TABLE tbl(
  tbl_id int,
  txt    text,
  nr     int
);

यह फ़ंक्शन इनपुट प्रकार के आधार पर या तो पूर्णांक या टेक्स्ट (या यदि आप इसे अनुमति देते हैं तो कोई अन्य प्रकार) देता है।

CREATE FUNCTION f_insert_data(_id int, _data anyelement, OUT _result anyelement)
  RETURNS anyelement AS
$func$
BEGIN

CASE pg_typeof(_data) 
WHEN 'text'::regtype THEN
    INSERT INTO tbl(tbl_id, txt) VALUES(_id, _data)
    RETURNING txt
    INTO _result;

WHEN 'integer'::regtype THEN
    INSERT INTO tbl(tbl_id, nr) VALUES(_id, _data)
    RETURNING nr
    INTO _result;

ELSE
    RAISE EXCEPTION 'Unexpected data type: %', pg_typeof(_data)::text;
END CASE;

END
$func$
LANGUAGE plpgsql;

कॉल करें:

SELECT f_insert_data(1, 'foo'::text);  -- explicit cast needed.
SELECT f_insert_data(1, 7);

साधारण मामला

एक फ़ंक्शन जो TRUE returns लौटाता है / FALSE यह इंगित करने के लिए कि क्या कोई पंक्ति डाली गई है, भिन्न प्रकार का केवल एक इनपुट पैरामीटर:

CREATE FUNCTION f_insert_data2(_id int, _data anyelement)
  RETURNS boolean AS
$func$
BEGIN

CASE pg_typeof(_data)
WHEN 'text'::regtype THEN
   INSERT INTO tbl(tbl_id, txt) VALUES(_id, _data);

WHEN 'integer'::regtype THEN
   INSERT INTO tbl(tbl_id, nr) VALUES(_id, _data);

ELSE
   RAISE EXCEPTION 'Unexpected data type: >>%<<', pg_typeof(_data)::text;
END CASE;

IF FOUND THEN RETURN TRUE;
ELSE RETURN FALSE;
END IF;

END
$func$
LANGUAGE plpgsql;

इनपुट प्रकार को text . से बदला जा सकता है अधिकांश उद्देश्यों के लिए पैरामीटर, जिसे किसी भी अन्य प्रकार से डाला जा सकता है।



  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 मल्टी INSERT...कई कॉलम के साथ रिटर्निंग

  3. SQLAlchemy में कनेक्शन टाइमआउट कैसे सेट करें?

  4. दूरस्थ होस्ट से पोस्टग्रेज़ से कनेक्ट नहीं हो सकता

  5. पोस्टग्रेज में एक जेसन सरणी को पंक्तियों में कैसे बदलें