当前位置: 代码迷 >> DB2 >> DB2存储过程中有回车换行符就报错?解决办法
  详细解决方案

DB2存储过程中有回车换行符就报错?解决办法

热度:7167   发布时间:2013-02-26 00:00:00.0
DB2存储过程中有回车换行符就报错?
create procedure b_test(out ret varchar(20)) language sql begin set ret = 'help'; end ;

这种写法在图形界面和db2 -tvf D:\liuguanju\sp.sql都能成功创建。




create procedure b_test(out ret varchar(20)) 
language sql 
begin 
set ret = 'help'; 
end ;

这种写法死活建不上去,报错如下:
F:\Program Files\IBM\SQLLIB\BIN>db2 -tvf D:\liuguanju\sp_test.sql
create procedure b_test(out ret varchar(20))
language sql
begin
set ret = 'help'
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "et ret = 'help'" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"<psm_semicolon>"。 LINE NUMBER=4.
SQLSTATE=42601

end
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "end" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN
<joined_table>"。 SQLSTATE=42601

图形界面执行也是如此。

本人初学DB2,多谢指点。

------解决方案--------------------------------------------------------
你用的什么工具写的存储过程 ,你看看是否是设置了行结束符。
------解决方案--------------------------------------------------------
我是进来学习的。
------解决方案--------------------------------------------------------
我是进来学习的。
------解决方案--------------------------------------------------------
那在最后一行的“;”要换成一个你自定义的结束符,如“@”。即:
create procedure b_test(out ret varchar(20)) 
language sql 
begin 
set ret = 'help'; 
end@

则运行db2 -td@ -vsf D:\liuguanju\sp.sql就OK了。
因为db2 -tvf的默认结束符为“;”,即认为到“set ret = 'help'; ”代码就结束了,显然不是如此。所以要另弄个结束符以告诉命令行你代码的结束。
------解决方案--------------------------------------------------------
我也碰到过这样的情况,但是我还是将这个“;”换行就可以了
  相关解决方案