mysql 存储过程1064问题和事例
2013-12-03 23:52
351 查看
今天晚上室友说我看看你写的那个框架,听说查询十万条数据只需要几秒钟,我当然愿意展示,开始准备环境:
在公司我是用的oracle,我就把写的存储过程拿出来在我本地的mysql中运行,结果一运行报错:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'proone()' at line 1
一直报1064 我在网上找了很久,说需要重新定义mysql的结束符号,mysql默认结束是“;”结束
建立存储过程必须在某个数据库下。
我写的存储过程:
mysql>
delimiter $
mysql> create procedure proone()
-> begin
-> declare i int;
-> set i = 0;
-> while i < 100000 do
-> insert into tb_testone (id,name,test_id) values (i,'你妹',1);
-> set i = i+1;
-> end while;
-> end $
Query OK, 0 rows affected
mysql> delimiter ;
我刚开始的时候存储过程的名称没有加()也会报错,存储过程命名规则***()
删除存储过程 : drop procedure proone;
调用存储过程: CALL proone();
以上均是本人做过测试,确定好用,本人用的mysql 是5.5的版本。
后面再加点在网上找的存储过程案例:
下面是一个最简单的MySQL存储过程,实现两个数相加
需要特别注意的是
1. declare语句只能放在存储过程的开始位置,放在后面就会报错
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL
4. delimiter是定界符的意思在结束的end后面要添加定界符
5. end if之后必须跟分号,否则语法错误
下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作
需要注意的是不能用if exists;exists可以在where后面或者在create object是使用,但是在if语句中不可以使用,只能用变通的方法。
while语句也需要注意,下面是一个while的简单应用:
可以看到while后面跟条件,条件后面要跟一个do,在while循环体结束之后需要end while并以分号结束。
在附上oracle 版的存储过程:
存储过程
CREATE OR REPLACE PROCEDURE INERT_test
IS
i number;
BEGIN
i := 1;
FOR i IN 1..10000 LOOP
insert into
test
(
ID,
NAME,
EMAIL,
TIME
)
values
('6','你妹','10236@qq.com',to_date('2012-01-06','yyyy-MM-dd'));
END LOOP;
END;
exec INERT_test
在公司我是用的oracle,我就把写的存储过程拿出来在我本地的mysql中运行,结果一运行报错:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'proone()' at line 1
一直报1064 我在网上找了很久,说需要重新定义mysql的结束符号,mysql默认结束是“;”结束
建立存储过程必须在某个数据库下。
我写的存储过程:
mysql>
delimiter $
mysql> create procedure proone()
-> begin
-> declare i int;
-> set i = 0;
-> while i < 100000 do
-> insert into tb_testone (id,name,test_id) values (i,'你妹',1);
-> set i = i+1;
-> end while;
-> end $
Query OK, 0 rows affected
mysql> delimiter ;
我刚开始的时候存储过程的名称没有加()也会报错,存储过程命名规则***()
删除存储过程 : drop procedure proone;
调用存储过程: CALL proone();
以上均是本人做过测试,确定好用,本人用的mysql 是5.5的版本。
后面再加点在网上找的存储过程案例:
下面是一个最简单的MySQL存储过程,实现两个数相加
1. declare语句只能放在存储过程的开始位置,放在后面就会报错
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL
4. delimiter是定界符的意思在结束的end后面要添加定界符
5. end if之后必须跟分号,否则语法错误
下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作
while语句也需要注意,下面是一个while的简单应用:
在附上oracle 版的存储过程:
存储过程
CREATE OR REPLACE PROCEDURE INERT_test
IS
i number;
BEGIN
i := 1;
FOR i IN 1..10000 LOOP
insert into
test
(
ID,
NAME,
EMAIL,
TIME
)
values
('6','你妹','10236@qq.com',to_date('2012-01-06','yyyy-MM-dd'));
END LOOP;
END;
exec INERT_test
相关文章推荐
- 关于mysql存储过程的definer的问题
- mysql 存储过程的问题
- mysql 存储过程的问题
- MySQL 5.1 无法创建、修改存储过程的解决(简单问题)
- mysql存储过程执行权限问题
- Mysql修改存储过程相关权限问题
- [MySQL生产环境] Innodb存储引擎内存报警问题处理过程
- Mysql存储,查询过程编码问题小结
- MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!
- mysql 存储过程中limit(#1064 You have an error in your SQL syntax)
- mysql开发存储过程中,select结果集再动态的条件下select count(*)统计返回都为0问题解决
- 关于mysql存储过程的definer的问题
- 关于mysql存储过程的definer的问题
- mysql 存储过程调用权限消失的问题,恢复权限
- MySql由于编码问题,存储过程执行出错。
- 投票系统的Mysql存储过程遇到的一些问题.
- MySQL存储过程问题集
- 利用反射传输存储过程参数,在mssql和mysql两种数据库中存在的问题
- mysql 存储过程的一些问题
- 创建存储过程错误(已解决):Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server ver