在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

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(