Oracle存儲過程執行update語句不報錯不生效問題

轉載連接:http://lin49940.iteye.com/blog/466626oracle


今天一個同事寫oracle 的存儲過程遇到了一個問題, 他在裏面update 操做不能完成更新的操做, 可是又不會報錯.spa

 

      如一個表 A(id, code, name, type)調試

 

      在存儲過程當中的更新操做的語句: update A x set x.type = 變量A where x.code = 變量B; code

    

      變量A 和 變量B 都定義好了, 而且都成功賦值了.blog

 

      這是一個很簡單的更新語句, 簡單到一開始對爲何發生這樣的錯誤不知所措. 其實出錯的緣由是在於 變量A 或 變量B 的定義上, 如:get

 

      creat or replace procedure p_AA博客

      isit

          t_type varchar2(20);變量

          code number(10);date

      begin

           t_type := 'AA';

           code := 100

           update A x set x.type = t_type  where x.code = code 

           commit;

      end;

 

      執行成功, 可是update 操做沒有成功, 沒有報什麼錯誤. 其實緣由在於變量code 跟 表A 中的字段code 的名字相同形成的. 看下面的:

 

      

      creat or replace procedure p_AA

      is

          t_type varchar2(20);

          t_code number(10);

      begin

           t_type := 'AA';

           t_code := 100

           update A x set x.type = t_type  where x.code = t_code ; 

           commit;

      end;

 

       執行成功, update操做也成功. 因此緣由在與變量的名稱上面(還有一個值得注意的地方, 若是code字段是char型的, 變量的長度跟字段code的長度若是不一致, 比較會不成功,'     100' 和 '100' 是不對等的, 這也是容易犯的一個錯誤, 在此記錄下)

 

       還有一個地方要注意:

      creat or replace procedure p_AA(code in number) --code做爲參數, 就算跟表A 的字段名稱同樣, 也不會有影響

      is

          t_type varchar2(20);

      begin

           t_type := 'AA';

           update A x set x.type = t_type  where x.code = code ; 

           commit;

      end;

 

      執行 execute p_AA(100) 成功, 更新操做也成功. code若是是參數, 跟表A 的字段名稱同樣, 也不會有影響.

 

 我通常變量都會加t_ 或 p_, 因此之前沒遇到這個問題, 爲了防止之後可能再次遇到這個問題和也遇到這個問題的朋友, 在此留下這篇博客做爲備忘.




小龍評論


平時不多寫Oracle的存儲過程,最近爲了處理一批異常的數據,嫌寫程序調試麻煩,就使用存儲過程,遇到了相同問題,是變量名和要更新的表字段名相同了。

不報錯,的確不方便找緣由,轉載備忘。

相關文章
相關標籤/搜索