编程专栏 2012-01-31 10:04 采纳率: 0%
浏览 188
已采纳

请教一个MySQL5.0.45存储过程的问题

测试数据表:
drop table if exists pt;
create table pt (
pid int unsigned auto_increment not null,
pname varchar(30) not null,
primary key(pid)
)Engine=InnoDB default charset = utf8;

存储过程代码:
delimiter //
drop procedure if exists p8 //
create procedure p8 (
in param int
)
begin
#if param > 0 then #如果不注释掉这个if ... end if条件会出错,不明白是什么原因?
declare i int default 0;
LOOP_LABEL:loop
insert into pt values(null,'loop');
set i = i+1;
if i >= param then
leave LOOP_LABEL;
end if;
end loop;
#end if;
select * from pt;
end;
//
delimiter ;

存储过程想实现的功能:通过传递进来的参数param往数据表中连续插入一系列记录,但是如果不注释掉存储过程中最外层的if条件,就会出错,不明白是什么原因,刚学存储过程,求指教!

 

补充:但是,为什么改为如下的方式却又是可以正确执行了呢?

delimiter //

drop procedure if exists p8 //

create procedure p8 (

in param int

)

begin

declare i int default 0; #将这条语句的定义提到if条件之前就可以执行了,不明白是什么原因?

if param > 0 then

LOOP_LABEL:loop

insert into pt values(null,'loop');

set i = i+1;

if i >= param then

leave LOOP_LABEL;

end if;

end loop;

end if;

select * from pt;

end;

//

delimiter ;

 

展开全部

  • 写回答

1条回答 默认 最新

  • yezongnihao 2012-02-01 14:49
    关注

    这是存储过程的基本语法规则。。。begin下面就是declare。后面才是一些处理的语句。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 syri可视化不显示插入缺失
  • ¥30 运行软件卡死查看系统日志分析不出来
  • ¥15 C语言代码改正特征选择算法设计,贝叶斯决策,,设计分类器,远程操作代码修正一下
  • ¥15 String 类valuve指向的问题
  • ¥15 在ros2的iron版本进行编译时遇到如下问题
  • ¥18 vs用setup project打包项目实现安装完立即运行
  • ¥15 孟德尔随机化TwoSampleMR在线提取结局数据,遇到Error in check_reset(override_429)的问题
  • ¥15 ONNX转RKNN遇到问题
  • ¥60 以太网电缆未接通怎么处理
  • ¥15 关于超声图片进行放射组学的疑问
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部