在GBase南大通用数据库中,保持游标的规则

2024-01-23 19:04

本文主要是介绍在GBase南大通用数据库中,保持游标的规则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当使用事务日志记录时,GBase 8s 保证在事务结束时,可回滚在事务内所作的一切。要可 靠地处理事务,数据库服务器通常应用下列规则:

• 当事务结束时,关闭所有游标。

• 当事务结束时,释放所有锁。

对于支持事务的大多数数据库系统,用于可靠地处理事务的规则都是正常的。然而,存在 一些情况,随同游标使用标准事务是不可能的。例如,在没有事务的情况下,下列代码正 常工作。然而,当添加事务时,关闭游标与同时使用两个游标发生冲突。 

  EXEC SQL DECLARE master CURSOR FOR

 EXEC SQL DECLARE detail CURSOR FOR FOR UPDATE 

 EXEC SQL OPEN master;

 while(SQLCODE == 0)

 {

 EXEC SQL FETCH master INTO 

 if(SQLCODE == 0)

 { 

 EXEC SQL BEGIN WORK;

 EXEC SQL OPEN detail USING 

 EXEC SQL FETCH detail

 EXEC SQL UPDATE WHERE CURRENT OF detail

 EXEC SQL COMMIT WORK; 

 }

 }

 EXEC SQL CLOSE master; 

在此设计中,使用一个游标来扫描表。选择了的记录用作更新不同的表的基础。问题在于, 当将每一更新当做分开的事务处理时(如前一示例中伪代码所示),跟在 UPDATE 之后 的 COMMIT WORK 语句关闭所有游标,包括主游标。

最简单的替代方案是将 COMMIT WORK 语句和 BEGIN WORK 语句分别移到最后一个 语句和第一个语句, 这样,对整个主表的扫描就是一个大事务。将主表的扫描作为一个大 事务来处理,有时是可能的,但如果需要更新许多行,它可变得不现实。锁的数目可能太 大,并且在程序期间持有它们。 

 GBase 8s 数据库服务器支持的解决方案是将关键字 WITH HOLD 添加到主游标的声明。引 用这样的游标作为持有游标,在不在事务结束时关闭。数据库服务器仍然关闭所有其他游 标,且它仍然释放所有锁,但持有游标保持打开,直到显式地关闭它为止。 

在您尝试使用持有游标之前,您必须确保了解此处描述的锁定机制,且您还必须了解正在 并发地运行的程序。每当执行 COMMIT WORK 时,释放所有锁,包括放置在任何通过该 持有游标访存的行上的任何锁。 

对于对表的单向扫描,如果如您所愿地使用游标,则锁的移除无关紧要。然而,您可为任 何游标指定 WITH HOLD,包括更新游标和滚动游标。在您这么做之前,您必须了解该事 实的含义,即,在事务结束时,释放所有锁(包括对整个表的锁)。

这篇关于在GBase南大通用数据库中,保持游标的规则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637227

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma