今天一个同事写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_, 所以以前没遇到这个问题, 为了防止以后可能再次遇到这个问题和也遇到这个问题的朋友, 在此留下这篇博客作为备忘.
分享到:
相关推荐
对于存储过程的调用,"DatabaseHelper"可能会有一个通用方法,接受存储过程名和参数列表,然后根据需要添加OracleParameter对象到OracleCommand,执行存储过程,并根据需要返回结果。 在实际使用中,开发者只需实例...
此外,还可以使用OracleCommand的ExecuteNonQuery方法执行不返回结果的SQL语句,如INSERT、UPDATE和DELETE操作。如果需要执行存储过程,可以设置CommandType为StoredProcedure,并在CommandText中指定存储过程名,...
在Oracle中,你可以使用`CREATE OR REPLACE PROCEDURE`语句来定义一个新的存储过程或更新已存在的同名过程。例如,一个简单的存储过程定义如下: ```sql CREATE OR REPLACE PROCEDURE skeleton IS BEGIN NULL; END...
Oracle数据库的升级是一个复杂而关键的过程,特别是在从Oracle 9i到10g的跨越中。这个过程不仅涉及软件版本的提升,还需要考虑兼容性、性能优化和数据完整性。在这个"Oracle升级-数据库迁移(part5 update)"中,...
通过以上步骤,我们可以成功地利用SSH框架和Oracle数据库实现一个基本的CRUD应用。这个过程中,理解各组件的作用、熟练配置和使用框架、掌握数据库操作是至关重要的。在实际开发中,还需考虑异常处理、安全性、事务...
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态, 此时的现象是这条语句一直在执行,但一直没有执行成功,也没有...
Oracle 9.2.0.4 是一个较旧但仍然重要的数据库版本,尤其对于那些需要在RDHL AS 4 Update 2(可能是Red Hat Linux的一个定制版本)上运行的系统。这个安装手册提供了详细的步骤来指导用户在Linux环境中安装Oracle...
总之,《Oracle Solaris 9 - Solaris 9 Maintenance Update 2 Installation Guide》是用户成功安装和管理Oracle Solaris 9系统的重要参考资料,涵盖了从准备工作到后续维护的全过程,为用户提供了详尽的指导。
本资源“Oracle Sql基础(beginning oracle sql中文版)”旨在为初学者提供一个全面的Oracle SQL学习指南。让我们深入探讨Oracle SQL的基础知识。 一、SQL简介 SQL(结构化查询语言)是用于管理关系数据库的标准...
在“oracle测试创建表.vi”这个例子中,可能包含一个LabVIEW程序,该程序使用SQL的CREATE TABLE语句来定义新的表结构。CREATE TABLE语法如下: ```sql CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, ......
Oracle数据库是一个功能强大的企业级关系型数据库管理系统,广泛应用于各种业务场景。在Linux系统上安装Oracle,通常需要一系列依赖库和配置。RPM包是Linux发行版如Red Hat Enterprise Linux (RHEL)、CentOS或Fedora...
对于初学者来说,Oracle的学习是一个逐步深入的过程,涉及到SQL语言、数据库管理、表空间、索引、存储过程等多个方面。本实验练习将帮助你对Oracle有更深入的理解。 1. SQL基础:Oracle使用SQL(结构化查询语言)...
尽管市面上很难找到一本详尽无遗地收录所有ORA错误的书籍,但Oracle官方文档是一个不可或缺的资源,它几乎包含了所有可能遇到的ORA错误。 **从哪里可以获得包括所有ORA错误的清单?** 最可靠的方法是从Oracle官方...
确保RMAN备份过程产生的输出被记录到一个日志文件中,以便于后期检查备份是否成功,以及在出现问题时进行故障排查。 总结来说,利用Windows系统计划任务执行Oracle数据库批处理备份是一个高效且可靠的策略。通过...
可以使用 SQL Plus 工具连接到数据库,执行 INSERT、UPDATE 和 DELETE 语句,以验证数据是否已成功同步。 ### 6. 异常排查 在同步过程中,可能会出现一些异常情况,例如数据不一致、网络连接错误等。需要对这些...
Oracle提供了一个名为ODP.NET(Oracle Data Provider for .NET)的数据提供者,它允许C#应用直接与Oracle数据库交互。安装客户端后,ODP.NET将成为连接Oracle的桥梁。 1. **安装ODP.NET**: 你可以通过下载Oracle ...
总之,Oracle PL/SQL中的存储过程、函数和触发器为数据库开发提供了强大的工具,它们使得数据库不仅仅是一个数据存储的地方,更是业务逻辑的执行平台。深入理解和熟练掌握这些概念,对于任何Oracle数据库管理员或...
在这个“goldengate本机单库测试成功-oracle10g”的案例中,我们聚焦于在一个Oracle 10g数据库内部,两个不同用户之间的数据复制。通过使用GoldenGate 11.2.1版本,我们可以确保在本地环境中实现这一功能。 首先,...
Oracle SQL Developer 是一款由Oracle公司推出的强大的数据库管理工具,它为数据库管理员(DBA)、开发者以及数据分析师提供了全面的功能,以高效地管理和操作Oracle数据库。本文档将深入讲解Oracle SQL Developer的...