IT分销/经销数据库

存储过程

麻烦看下在DB2编辑器中怎么总是执行不过去报错
create procedure testif (in friend varchar(40))
language sql
specific testif
begin
     declare s_id integer default 1;
     update studentinfo set sname='李四' where sid=s_id;
    if  friend='1' then   
           commit;
    elseif friend='2' then
          rollback;
    else
          update studentinfo set sname='赵六' where sid=s_id;
          commit;
    end if;
    insert into studentinfo values(22,'刘备',1,'1987-7-20',10,20,8)
    commit;
end@
------------------------------------------------------------------------------
create procedure testif (in friend varchar(40))
language sql
specific testif
begin
     declare s_id integer default 1;
     update studentinfo set sname='李四' where sid=s_id;
    if  friend='1' then   
           commit;
    elseif friend='2' then
          rollback;
    else
          update studentinfo set sname='赵六' where sid=s_id;
          commit;
    end if;
    insert into studentinfo values(22,'刘备',1,'1987-7-20',10,20,8)
    commit;
end
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0104N  在 "' where sid=s_id; " 后面找到异常标记
"if"。预期标记可能包括:""。  LINE NUMBER=6.  SQLSTATE=42601
SQL0104N  在 "' where sid=s_id;
" 后面找到异常标记 "if"。预期标记可能包括:"                               "。
解释:
在文本 "<文本>" 后面的指定标记处检测到 SQL
语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串中的语法错误。 "<文本>"
字段指示无效标记前面的 SQL 语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串的 20 个字符。
作为帮助,在 SQLCA 的 SQLERRM
字段中,提供了有效标记的部分列表作为
"<标记列表>"。此列表假设语句到该位置为止
是正确的。
无法处理该语句。
用户响应:
在指定的标记区域内检查并更正语句。
sqlcode :  -104
sqlstate :  42601
结束符我也改为@了啊
参与5

4同行回答

mayuan1521mayuan1521数据库管理员福建新大陆
注意细节显示全部
注意细节收起
互联网服务 · 2010-10-17
浏览661
hua812hua812数据库管理员DB2
李敏兄很仔细啊一般到报错的上下行去找找显示全部
李敏兄很仔细啊
一般到报错的上下行去找找收起
金融其它 · 2010-10-15
浏览667
limin19821limin19821系统工程师乐酷天
declare s_id integer default 1;     update studentinfo set sname='李四' where sid=s_id;   xxx      update studentinfo set sname='赵六' where sid=s_id;显示全部
declare s_id integer default 1;
     update studentinfo set sname='李四' where sid=s_id;
   xxx
      update studentinfo set sname='赵六' where sid=s_id;收起
IT分销/经销 · 2010-10-15
浏览658
limin19821limin19821系统工程师乐酷天
where sid=s_id;   难道没发现这个分号和其他的不一样?!!! 是不是一个全角分号?显示全部
where sid=s_id;   难道没发现这个分号和其他的不一样?!!! 是不是一个全角分号?收起
IT分销/经销 · 2010-10-15
浏览686

提问者

zqtzlg
软件开发工程师

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2010-10-15
  • 关注会员:1 人
  • 问题浏览:3708
  • 最近回答:2010-10-17
  • X社区推广