mysql存储过程1267_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)
總結
以上是生活随笔為你收集整理的mysql存储过程1267_mysql存储过程一例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scrapy mysql 报错_scra
- 下一篇: windows+mysql+解压版_Wi