DB2的存储过程报错

现在有个简单的存储过程,大家帮忙下CREATE PROCEDURE getUserList()begin  select * from tbl_user;end;但是在DB2报错 ---------------------------------------------------CREATE PROCEDURE getUserList()begin  select * from tbl_user DB21034E...显示全部
现在有个简单的存储过程,大家帮忙下
CREATE PROCEDURE getUserList()
begin
  select * from tbl_user;
end;

但是在DB2报错 ---------------------------------------------------
CREATE PROCEDURE getUserList()
begin
  select * from tbl_user
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "() begin select" 后面找到异常标记
"*"。预期标记可能包括:"END"。 LINE NUMBER=3. SQLSTATE=42601

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

SQL0104N 在 "end" 后面找到异常标记 "END-OF-STATEMENT"。预期标记可能包括:"JOIN 收起
参与5

查看其它 3 个回答Kalonice的回答

KaloniceKalonice系统架构师联动优势电子商务有限公司
如果只是为了编译通过,可以这样写,前提是tbl_user表中只有一个字段,selelct 出来的数据必须保存在一个变量中,否则编译无法通过
CREATE PROCEDURE getUserList()
begin
  declare var1 int;  --声明一个变量
  select * into var1 from tbl_user; --将取出
end@
将此文件存为proc.sql
然后编译db2 -td@ -f proc.sql

实际操作中不建议使用select * 方式,这样如果发生表结构修改,比如该表增加为两列时,你的存储过程会报错不能使用,所以要写上具体的字段名称。
假设建表语句为db2 "create table tbl_user(int c1,int c2)"
select c1 into var1 from tbl_user
2010-07-05
浏览888

回答者

Kalonice
系统架构师联动优势电子商务有限公司

Kalonice 最近回答过的问题

回答状态

  • 发布时间:2010-07-05
  • 关注会员:1 人
  • 回答浏览:888
  • X社区推广