文件名称:自治事务-the design and analysis of algorithms
文件大小:4.17MB
文件格式:PDF
更新时间:2024-06-29 04:38:52
达梦,DM7
12.7 自治事务 DM支持通过将一个 PL/SQL语句块定义成自治事务,将该块中的 DML语句和调用程序 的事务环境隔离开。如此一来,该语句块就成为一个由其他事务启动的独立的事务,前一个 事务被称为主事务。 一个定义了自治事务的语句块称为自治例程。 在自治事务块中,主事务是挂起的;等待自治事务完成后,会话自动切换回主事务。 12.7.1 定义自治事务 自治事务仅能在 PL/SQL块中定义。定义自治事务,需要在 PL/SQL块的声明单元中添 加如下的语句: PRAGMA AUTONOMOUS_TRANSACTION; 作为自治事务的 PL/SQL块可以是下面中的一种: 1. 最顶层的(不是嵌套的)匿名 PL/SQL块 2. 函数和过程,或者在一个包里定义或者是一个独立的程序 3. 对象类型的方法 4. 数据库触发器 5. 嵌套子过程 自治事务的定义语句可以放在 PL/SQL块声明单元的任何地方,但推荐放在数据结构声 明之前。 12.7.2自治事务完整性与死锁检测 自治事务的语句块执行完成时,如果事务仍处于活动状态,则系统需要报错:“检测到 活动的自治事务处理”,并将未提交事务回滚。所以需要在语句块结束处显式添加 COMMIT 或 ROLLBACK语句。 另一方面,COMMIT和 ROLLBACK语句只是结束了活动的自治事务,但不会终止自治例 程。实际上,可以在一个自治块中使用多个 COMMIT、ROLLBACK语句。 自治事务相对主事务是完全独立的。如果自治事务需要的锁资源已经被主事务拥有,则 进行死锁报错。