• [转]oracle存储过程中update不成功的一个原因


    原文地址:http://lin49940.iteye.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_, 所以以前没遇到这个问题, 为了防止以后可能再次遇到这个问题和也遇到这个问题的朋友, 在此留下这篇博客作为备忘.

  • 相关阅读:
    Apollo配置中心环境搭建(Linux)
    SpringBoot整合Swagger2
    DevExpress ASP.NET v18.2新功能详解(四)
    UI控件Telerik UI for WinForms发布R1 2019|附下载
    DevExpress WinForms使用教程:Data Grid
    开发框架DevExtreme全新发布v18.2.6|附下载
    DevExpress ASP.NET v18.2新功能详解(三)
    .NET界面控件DevExpress全新发布v18.2.6|附下载
    DevExpress WinForms使用教程:图表控件
    VCL界面控件DevExpress VCL Controls发布v18.2.4|附下载
  • 原文地址:https://www.cnblogs.com/dirgo/p/8017367.html
Copyright © 2020-2023  润新知