sql - 尝试创建存储过程 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
我该如何解决?
解决方案
您需要正确的分隔符,在过程中分隔每个语句,并使用不同的终止符来结束块。
您似乎正在使用命令行 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@