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

如何在SQL中创建具有以下条件的DB2存储过程?,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,我是新来的。请不要否决这个问题 我创建了一个名为“FormData”的表,其中包含以下字段 审核人、机构名称、姓名、电子邮件、电话和所有类型的varchar。 我必须从FORMDATA中检索所有行,其中Reviewer等于用户给定的Reviewer值 我已经写了以下代码,但我不明白这是什么问题 CREATE PROCEDURE GetFormData( INOUT Reviewer varchar, INOUT AgencyName v

我是新来的。请不要否决这个问题

我创建了一个名为“FormData”的表,其中包含以下字段 审核人、机构名称、姓名、电子邮件、电话和所有类型的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语句处理 有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0104N在“审阅者”之后发现意外标记“语句结束” 瓦尔查尔”

我们正在WebSphereServer中使用DB2,其余细节如下所示。 产品标识符:SQL09075 DB2V9.7.500.702 JDK1.6
操作系统:Windows 7

您的代码存在多个问题,并且您在问题中忽略了关键细节(您正在使用的工具/versions/operation system details)

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

在学习过程中,最好的建议是研究IBM示例SQL PL存储过程,并使它们在您的环境中工作。这些都可以在您的DB2版本的在线知识中心中看到,也可以安装在任何DB2Linux/Windows/Unix服务器上

下面是从Unix或Windows(db2cmd.exe或bash shell)上的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支持!我只想指出,您可以通过SQLWYSIWYG编辑器开始处理IBM仓库云DB2上的存储过程。在编辑器页面上,您可以单击(从今天起)选项卡旁边的一个小圆圈加按钮。唉,这里有一个可选的“模板-SQL存储过程”。来自PostgreSQL的背景,我需要将此作为一个函数示例来开始,所以在这里为其他人分享。