日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

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