如何在 SQL 中创建具有以下条件的 DB2 存储过程?

Posted

技术标签:

【中文标题】如何在 SQL 中创建具有以下条件的 DB2 存储过程?【英文标题】:How to create a DB2 stored procedure in SQL with following conditions? 【发布时间】:2018-01-16 21:07:00 【问题描述】:

我是新手。请不要对问题投反对票。

我创建了一个名为“FormData”的表,其中包含以下字段 Reviewer、AgencyName、Name、Email、Phone 和所有类型的 varchar。 我必须从 FORMDATA 中检索 Reviewer 等于用户给出的 Reviewer 值的所有行。

我已经编写了以下代码,但我不明白这是什么问题。

CREATE PROCEDURE GetFormData( INOUT Reviewer varchar,
                              INOUT AgencyName varchar,
                              INOUT Name varchar,
                              INOUT Email varchar,
                              INOUT Phone varchar)
LANGUAGE SQL
P1:BEGIN
DECLARE v_Reviewer varchar;
SET v_Reviewer=Reviewer;
SELECT * FROM TRAININGDB.FormData
WHERE Reviewer=v_Reviewer;
END P1

在此之后我收到的错误是:

DB21034E 该命令被作为 SQL 语句处理,因为它不是 有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0104N 在“Reviewer”之后发现了意外的标记“END-OF-STATEMENT” varchar"

我们在 WebSphere 服务器中使用 DB2,剩下的细节是。 产品标识符:SQL09075 DB2 v9.7.500.702 JDK 1.6 操作系统:Windows 7

【问题讨论】:

看看这是否有帮助:***.com/questions/24758349/db2-function-error/… 【参考方案1】:

您的代码存在几个问题,并且您在问题中省略了关键细节(您正在使用的工具/版本/操作系统详细信息)。

SQL0104N 发生是因为您没有配置用于提交语句的工具来指定备用语句分隔符。在过程内部,语句内定界符是分号,但您需要一个额外的定界符来标记过程的结束(并配置提交语句的工具以指定该额外的定界符)。

在您学习的过程中,最好的建议是学习 IBM 示例 SQL PL 存储过程,并让它们在您的环境中运行。这些都在您的 DB2 版本的在线知识中心中可见,并且它们也安装在任何 DB2 Linux/Windows/Unix 服务器上。

如果您从 Unix 或 Windows 上的 shell 命令行(db2cmd.exe 或 bash shell)提交,以下是您的过程示例。查找与您的版本不同的所有语法并根据需要进行调整。

--#SET TERMINATOR @
CREATE or replace PROCEDURE GetFormData( IN p_Reviewer varchar(20))
result sets 1
specific GetFormData
LANGUAGE SQL
P1:
BEGIN
    declare c1 cursor for SELECT * FROM TRAININGDB.FormData WHERE Reviewer=p_Reviewer;
    open c1;
END P1
@

【讨论】:

我已经在我的问题末尾编辑了详细信息,但是您提供的这段代码运行良好。谢谢您的帮助。请不要对这个问题投反对票。 我发现这是我自己使命的绝佳起点。甚至优于 IBM 支持!只是想指出,您可以通过 SQL WYSIWYG 编辑器开始在 IBM Warehouse Cloud DB2 上处理存储过程。进入编辑器页面后,您可以(截至今天)单击选项卡旁边的小圆圈加号按钮。唉,有一个可选的“模板 - SQL 存储过程”。来自 PostgreSQL 背景,我需要这个作为功能示例来开始,所以在这里分享给其他人。

以上是关于如何在 SQL 中创建具有以下条件的 DB2 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在SQLite3中创建具有多个条件的SQL VIEW

如何使用 OpenQuery 在 SQL Server 中创建别名 (IBM DB2)

是否可以在 SQL Server 中创建只读同义词?

如何使用基本 DML 操作在 db2 中创建外部表

如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?

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