首页 > 解决方案 > 在 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 - 部署开始。创建用户定义函数返回 SQLCODE:-104,SQLSTATE:42601。A.PPP:6:在“set c1 = CURSOR”之后发现了意外的标记“FOR”。预期的标记可能包括:“<compound_SQL_stmts1>”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.19.56 在“set c1 = CURSOR”之后发现了意外的标记“FOR”。预期的令牌可能包括:“<compound_SQL_stmts1>”.. SQLCODE=-104、SQLSTATE=42601、DRIVER=4.19.56 A.PPP - 部署失败。A.PPP - 回滚成功完成。

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

标签: functiondb2

解决方案


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

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

“内联 SQL PL 不支持游标和条件处理程序,因此 RESIGNAL 语句也不支持。”

请参阅文档

为了让你的代码编译,函数不应该被内联,而是一个编译块,替换BEGIN ATOMICBEGIN.

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


推荐阅读