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
。
编译只是第一步,您还需要让函数正确执行 - 可能还需要进行其他更改。
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”。预期的标记可能包括:“
如果我在存储过程中编写 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
。
编译只是第一步,您还需要让函数正确执行 - 可能还需要进行其他更改。