如何在 DB2 LUW 中的存储过程或 UDF 中“选择”?

Posted

技术标签:

【中文标题】如何在 DB2 LUW 中的存储过程或 UDF 中“选择”?【英文标题】:How to "select" inside a stored procedure or a UDF in DB2 LUW? 【发布时间】:2016-11-21 19:48:36 【问题描述】:

我相信这个问题很琐碎。我无法在我定义的存储过程中选择行,也无法在 UDF 中选择行。这是我使用的语法:

Create Or Replace Procedure GenerateSequence(
In InternalUnitID SmallInt,
In ObjectTypeID SmallInt)

Language SQL
Dynamic Result Sets 1
Not Deterministic
No External Action
Modifies SQL Data
Commit On Return Yes
Begin
Select  Number
From    Sequence
Where   InternalUnit=InternalUnitID
    And ObjectType=ObjectTypeID;
End

如果我尝试创建上述过程(通过将定义放入 SQL 文件并运行它)。我收到以下错误消息: DB21034E 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令。在 SQL 处理期间它返回:

SQL0104N  An unexpected token "Select Number  From Sequence  Where Intern" was
found following "n Return Yes Begin  ".  Expected tokens may include: "". 
LINE NUMBER=21.  SQLSTATE=42601

有什么线索会导致这个问题吗?

我的环境是 Windows 上的 DB2 10.5 Express。

【问题讨论】:

看一下手册。 ibm.com/support/knowledgecenter/SSEPGG_10.5.0/… 要返回结果集,您只需声明一个游标并在退出过程之前将其打开。 数字和序列都是保留字 为我创建 SP 最困难的部分是始终让命令行选项正确,以便使用与 ; 不同的批处理终止符,因此我可以在我的 SP 代码中包含 ; ibm.com/support/knowledgecenter/SSEPGG_10.5.0/… 这只是另一种表现形式:***.com/questions/40699343/… 【参考方案1】:

我的问题是我需要使用游标才能将结果集返回给存储过程的调用者。

参考资料:

CREATE PROCEDURE (SQL) statement

Compound SQL (compiled) statement

【讨论】:

以上是关于如何在 DB2 LUW 中的存储过程或 UDF 中“选择”?的主要内容,如果未能解决你的问题,请参考以下文章

DB2 LUW 版本 10.5.0.10 - 在存储过程中获取警告(未找到)行

从外部 UDF 调用 db2ReadLog

我们如何在大型机上开发应用程序以在没有 DB2/z 的情况下访问 DB2/LUW?

DB2 LUW:在Dynamic SQL中创建用户定义的函数

DB2 Zos 浅谈 - DB2 LUW VS DB2 Zos

如何从安装在 DB2 中的 Java UDF 进行日志记录