日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题

發布時間:2024/7/23 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。