编写mysql存储过程时,最好设置SQL_MODE
2013-07-01 17:55
609 查看
编写mysql存储过程时,最好设置SQL_MODE,比如下面的例子:
看上去是正确的,比如调用:
mysql> select test(126,1);
+-------------+
| test(126,1) |
+-------------+
| 127 |
+-------------+
1 row in set (0.00 sec)
但:
mysql> select test(127,1);
+-------------+
| test(127,1) |
+-------------+
| 127 |
+-------------+
1 row in set, 1 warning (0.00 sec)
就错误了,因为用了tinyint,
所以,强烈建议编译存储过程时,设置sql_mode,比如:
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';
然后当再运行存储过程时,可以有提示:
mysql> select test(127,1);
ERROR 1264 (22003): Out of range value for column 'v_result' at row 1
DELIMITER // CREATE FUNCTION test(p_first TINYINT, p_second TINYINT) RETURNS TINYINT BEGIN DECLARE v_result TINYINT; SET v_result := p_first + p_second; RETURN v_result; END// DELIMITER ;
看上去是正确的,比如调用:
mysql> select test(126,1);
+-------------+
| test(126,1) |
+-------------+
| 127 |
+-------------+
1 row in set (0.00 sec)
但:
mysql> select test(127,1);
+-------------+
| test(127,1) |
+-------------+
| 127 |
+-------------+
1 row in set, 1 warning (0.00 sec)
就错误了,因为用了tinyint,
所以,强烈建议编译存储过程时,设置sql_mode,比如:
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';
然后当再运行存储过程时,可以有提示:
mysql> select test(127,1);
ERROR 1264 (22003): Out of range value for column 'v_result' at row 1
相关文章推荐
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySQL存储过程中的sql_mode问题
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySql带参数的存储过程编写(动态执行SQL语句)
- SQL在存储过程编写经验和优化措施
- MySQL在创建存储过程的时候,语法正确却提示You have an error in your SQL syntax
- MySQL不容忽视SQL_MODE的设置
- MySQL的sql_mode解析与设置,sql文件导入报错解决
- Atitit mysql存储过程编写指南
- MYSQL中的存储过程编写实例
- 编写CLR存储过程中使用SqlDataRecord
- MySQL sql_mode设置
- SQL的存储过程的理解与应用(以mysql为例)
- mysql的sql_mode合理设置
- mysql查看存储过程和执行sql脚本文件到数据库中
- PL/SQL中编写Oracle数据库分页的存储过程
- SQL 学习笔记<六> MySQL存储过程基础
- sql语句那些事儿—mysql 又见存储过程
- mysql,dos下执行SQL语句创建存储过程出错ERROR 1064 (42000):