首页 > 解决方案 > 如何从包含递归公用表表达式的 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-function

解决方案


你不需要“返回”任何东西。SQL 函数的结果自动成为正文中的最后一个查询。在您的情况下,它是 CTE 的“主要”选择。

如果函数被声明为标量函数(就像你的那样),这也意味着只返回结果的“第一”行。

你调用它的方式会很好。

但是鉴于您的查询,我认为您的函数应声明为returns table (myi integer)


推荐阅读