mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题
寫了一個很簡單的存儲過程,發現執行了,但是表的數據沒有改變,存儲過程如下:
procedure sp_upd_update_jsgl(mc in varchar2,--名稱
sm in varchar2--說明
)
is
begin
update jsgl set sm=sm where mc =mc ;
end
where后面的名稱執行的時候mc=mc并不是jsgl.mc=mc 而是和1=1一樣的參數,而參數mc和jsgl.mc產生了二義性,所以后面的參數修改成了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這個字段并沒有改變 ,存儲過程卻是執行完成了,但是考慮到set后面的語句前面是表名,后面是參數,應該不會存在問題的。其實這里還是一樣有問題,只是這個條件等同于jsgl.sm=jsgl.sm,這樣update執行成功了,但是值卻沒有被修改。
也就是說我們寫的第一個存儲過程是等于下面的一條語句
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 根本沒有起作用
所以要切記切記,存儲工程參數名一定不要和表名相同
總結
以上是生活随笔為你收集整理的mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 串口text模式安装,使用串
- 下一篇: mysql插入实现存在更新_mysql