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

  • 相关阅读:
    打开百度要用几步
    web渗透总结
    mysql之基本数据类型
    网络编程
    垃圾回收机制
    常用模块-hashlib,hmac,configparser,subprocess,xlrd,xlwt,xml,re
    常用模块-random,shutil,shevle,logging
    文件操作
    元组、字典、集合数据类型
    基本数据类型之列表类型
  • 原文地址:https://www.cnblogs.com/dirgo/p/8017367.html
Copyright © 2011-2022 走看看