发泄,mysql让我郁闷! while循环,声明变量!

如一宝宝 2009-03-05 10:30:54
今天想测试自己的程序,突发奇想用mysql里面的循环插入几百万行数据试试,
结果不知道mysql的循环的语法,查看mysql参考手册,简单的几行代码直接copy过来都不行

错误1:

drop procedure if exists insertBatch;
create procedure insertBatch()
begin
select * from admininfo;
end;

只是新建一个存储过程而已,在里面简单查询一下我的表,报错....

错误2

drop procedure if exists insertBatch;
create procedure insertBatch()
begin
declare num int default 0;
end;

只是想在过程里面声明一个变量,一样报错,不能声明变量,去掉default 0的默认值也不行

在整个互联网上搜索,百度,谷歌全是千遍一律的.拿过来一样报错
想写个循环插入都不行

网上下了一本mysql 5.1的参考手册,上面的语法我拿过来用全不都不支持,虽然我的mysql是5.0的
难道5.0和5.1的语法有很大的出入?

我用的是SQLyog的图形化工具的查询分析器,不知道大家有没有和我一样的情况,我2哦...

mssql和oracle简单多了,都没有出现像这样让人郁闷的问题,谁能帮帮我

我QQ 313009286,先谢过了
...全文
1748 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2009-03-06
  • 打赏
  • 举报
回复
呵呵,MYSQL是FREE的,功能没有SQLSERVER强大,没有GO,
而且drop procedure if exists insertData;
可以单独执行,也可以在SP中执行
如一宝宝 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wwwwb 的回复:]
呵呵,因为已经存在同名的SP的,要删除再能CREATE
[/Quote]
我是想有没有显示提交的,类似于mssql中的go一样的
执行了一条语句后就提交
wwwwb 2009-03-06
  • 打赏
  • 举报
回复
另,第一个问题,在SQLYOG中建立SP,默认有一个delimiter$$,
结束有delimiter//
SQLYOG比较好用
wwwwb 2009-03-06
  • 打赏
  • 举报
回复
呵呵,因为已经存在同名的SP的,要删除再能CREATE
如一宝宝 2009-03-06
  • 打赏
  • 举报
回复
我还有一个问题

delimiter//
drop procedure if exists insertData;

delimiter//
create procedure insertData()
begin
declare num int default 0;
set num = 0 ;
while @num < 10 do
insert into phoenix.admininfo
values (null, 'test', 'test', 'test', 1, '1987-5-29', '1987-5-29', 'admin_email',
'admin_Mobile', 'admin_extension', 088, 0, phoenix, null, null, 0, 11);

set @num = @num + 1;
end while;
end;


为什么这段代码不能一起全部执行,非要先drop后才能create?

如一宝宝 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]
呵呵,你是在MYSQL命令行下输入代码,要用delimiter设置结束符,
才能输入相关代码,最后再用delimiter设置正常结束符。
[/Quote]
这就是关键了,等下把分给你.
ACMAIN_CHM 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lowson0 的回复:]
引用 5 楼 ACMAIN_CHM 的回复:
delimiter是设置语句结束字符,否则mySQL遇到;就执行了,改成//之后,当渎到//才提交执行.

我一直以为跟mssql一样,go才是提交,你说读到//才提交的话,那应该放在end后面才对了,怎么放到前面了
[/Quote]

前面是通过mySQL,我要换结束符了,不再以;结束了,以 // 结束!!!

后面真正的在 end; 后面的 // 是结束。


wwwwb 2009-03-06
  • 打赏
  • 举报
回复
呵呵,你是在MYSQL命令行下输入代码,要用delimiter设置结束符,
才能输入相关代码,最后再用delimiter设置正常结束符。
如一宝宝 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ACMAIN_CHM 的回复:]
delimiter是设置语句结束字符,否则mySQL遇到;就执行了,改成//之后,当渎到//才提交执行.
[/Quote]
我一直以为跟mssql一样,go才是提交,你说读到//才提交的话,那应该放在end后面才对了,怎么放到前面了
ACMAIN_CHM 2009-03-06
  • 打赏
  • 举报
回复
delimiter是设置语句结束字符,否则mySQL遇到;就执行了,改成//之后,当渎到//才提交执行.
如一宝宝 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ACMAIN_CHM 的回复:]
delimiter //
这个你输了吗?
[/Quote]

老大,我成功了,可以睡个好觉了,刚刚不小心还写了个死循环,但是
delimiter //
这个是什么意思哦,参考手册里面没有说明啊

还要在后面加上//
ACMAIN_CHM 2009-03-05
  • 打赏
  • 举报
回复
delimiter //
这个你输了吗?
如一宝宝 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ACMAIN_CHM 的回复:]
1. 先用mysql命令行连上去确认没有问题, 5.0也是可以的。注意delimter修改界定符。

SQL codemysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> //



2.如果上述例子OK,则到你的那个SQLyog中去试试
[/Quote]

mysql肯定没有问题,因为有个erp已经在运行了,用的就是mysql

上面的那个存储过程在命令行里面输入到select...这条语句时我输入;后回车就报错了,
根本不给机会我输入end;

放在sqlyog里面一样报错
ACMAIN_CHM 2009-03-05
  • 打赏
  • 举报
回复
1. 先用mysql命令行连上去确认没有问题, 5.0也是可以的。注意delimter修改界定符。
mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> //


2.如果上述例子OK,则到你的那个SQLyog中去试试

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧