शायद आपको क्या चाहिए
सबसे अधिक संभावना है कि आपको 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
. से बदला जा सकता है अधिकांश उद्देश्यों के लिए पैरामीटर, जिसे किसी भी अन्य प्रकार से डाला जा सकता है।