在学习MySqL的存储过程,如下语句:create procedure sp_name()
begin
end可以正常建立但是我在begin和end之间写上任务代码时,就提示出错了,为什么呢?(先删除掉前一个建立的存储过程的,插入的语句,单独都能正常运行)create procedure sp_name()
begin
insert into test values(3,3)
end
应该怎么写呢?我看网上的教程就这么写的,直接复制下来也出错
begin
end可以正常建立但是我在begin和end之间写上任务代码时,就提示出错了,为什么呢?(先删除掉前一个建立的存储过程的,插入的语句,单独都能正常运行)create procedure sp_name()
begin
insert into test values(3,3)
end
应该怎么写呢?我看网上的教程就这么写的,直接复制下来也出错
mysql>DELIMITER $$
mysql>CREATE PROCEDURE `aa` ()
-BEGIN
- SELECT * FROM T4;
-END
-$$
mysql>DELIMITER ;
PROCEDURE `study`.`sp_test`()
BEGIN
SELECT * FROM test
END$$DELIMITER ;看了一下,和你的也是一样的,为什么还是错误的呢?
mysql> CREATE PROCEDURE QQ()
-> BEGIN
-> SELECT * FROM test;
-> END
-> $$
Query OK, 0 rows affected (0.00 sec)
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#create-procedure20.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的转义字符。
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 ;
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 ;
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)