function - 在 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 = ...
在存储过程中写入,我不会收到错误
解决方案
您收到此错误是因为您的语法无效。
内联 SQL 块(即任何以 开头的复合块BEGIN ATOMIC
)的众多限制之一是:
“内联 SQL PL 不支持游标和条件处理程序,因此 RESIGNAL 语句也不支持。”
请参阅文档。
为了让你的代码编译,函数不应该被内联,而是一个编译块,替换BEGIN ATOMIC
为BEGIN
.
编译只是第一步,您还需要让函数正确执行 - 可能需要进行其他更改。
推荐阅读
- git - 发布单个文件以在 GitLab 上下载
- javascript - Vee Validate 属性或方法“错误”未定义 Nuxt JS
- ansible - 将嵌套字典作为 extra_vars 传递给 ansible-playbooks
- ssl - 如何批量上传 SNI 证书到 traefik/consul
- php - PHP如何从头到尾获取HTML元素?
- windows - 用于复制和重命名文件的自动化脚本或程序
- vba - VBA Query - Compare a string with the value of 2 rows
- reporting-services - 文本格式的 ssrs 日期列,但是当我导出到 excel 时,它应该按日期排序
- python - 防止机器人断开用户与正常语音通道的连接?
- laravel - hasMany 关系中的自定义外键和本地键:Laravel