oracle預存程序中update不成功的一個原因

來源:互聯網
上載者:User

轉載自:http://lin49940.javaeye.com/blog/466626

 

今天一個同事寫oracle 的預存程序遇到了一個問題, 他在裡面update 操作不能完成更新的操作, 但是又不會報錯.

 

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

 

      在預存程序中的更新操作的語句: update A x set x.type = 變數A where x.code = 變數B; 

    

      變數A 和 變數B 都定義好了, 並且都成功賦值了.

 

      這是一個很簡單的更新語句, 簡單到一開始對為什麼發生這樣的錯誤不知所措. 其實出錯的原因是在於 變數A 或 變數B 的定義上, 如:

 

      creat or replace procedure p_AA

      is

          t_type varchar2(20);

          code number(10);

      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_, 所以以前沒遇到這個問題, 為了防止以後可能再次遇到這個問題和也遇到這個問題的朋友, 在此留下這篇部落格作為備忘.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.