问一个MySQL存储过程的问题

周公
博客专家认证
2010-08-04 09:09:41
这个存储过程的目的是创建一个表,然后向表中插入1到100的数字,然后查询(为了简化程序原来的逻辑),现在这个存储过程一直不能执行成功,请大家帮忙看看。

请看代码:

CREATE PROCEDURE p()
BEGIN
DECLARE i int DEFAULT 1;
CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
pid int not null,
PRIMARY KEY(id)
) TYPE = HEAP;

WHILE i<100 DO
INSERT INTO tmp_table(pid)values(i);
SET i=i+1;
END WHILE;
SELECT * FROM tmp_table AS t;
END;
...全文
109 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
周公 2010-08-04
  • 打赏
  • 举报
回复
好像是要delimiter一下,是的,代码本身没有什么问题。
谢谢各位。
zuoxingyu 2010-08-04
  • 打赏
  • 举报
回复
没有发现问题。直接复制到TOAD里执行的。
WWWWA 2010-08-04
  • 打赏
  • 举报
回复
如果在命令行下输入,要改变结束符
delimiter $$
CREATE PROCEDURE p()
BEGIN
DECLARE i int DEFAULT 1;
CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
pid int not null,
PRIMARY KEY(id)
) TYPE = HEAP;

WHILE i<100 DO
INSERT INTO tmp_table(pid)values(i);
SET i=i+1;
END WHILE;
SELECT * FROM tmp_table AS t;
END;$$
luoyoumou 2010-08-04
  • 打赏
  • 举报
回复
delimiter ||
CREATE PROCEDURE p()
BEGIN
DECLARE i int DEFAULT 1;
CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
pid int not null,
PRIMARY KEY(id)
) TYPE = HEAP;

WHILE i<100 DO
INSERT INTO tmp_table(pid)values(i);
SET i=i+1;
END WHILE;
SELECT * FROM tmp_table AS t;
END;||


feixianxxx 2010-08-04
  • 打赏
  • 举报
回复
1.delimiter $$ 转化下结束符 因为存储过程里面要用到;

2.WHILE i<=100 DO
输出1-100 要<=100
ACMAIN_CHM 2010-08-04
  • 打赏
  • 举报
回复
你可以参考一下官方文档中的教程部分。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
ACMAIN_CHM 2010-08-04
  • 打赏
  • 举报
回复
你的代码测试如下,并无问题啊。

mysql> delimiter //
mysql>
mysql> CREATE PROCEDURE p()
-> BEGIN
-> DECLARE i int DEFAULT 1;
-> CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
-> id int UNSIGNED NOT NULL AUTO_INCREMENT,
-> pid int not null,
-> PRIMARY KEY(id)
-> ) TYPE = HEAP;
->
-> WHILE i<100 DO
-> INSERT INTO tmp_table(pid)values(i);
-> SET i=i+1;
-> END WHILE;
-> SELECT * FROM tmp_table AS t;
-> END;
->
-> //
Query OK, 0 rows affected, 1 warning (0.16 sec)

mysql> delimiter ;
mysql> call p();
+----+-----+
| id | pid |
+----+-----+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
| 13 | 13 |
| 14 | 14 |
| 15 | 15 |
| 16 | 16 |
| 17 | 17 |
| 18 | 18 |
| 19 | 19 |
| 20 | 20 |
| 21 | 21 |
| 22 | 22 |
| 23 | 23 |
| 24 | 24 |
| 25 | 25 |
| 26 | 26 |
| 27 | 27 |
| 28 | 28 |
| 29 | 29 |
| 30 | 30 |
| 31 | 31 |
| 32 | 32 |
| 33 | 33 |
| 34 | 34 |
| 35 | 35 |
| 36 | 36 |
| 37 | 37 |
| 38 | 38 |
| 39 | 39 |
| 40 | 40 |
| 41 | 41 |
| 42 | 42 |
| 43 | 43 |
| 44 | 44 |
| 45 | 45 |
| 46 | 46 |
| 47 | 47 |
| 48 | 48 |
| 49 | 49 |
| 50 | 50 |
| 51 | 51 |
| 52 | 52 |
| 53 | 53 |
| 54 | 54 |
| 55 | 55 |
| 56 | 56 |
| 57 | 57 |
| 58 | 58 |
| 59 | 59 |
| 60 | 60 |
| 61 | 61 |
| 62 | 62 |
| 63 | 63 |
| 64 | 64 |
| 65 | 65 |
| 66 | 66 |
| 67 | 67 |
| 68 | 68 |
| 69 | 69 |
| 70 | 70 |
| 71 | 71 |
| 72 | 72 |
| 73 | 73 |
| 74 | 74 |
| 75 | 75 |
| 76 | 76 |
| 77 | 77 |
| 78 | 78 |
| 79 | 79 |
| 80 | 80 |
| 81 | 81 |
| 82 | 82 |
| 83 | 83 |
| 84 | 84 |
| 85 | 85 |
| 86 | 86 |
| 87 | 87 |
| 88 | 88 |
| 89 | 89 |
| 90 | 90 |
| 91 | 91 |
| 92 | 92 |
| 93 | 93 |
| 94 | 94 |
| 95 | 95 |
| 96 | 96 |
| 97 | 97 |
| 98 | 98 |
| 99 | 99 |
+----+-----+
99 rows in set (0.11 sec)

Query OK, 0 rows affected (0.36 sec)

mysql>
feixianxxx 2010-08-04
  • 打赏
  • 举报
回复
delimiter $$

create PROCEDURE p()
BEGIN
DECLARE i int DEFAULT 1;
CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
pid int not null,
PRIMARY KEY(id)
) TYPE = HEAP;

WHILE i<=100 DO
INSERT INTO tmp_table(pid)values(i);
SET i=i+1;
END WHILE;
SELECT * FROM tmp_table AS t;
END;
$$

delimiter ;

call p();
周公 2010-08-04
  • 打赏
  • 举报
回复
弄错了,创建语句是下面的:

CREATE PROCEDURE p()
BEGIN
DECLARE i int DEFAULT 1;
CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
pid int not null,
PRIMARY KEY(id)
) TYPE = HEAP;

WHILE i<100 DO
INSERT INTO tmp_table(pid)values(i);
SET i=i+1;
END WHILE;
SELECT * FROM tmp_table AS t;
END;

对MySQL不是太熟悉。

56,675

社区成员

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

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