आप पास में हैं। मूल रूप से आपका SELECT
कहीं नहीं जा रहा है और आपका फ़ंक्शन हेडर कहता है कि इसे एक INT
वापस करना चाहिए मूल्य। चूंकि यह एक शुद्ध SQL
है CTE
. का उपयोग करके क्वेरी , PLPGSQL
का उपयोग करने की कोई आवश्यकता नहीं है , इसलिए मैंने भाषा के प्रकार को भी SQL
. में बदल दिया है
CREATE OR REPLACE FUNCTION fibonacci (lastN INTEGER)
RETURNS SETOF INTEGER LANGUAGE SQL AS $$
WITH RECURSIVE t(a, b) AS (
VALUES(0,1)
UNION ALL
SELECT GREATEST(a, b), a + b AS a from t
WHERE b < $1
)
SELECT a FROM t;
$$;
SELECT fibonacci(20);
संपादित करें: जैसा अनुरोध किया गया है, वही फ़ंक्शन भाषा PLPGSQL
का उपयोग कर रहा है
CREATE OR REPLACE FUNCTION fibonacci (lastN INTEGER)
RETURNS SETOF INT LANGUAGE PLPGSQL AS $$
BEGIN
RETURN QUERY WITH RECURSIVE t(a, b) AS (
VALUES(0,1)
UNION ALL
SELECT GREATEST(a, b), a + b AS a from t
WHERE b < $1
)
SELECT a FROM t;
END $$;
SELECT fibonacci(20);