我是新手。请不要低估问题。
我创建了一个名为' FormData'其中包含以下字段 审阅者,AgencyName,姓名,电子邮件,电话和所有类型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一个意外的令牌" END-OF-STATEMENT"发现在"评论家之后 VARCHAR"
我们在WebSphere服务器中使用DB2,剩下的细节是。 产品标识符:SQL09075 DB2 v9.7.500.702 JDK 1.6 操作系统:Windows 7
答案 0 :(得分:2)
您的代码存在一些问题,您也省略了问题中的关键详细信息(您使用的工具/版本/操作系统详细信息)。
SQL0104N的发生是因为您没有配置用于提交语句的工具来指定备用语句分隔符。在过程内部,语句内分隔符是分号,但是您需要一个额外的分隔符来标记过程的结束(并配置提交语句的工具以指定其他分隔符)。
在学习时,最好的建议是研究IBM示例SQL PL存储过程,并使它们适用于您的环境。这些在您的DB2版本的在线知识中心中都可见,并且它们也安装在任何DB2 Linux / 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
@