zoukankan      html  css  js  c++  java
  • 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_, 所以以前没遇到这个问题, 为了防止以后可能再次遇到这个问题和也遇到这个问题的朋友, 在此留下这篇博客作为备忘.




    小龙评论


    平时很少写Oracle的存储过程,最近为了处理一批异常的数据,嫌写程序调试麻烦,就使用存储过程,遇到了相同问题,是变量名和要更新的表字段名相同了。

    不报错,的确不方便找原因,转载备忘。

  • 相关阅读:
    改进昨天的电梯电梯问题
    电梯调度
    结对开发四---实现环状二维数组求最大子数组的和
    结对开发五--对一千个数long型的一维数组求最大子数组的和
    结对开发四------求一维无头数组最大子数组的和
    结对开发3--电梯调度问题需求分析
    SQL基础题
    类和对象(课后题)
    再战文件(小甲鱼课后题)python超级入门
    快来集合!python超级入门笔记
  • 原文地址:https://www.cnblogs.com/wenlong/p/5255664.html
Copyright © 2011-2022 走看看