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儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mySql 儲存過程與函式MySql儲存過程函式
- MySQL 儲存過程和函式MySql儲存過程函式
- mysql儲存過程的引數MySql儲存過程
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL儲存過程和函式MySql儲存過程函式
- MySQL儲存過程 (即函式)MySql儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- Mysql 5.7儲存過程的學習MySql儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL 儲存過程進行切換表MySql儲存過程
- [MySQL光速入門]015 聊聊儲存過程MySql儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- MySQL全面瓦解16:儲存過程相關MySql儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- Mysql儲存過程基礎(案例+程式碼)MySql儲存過程
- Mysql儲存過程中使用多遊標MySql儲存過程
- MySQL-09-mysql 儲存過程入門介紹MySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程