आप नहीं DO
. से मान लौटाएं बयान। इसके बजाय एक plpgsql फ़ंक्शन बनाएं।
RETURNING
. के साथ रिटर्न प्रकार को परिभाषित करने के कई तरीके हैं क्लॉज या OUT
. के साथ पैरामीटर। CREATE FUNCTION
के बारे में मैनुअल पढ़ें
।
फ़ंक्शन से मान वापस करने के कई तरीके हैं। अध्याय पढ़ें एक फंक्शन से वापसी मैनुअल में।
विशेष रूप से, चूंकि आप किसी तालिका से पूरी पंक्तियों को वापस करने का प्रयास कर रहे हैं, आप फ़ंक्शन घोषणा के लिए तालिका के पंजीकृत प्रकार का उपयोग कर सकते हैं:
CREATE FUNCTION foo ()
RETURNING SETOF test_log
$func$
BEGIN
IF 'a' = 'a' THEN
RETURN QUERY
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$func$ LANGUAGE plpgsql;
कॉल करें:
SELECT * FROM foo ();
या SO पर यहां एक खोज का प्रयास करें। मैंने कई पोस्ट किए संबंधित कोड उदाहरण ।
DO
के लिए समाधान कथन
यदि आप किसी फ़ंक्शन का उपयोग नहीं कर सकते हैं, तो DO कथन के साथ केवल आधा समझदार समाधान एक अस्थायी तालिका का उपयोग करना है:
CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;
$do$
BEGIN
IF 'a' = 'a' THEN
INSERT INTO tbl_tmp
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$do$ LANGUAGE plpgsql;
SELECT * FROM tbl_tmp;
अस्थायी तालिकाओं को सत्र के अंत में स्वचालित रूप से हटा दिया जाता है ।