sql-function - 如何从包含递归公用表表达式的 SQL 函数返回?
问题描述
我有一个这样的功能(只是为了使其可读而减少它):
CREATE FUNCTION myfunction(somearg text) RETURNS integer AS
$$
WITH recursive mycte(index, myi) AS (
select 0,null
--from
--where
UNION ALL
SELECT mycte.index+1, case when[condition] then mycte.myi=mycte.index end
FROM mytable AS m, mycte
WHERE index<50
)
SELECT myi
FROM mycte;
--how to return myi;
$$
LANGUAGE SQL ;
SELECT myfunction('abc');
我怎样才能返回myi?
一旦[condition]
为真,myi
应该返回。([condition]
在我的任务中只能是一次,效率没问题)
解决方案
你不需要“返回”任何东西。SQL 函数的结果自动成为正文中的最后一个查询。在您的情况下,它是 CTE 的“主要”选择。
如果函数被声明为标量函数(就像你的那样),这也意味着只返回结果的“第一”行。
你调用它的方式会很好。
但是鉴于您的查询,我认为您的函数应声明为returns table (myi integer)