创建MySql的存储过程,总是提示失败

longzu1984 2009-04-21 01:45:23
在学习MySqL的存储过程,如下语句:

create procedure sp_name()
begin
end

可以正常建立

但是我在begin和end之间写上任务代码时,就提示出错了,为什么呢?(先删除掉前一个建立的存储过程的,插入的语句,单独都能正常运行)

create procedure sp_name()
begin
insert into test values(3,3)
end


应该怎么写呢?我看网上的教程就这么写的,直接复制下来也出错
...全文
335 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-04-21
  • 打赏
  • 举报
回复
ACMAIN_CHM 2009-04-21
  • 打赏
  • 举报
回复

DELIMITER $$

CREATE
PROCEDURE `sp_doit`()
BEGIN
DECLARE i INT; --Changed by ACMAIN
SET i=1;
WHILE i<100000 DO
INSERT INTO test VALUES(6,66);
SET i=i+1;
END WHILE;
END
$$

DELIMITER ;




mysql> CREATE
-> PROCEDURE `sp_doit`()
-> BEGIN
-> DECLARE i INT;
-> SET i=1;
-> WHILE i<100000 DO
-> INSERT INTO test VALUES(6,66);
-> SET i=i+1;
-> END WHILE;
-> END
-> $$
Query OK, 0 rows affected (0.00 sec)
WWWWA 2009-04-21
  • 打赏
  • 举报
回复
DELIMITER $$
drop procedure if exists rr1$$
CREATE PROCEDURE `test`.`rr1`()
begin
DECLARE i int;
SET i=1;
WHILE i<100000 DO
INSERT INTO test VALUES(6,66);
SET i=i+1;
END WHILE;


END$$

DELIMITER ;
longzu1984 2009-04-21
  • 打赏
  • 举报
回复
大概错误知道了,谢谢,不过还是有点不明白

DELIMITER $$

CREATE
PROCEDURE `study`.`sp_doit`()
BEGIN
INSERT INTO test VALUES(6,66);#原来的没加分号,加上就可以了
END
$$

DELIMITER ;


不过我是想建立一个插入100000条数据的存储过程,发现又不行了……

DELIMITER $$

CREATE
PROCEDURE `study`.`sp_doit`()
BEGIN
DECLARE i;
SET i=1;
WHILE i<100000 DO
INSERT INTO test VALUES(6,66);
SET i=i+1;
END WHILE;
END
$$

DELIMITER ;
ACMAIN_CHM 2009-04-21
  • 打赏
  • 举报
回复

你可以参考一下官方文档
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#create-procedure

20.2.1. CREATE PROCEDURE和CREATE FUNCTION

下面是一个使用OUT参数的简单的存储程序的例子。例子为,在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
当使用delimiter命令时,你应该避免使用反斜杠(‘\’)字符,因为那是MySQL的转义字符。
WWWWA 2009-04-21
  • 打赏
  • 举报
回复
mysql> DELIMITER $$
mysql> CREATE PROCEDURE QQ()
-> BEGIN
-> SELECT * FROM test;
-> END
-> $$
Query OK, 0 rows affected (0.00 sec)
ACMAIN_CHM 2009-04-21
  • 打赏
  • 举报
回复

mySQL默认分号为语句结束符,所有在编写 procedure , function ,trigger 的时候,需要用delimiter 来重定义提交符。

longzu1984 2009-04-21
  • 打赏
  • 举报
回复
谢谢

我用的是SQLyog,也试了MySQL Front,shell用起来不大方便就没用了

用SQL yog里面自动产生的语句,也是错误的

DELIMITER $$

CREATE
PROCEDURE `study`.`sp_test`()
BEGIN
SELECT * FROM test
END$$

DELIMITER ;

看了一下,和你的也是一样的,为什么还是错误的呢?
WWWWA 2009-04-21
  • 打赏
  • 举报
回复
你是在MYSQL SHELL下?
mysql>DELIMITER $$
mysql>CREATE PROCEDURE `aa` ()
-BEGIN
- SELECT * FROM T4;
-END
-$$
mysql>DELIMITER ;

56,677

社区成员

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

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