Oracle数据库为了数据的完整性的嵌套事务调用的研究

oracle|数据|数据库

为了保护数据的完整性我们用了很多的方法,比如数据表的主键约束、外

键约束、触发器等等,我们今天讨论的就是在处理数据直接的事务的时

候,保存数据的完整性,比如,我在一个存储过程中Proc_SaveBill保存一

张单据,调用一个函数Func_GenerateCode来生成一个单据的编号,假如我

的这个函数是从一个存有最大编号的表中取出的并且把编号加一,大家可

能会想象的可能产生的问题,就是如果我在Proc_SaveBill中的保存之前通

过Func_GenerateCode得到一个编号,如果后面的保存不成功,怎么办是不

是就丢了一个编号,因为我调用一次Func_GenerateCode就会增加一个编号

的,那么为了使我们的数据完整不至于丢单,就的使用事务的会滚,现在

又有问题了,存储过程会会滚到函数中嘛!答案是,如果函数中有事务或

有commit语句,那么是会滚不了的,否则可以会滚,因为事务是会滚到上

一个committ或rollback之后的所有事物。所以我在这里说明是为了提醒大

家考虑事务的嵌套回滚的一些方法。但是在存储过程调用存储过程中,如

果被调用的存储过程执行没有错误,那么很遗憾是会滚不了的。为了解决

这个问题Oracle中用自治事务来处理上述出现的问题,在存储过程的is\as

后面声明PRAGMA AUTONOMOUS_TRANSACTION; --自治事务防止嵌套提交,使

事务在自己的事务区内提交或回滚不会影响其他的事务。

今天在这里就说这些,当然这些是比较基础的,给初学者提个醒!

时间: 2024-08-03 17:30:25

Oracle数据库为了数据的完整性的嵌套事务调用的研究的相关文章

winform中用datagirdview给oracle数据库添加数据怎么得到没有提那家成功的值

问题描述 winform中用datagirdview给oracle数据库添加数据怎么得到没有成功的值,并且在一个新的datgirdview中显示,麻烦说详细点 解决方案 解决方案二:意思就是一个个form中有两个datagirdview,其中一个要显示没有添加成功的值,怎么才能得到没有添加成功的值解决方案三:可以创建一个DataTabledtFail=newDataTale(); 在执行插入操作时,插入失败的添加到dtFail把dtFail作为新的DataGridView的数据源

从SQL Server数据库转到Oracle数据库的数据脚本处理

在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的数据库,数据结构一般来说,语法都遵循了SQL92的标准,或者我们根据不同的PowerDesigner文件进行生成对应的结构脚本即可,但是实际数据的脚本我们就需要进行一定的处理,以及文本的替换处理了,本文结合Notepad++的文本正则表达式替换,实现一些如日期较为特殊的数据脚本调整,把它从SQL S

探讨ORACLE数据库的数据导入方法

oracle|数据|数据库 前言每个数据库管理员都会面临数据导入的问题,这有可能发生在数据库的新老移植过程中,或者是在数据库崩溃后的恢复重建过程中,还有可能是在创建测试数据库的模拟环境过程中,总之作为一名合格的数据库管理员,你应该做好接受各种数据导入请求的技术储备,同时还要尽量满足人本能的对导入速度的苛求.本文仅针对 Oracle 数据库所提供的加速数据导入的各种特性和技术进行探讨,其中的一些方法也可以转化应用于其他数据库.以下七种数据导入方法哪个最适用需要针对具体情况具体分析,我也附带列举了影

一起ORACLE数据库中数据查询结果不一致问题的排查过程

一.问题描述 在某软件开发项目中,需要在ORACLE数据库中建立十张类型相同的员工信息表tb_employeeinfo0~tb_employeeinfo9,并建立向这十张表中插入数据的存储过程.ORACLE数据库安装在Linux操作系统下. 为了操作上的方便性,开发人员在PL/SQL Developer软件(ORACLE数据库开发软件)上实现了建表和建存储过程的操作.之后,开发人员利用SQL语句在在PL/SQL Developer软件上实现了向某个数据表中插入数据的操作.利用select语句查询

Oracle 数据库 临时数据的处理方法_oracle

如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据.对于这些临时数据,Oracle数据库是如何处理的呢? 通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内.在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据.但是这个分区的容量是有限的.当这个分区的大小不足以容纳排序后所产生的记录时,数据库系统就会将临时数据存放到临时表空间中.这就是临时表空间的来历.看起来好像这个临时表空间是

整理Oracle数据库中数据查询优化的一些关键点_oracle

数据库最基本的任务是存储.管理数据,而终端用户唯一能看到的数据库特性就是其性能:数据库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序.从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大.查阅新闻. 查看文件. 查询统计信息等.因此,数据库查询操作的效率是影响一个应用系统响应时间的关键因素.随着一个应用系统中数据的动态增长,数据量变大,数据库查询效率就会有所降低,应用系统的响应速度也随之减慢,尤其对于海量数据的管理和查询问题就更加突出,Oracle查询

Oracle 数据库导出数据泵(EXPDP)文件的保存位置

数据泵是服务器端工具,导出的文件是放在数据库所在的服务器上,当然我们知道可以通过directory目录对象来控制.目录对象默认有四个级别,当然是有优先级顺序的,优先级从上往下 1.每个文件单独的指定具体的目录 2.expdp导出时,指定的目录参数 3.用户定义的环境变量DATA_PUMP_DIR指定的目录 4.默认的目录对象DATA_PUMP_DIR 当然了对于oracle11g R2来说,又引入了一个可选项,我们就当是5 5.DATA_PUMP_DIR_SCHEMA_NAME目录 一.默认的目

oracle数据库删除数据Delete语句和Truncate语句的使用比较_oracle

当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍. 一.delete语句 (1)有条件删除 语法格式:delete [from] table_name [where condition]; 如:删除users表中的userid为'001'的数据:delete from users where userid='001'; (2)无条件删除整个表数据 语法格式:delete table_name; 如:删除user

教你高效删除Oracle数据库中的重复数据

重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等. 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样.Oracle数据库重复数据删除技术有如下优势:更大的备份容量.数据能得到持续验证.有更高的数据恢复服务水平.方便实现备份数据的容灾. 一.删除部分字段重复数据 先来谈谈如何查询重复的数据吧. 下面语句可以查询出那些数据是重复的: select 字段1,字段2,count(*)