mysql儲存過程一例
同事給的一個儲存過程有點問題,測試發現" IF date_format(sysdate(),'%H:%i:%s') > From_Time AND date_format(sysdate(),'%H:%i:%s') < End_Time THEN"
這個語句有問題。建立如下儲存過程進行分析:
mysql> delimiter //
mysql> create procedure proc_t(in from_time time,in end_time time)
-> begin
-> IF date_format(sysdate(),'%H:%i:%s') > From_Time AND date_format(sysdat
e(),'%H:%i:%s') < End_Time THEN
-> select 'a';
-> else
-> select 'b';
-> end if;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
該儲存過程只是判斷是否滿足條件,執行結果是報錯:
mysql> call proc_t('23:00:00','23:50:00');
ERROR 1267 (HY000): Illegal mix of collations (gbk_chinese_ci,COERCIBLE) and (la
tin1_swedish_ci,NUMERIC) for operation '>'
如果按照1267錯誤去找,可能就偏離答案了。實際執行的儲存過程中有對該報錯的處理,因此結果不符合預期,但也沒有報錯。
由於輸入變數from_time和end_time都是時間型別,而比較時使用date_format(sysdate(),'%H:%i:%s')生成的是字串,不具有可比性,造成報錯。
通過time函式,將比較運算子兩邊修改為都是時間格式,就不會報錯了:
mysql> create procedure proc_t(in from_time time,in end_time time)
-> begin
-> IF time(sysdate()) > From_Time AND time(sysdate()) < End_Time THEN
-> select 'a';
-> else
-> select 'b';
-> end if;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call proc_t('23:00:00','23:59:00');
+---+
| a |
+---+
| a |
+---+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-1876503/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- mysql 儲存過程MySql儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- [MYSQL -23儲存過程]MySql儲存過程
- MYSQL儲存過程管理MySql儲存過程
- mysql儲存過程例子MySql儲存過程
- mysql的儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程
- 儲存過程中DDL錯誤一例儲存過程
- pl/sql儲存過程優化一例SQL儲存過程優化
- 【Mysql】Mysql儲存過程學習MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql儲存過程案例解析MySql儲存過程
- mysql儲存過程詳解MySql儲存過程
- mysql儲存過程的修改MySql儲存過程
- MySQL儲存過程SAVEPOINT ROLLBACK toMySql儲存過程
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql 儲存過程和事件排程MySql儲存過程事件
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- MySQL 儲存過程和函式MySql儲存過程函式
- mysql儲存過程的引數MySql儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mysql 遊標的使用(儲存過程)MySql儲存過程
- MySQL 建立儲存過程報錯MySql儲存過程
- mysql儲存過程小試牛刀MySql儲存過程
- 用PHP呼叫MySQL儲存過程PHPMySql儲存過程
- mysql儲存過程宣告順序MySql儲存過程
- c / c + + 呼叫mysql儲存過程MySql儲存過程
- mySql 儲存過程與函式MySql儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- Mysql 5.7儲存過程的學習MySql儲存過程
- MySQL--儲存過程與檢視MySql儲存過程