昨天自己在進行開發測試的時候,編寫mysql 的一個存儲過程 ,代碼是比較簡單的
就是根據名稱查詢對應的數據并返回
DELIMITER //
CREATE PROCEDURE proc1(name int)
BEGIN
select * from table_name where name=name;
END
//
大家可能注意到了一個變量名稱 name 因為我的數據庫中的一個字段的名稱也是name
按照傳統編程語言傳遞參數的特點查詢應該是沒有問題的,但是因為是sql ,結果我的查詢時顯示全部的數據,按照這樣的話
mysql 中的解釋一樣是這樣的,在sql 中 因為name=name 永遠為真 所以是全部的數據。
一般在mysql 中用戶的變量使用@字符開始。
所以在開發的過程中還是按照規范開發會比較好,會減少很多看似怪異的顯現。
這種情況在oracel 中也是存在的,但是在sql serve 中就不會了,因為sql serve 的用戶變量必須使用@ 符號。
附oracle 的測試:
對于oracle 中的sql 測試代碼如下:
declare
name VARCHAR2(20);
V_id VARCHAR2(20);
begin
name:='class13';
select id into V_id from firstclass where name=name;
dbms_output.put_line(V_id);
end;
提示的錯誤如下:
原因與mysql 是類似的。
修改一下名稱即可。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com