Return 游标在 db2 中的函数中

Return cursor in function in db2

 CREATE OR REPLACE FUNCTION PPP ()
       RETURNS cursor 
  F1: BEGIN ATOMIC
          declare c1 cursor ;

          set c1 = CURSOR FOR select * from aaa ; {get error here}

          RETURN c1 ;
  END

我的错误是

A.PPP - 部署开始。 创建用户定义函数 returns SQLCODE:-104,SQLSTATE:42601。 A.PPP:6:在“之后发现了一个意外的标记”FOR“ 设置 c1 = CURSOR”。预期的标记可能包括:“”.. SQLCODE=-104,SQLSTATE=42601,DRIVER=4.19.56 在“之后发现了一个意外的标记”FOR“ 设置 c1 = CURSOR”。预期的标记可能包括:“”.. SQLCODE=-104,SQLSTATE=42601,DRIVER=4.19.56 A.PPP - 部署失败。 A.PPP - 回滚成功完成。

如果我在存储过程中编写 set c1 = ...,我不会收到错误

您收到此错误是因为您的语法无效。

内联 SQL 块(即任何以 BEGIN ATOMIC 开头的复合块)的众多限制之一是:

"Cursors and condition handlers are not supported in inline SQL PL and therefore neither is the RESIGNAL statement."

参见 docs

要让您的代码编译,该函数不应内联,而是编译块,将 BEGIN ATOMIC 替换为 BEGIN

编译只是第一步,您还需要让函数正确执行 - 可能还需要进行其他更改。