mysql 存儲(chǔ)過(guò)程字符串參數(shù)報(bào)錯(cuò)分析
問(wèn)題:
在調(diào)用 mysql 存儲(chǔ)過(guò)程時(shí),傳入字符串參數(shù)會(huì)出現(xiàn)“unknown column”錯(cuò)誤。而傳入整型參數(shù)時(shí),存儲(chǔ)過(guò)程運(yùn)行正常。
存儲(chǔ)過(guò)程代碼:
create procedure mypo02(in dataname varchar(10)) begin if dataname is null or dataname = "" then select * from ssd; else select * from ssd where ename like concat('%',dataname,'%'); end if; end;
登錄后復(fù)制
錯(cuò)誤信息:
Procedure execution failed 1054 - Unknown column '王小李' in 'field list'
登錄后復(fù)制
分析:
存儲(chǔ)過(guò)程代碼本身并沒有問(wèn)題。因此,問(wèn)題可能出在調(diào)用存儲(chǔ)過(guò)程時(shí)。常見的原因可能是:
- 調(diào)用代碼中傳入的參數(shù)類型不正確,導(dǎo)致實(shí)際傳入的是字符串,而存儲(chǔ)過(guò)程期望的是整型。
- 在存儲(chǔ)過(guò)程調(diào)用之前,沒有對(duì)傳入?yún)?shù)進(jìn)行類型轉(zhuǎn)換,導(dǎo)致字符串參數(shù)直接被解釋為列名,而不是作為比較值。