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'; ”代码就结束了,显然不是如此。所以要另弄个结束符以告诉命令行你代码的结束。
------解决方案--------------------------------------------------------
我也碰到过这样的情况,但是我还是将这个“;”换行就可以了