您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

递归 SQLScript 逻辑

描述

在引入 SQLScript 递归逻辑之前,如果需要在 SQLScript 过程或函数中使用任何递归运算,则必须使用迭代逻辑将其重写为运算。SQLScript 现在支持递归逻辑,允许您编写过程或函数,在满足中止条件之前在其主体内调用自身。

示例

示例代码create procedure factorial_proc(in i int, out j int) as begin if :i <= 1 then j = 1; else call factorial_proc(:i-1, j); j = :i * :j; end if;end; call factorial_proc(0, ?);call factorial_proc(1, ?);call factorial_proc(4, ?);call factorial_proc(10, ?); create function factorial_func(i int) returns j int as begin if :i <= 1 then j = 1; else j = :i * factorial_func(:i-1); end if;end; select factorial_func(0) from dummy;select factorial_func(1) from dummy;select factorial_func(4) from dummy;select factorial_func(10) from dummy; create function factorial_func2(i int) returns table(a int) as begin if :i <= 1 then return select 1 as a from dummy; else return select :i * a as a from factorial_func2(:i - 1); end if;end; select * from factorial_func2(0);select * from factorial_func2(1);select * from factorial_func2(4);select * from factorial_func2(10);

限制

以下限制适用:

  • 缺省情况下,过程调用的最大深度为 32。

  • 用户定义的函数没有明确的调用深度检查,但当没有进一步的评估可用时,系统将返回运行时错误。

  • SQLScript 库成员过程和函数不支持递归。