首页 > 解决方案 > 尝试创建存储过程 db2 时出错

问题描述

这是我为创建一个存储过程而输入的内容,该过程显示来自客户的详细信息,其中 cus_ID = CustomerID 参数。

Create procedure getCusDetails (IN CustomerID int) \
BEGIN \
DECLARE c cursor with return for \
SELECT *from customer \
where cus_ID = CustomerID \
OPEN C \
END

我不断得到的错误是

DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "CustomerID" was found following "omer  where
cus_ID =".  Expected tokens may include:  "IN <in_predicate_value>".  LINE
NUMBER=5.  SQLSTATE=42601

我该如何解决?

标签: sqldb2

解决方案


您需要正确的分隔符,在过程中分隔每个语句,并使用不同的终止符来结束块。

您似乎正在使用命令行 shell,这使其变得更加困难。如果将语句放入文件(或 shell 脚本中的 here-document)中,然后要求 Db2 clp 执行文件/here-document,则更容易编译存储过程,db2 -tvf yourfile.sql 例如 db2 -tvf << EndHereDocument .... EndHereDocument

下面的示例显示了文件内容,它使用块内的默认分隔符(分号 ; )和不同的分隔符 @ 来结束块。

--#SET TERMINATOR @
Create procedure getCusDetails (IN CustomerID int) 
BEGIN 
    DECLARE c cursor with return for  SELECT *from customer  where cus_ID = CustomerID ;
   OPEN C ; 
END@

推荐阅读