mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题
寫了一個很簡單的存儲過程,發(fā)現(xiàn)執(zhí)行了,但是表的數(shù)據(jù)沒有改變,存儲過程如下:
procedure sp_upd_update_jsgl(mc in varchar2,--名稱
sm in varchar2--說明
)
is
begin
update jsgl set sm=sm where mc =mc ;
end
where后面的名稱執(zhí)行的時候mc=mc并不是jsgl.mc=mc 而是和1=1一樣的參數(shù),而參數(shù)mc和jsgl.mc產(chǎn)生了二義性,所以后面的參數(shù)修改成了jsgl.mc=mc
這個存儲過程就變成了這樣
procedure sp_upd_update_jsgl(mc in varchar2,--名稱
sm in varchar2--說明
)
is
begin
update jsgl set sm=sm where jsgl.mc =mc ;
end ;
但是這里的sm這個字段并沒有改變 ,存儲過程卻是執(zhí)行完成了,但是考慮到set后面的語句前面是表名,后面是參數(shù),應(yīng)該不會存在問題的。其實這里還是一樣有問題,只是這個條件等同于jsgl.sm=jsgl.sm,這樣update執(zhí)行成功了,但是值卻沒有被修改。
也就是說我們寫的第一個存儲過程是等于下面的一條語句
procedure sp_upd_update_jsgl(t_mc in varchar2,--名稱
t_sm in varchar2--說明
)
is
begin
update jsgl set jsgl.sm=jsgl.sm where t_mc =t_mc ;
end ;
這樣的語句是成功了,但是值修改的時候還是原來的值而且這個update等同于 update jsgl set jsgl.sm=jsgl.sm where 1=1是一樣的 where 根本沒有起作用
所以要切記切記,存儲工程參數(shù)名一定不要和表名相同
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 串口text模式安装,使用串
- 下一篇: 单元格格式_单元格格式的用法你知道吗~~