`
qinya06
  • 浏览: 584387 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle 过程update 不成功的一个原因

阅读更多
   今天一个同事写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死锁问题

    当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态, 此时的现象是这条语句一直在执行,但一直没有执行成功,也没有...

    c#登陆界面与Oracle数据库连接并增删改查

    首先,我们需要创建一个 Oracle 数据库连接,用于与数据库进行交互。我们可以使用 OracleClient 命名空间中的 OracleConnection 类来创建连接对象。下面是一个简单的示例代码: ```csharp string connString = ...

    oracle实验报告

    2、 定义一个为修改职工表(emp)中某职工工资的存储过程子程序,职工名作为形参,若该职工名在职工表中查找不到,就在屏幕上提示“查无此人”然后结束子程序的执行;否则若工种为MANAGER的,则工资加$1000;工种为...

    oracle数据字典制作流程

    Oracle 数据字典是指 Oracle 数据库中的元数据信息,包括表结构、字段信息、索引、视图、存储过程等。数据字典是数据库管理员和开发人员了解数据库结构和数据关系的重要工具。在本文中,我们将介绍使用 ...

    Oracle数据库的数据保护机制及应用

    验证过程中的任何一个环节不成功都会导致用户验证失败。 (2) 由外部的验证服务或操作系统和安全软件包或验证(硬件)设备在数据库外部完成验证。Oracle支持的操作系统验证有两种情况(以Windows NT为例): ① 被OS...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...

    EBS R12.1.1 For Oracle Linux R5U7

    EBS R12.1.1在oracle linux release 5 update 7上的安装全过程,包括ftp及telnet激活,照做包成功。

    ORACLE重建索引总结

    使用带有coalesce参数时重建期间不需要额外空间,它只是在重建索引时将处于同一个索引分支内的叶块拼合起来,这最大限度的减少了与查询过程中相关的潜在的加锁问题,但是,coalesce选项不能用来将一个索引转移到其他...

    Ubuntu14.04 64位 安装oracle11g 亲测步骤

    安装图形界面是为了提供一个友好的用户界面,以便更好地交互和管理系统。以下是安装图形界面的步骤: 1. 更新apt-get: sudo apt-get update 2. 安装 xinit: sudo apt-get install xinit 3. 安装环境管理器: ...

    Oraclet中的触发器

    触发器名与过程名和包的名字不一样,它是单独的名字空间,因而触发器名可以和表或过程有相同的名字,但在一个模式中触发器名不能相同。 触发器的限制 CREATE TRIGGER语句文本的字符长度不能超过32KB; 触发器...

    EBS R12.1.1 For Oracle Linux R5U7 install

    EBS R12.1.1在Oracle Linux Release 5 Update 7上的安装过程,非常详细,包括ftp及telnet激活,照做一定成功。

    oracle详解

    导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理...

    练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等

    PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...

    神通数据库-数据库快速入门.pdf

    一个数据库可以包含一个或多个命名的模式,一个模式内可以包含多个表。不同的模式中的表名可以相 同,而同一模式中的表不能同名。模式如同操作系统级的目录,但是模式不能嵌套。 用户在相应权限控制下可以访问所连接...

    SqlToolBox 1.8.2

    如果您用右键点击这个圆点,程序将弹出一个右键菜单,选择其中的项目您将可以在右边的Sql语句操作窗口中得到单表的字段信息,创建(insert),查询(select),更新(update),删除语句(delete)及建表语句...

    PL/SQL 基础.doc

    4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)...

    精髓Oralcle讲课笔记

    --分组的时候,还可以按照多个字段进行分组,两个字段不相同的为一组 56、select ename from emp where sal = (select max(sal) from emp); --求出 57、select deptno, max(sal) from emp group by deptno; --...

    数据库课程设计-飞机订票系统.doc

    1.3 开发工具 1.3.1软件定义 Oracle 11g,PowerDesigner,eclipse 1.3.2 开发环境 Windows7,Java,database 需求分析 2.1 问题陈述 设计一个飞机订票系统 要求具备如下基本功能: 1、 班机基本信息的管理;...

    asp.net知识库

    对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点的新思路 在ASP.Net中两种利用CSS实现多界面的方法 用于...

Global site tag (gtag.js) - Google Analytics