妈吖,看过这个大厂的oracle主键自增,我的信心暴增!信创,国产数据库也能行。

创作不易 只因热爱!!

热衷分享,一起成长!

“你的鼓励就是我努力付出的动力”


1.数据库oracle自增主键字段思维导图

在Oracle数据库中,可以通过创建序列(SEQUENCE)来实现自增功能。但也可以不在数据库中实现,而是通过程序中实现,以下是XX大厂的应用端对oracle表主键字段的类似自增,并可一次多增的方法分析,后附代码。
刚使用时觉得挺有学习意义,分享一下,通过程序实现表主键的自增,适合​任意数据库。
国产数据库,也是可以用此方法通过程序实现。

OK
成功
失败
失败
不存在结果
存在
成功
存在
不存在
三次失败后
失败1
失败2
失败3
失败
成功
参数判断
更新表table
更新成功,
再看结果记录
判断是否
存在记录
插入新记录
回滚,返回-1
提交, 获取新记录返回
继续更新表
最多三次
插入新记录
回滚,返回, 重新更新表

2.oracle表主键字段自增使用说明

  • 表SYS_XTCS主键自增1 ,每次程序调用,当前主键值autovalue=func_getmax(sqlhis,‘SYS_XTCS’,1)

获取主键后写入表 insert into SYS_XTCS values(autovalue,…)

  • 表SYS_XTCS主键增加多行,如9,每次程序调用,当前主键值autovalue=func_getmax(sqlhis,‘SYS_XTCS’,9)

获取主键后写入表 insert all …或游标循环写入…

如下,首列表名称BMC,当前主键值DQZ,数据库连接名 transaction
首列表名称BMC

3.通过程序实现ora表主键自增代码示例

代码是powerbuilder写的

// func_getmax()
//  功能:取最大值, 错误时返回:-1
// 传参N,      类型        , 参数名
// 传参1,      transaction , aoTransaction
// 传参2,      string      , asTableName
// 传参3,      integer     , aiNeedCountDecimal{0} llValue
Long llCount, llRetryIf IsNull(aiNeedCount) Or aiNeedCount < 1 ThenReturn -1
End IfProcess_Begin:
func_begin_transaction(aoTransaction) 
UPDATE SYS_MAX SET DQZ = DQZ + :aiNeedCount WHERE BMC = :asTableName USING aoTransaction;If aoTransaction.SQLCode <> 0 Then // update失败,判断是否存在记录SELECT COUNT(*) INTO :llCount FROM SYS_MAX WHERE BMC = :asTableName USING aoTransaction;If llCount > 0 Then              // 记录存在继续update(最多三次)llRetry ++If llRetry >= 3 ThenGoto Process_ErrorElsefunc_rollback_transaction(aoTransaction)Goto Process_BeginEnd If  Else                              // 记录不存在则插入新记录INSERT INTO SYS_MAX(BMC, DQZ) VALUES (:asTableName, :aiNeedCount) USING aoTransaction;If aoTransaction.SQLCode <> 0 Then Goto Process_ErrorEnd IfllValue = aiNeedCountGoto Process_SuccessEnd If  
ElseSELECT COUNT(*) INTO :llCount FROM SYS_MAX WHERE BMC = :asTableName USING aoTransaction;If IsNull(llCount) Or llCount <= 0 Then // 记录不存在则插入新记录INSERT INTO SYS_MAX(BMC, DQZ) VALUES (:asTableName,:aiNeedCount) USING aoTransaction;If aoTransaction.SQLCode <> 0 Then Goto Process_ErrorEnd IfllValue = aiNeedCountGoto Process_SuccessEnd If  
End IfSetNull(llValue)
SELECT DQZ INTO :llValue FROM SYS_MAX WHERE BMC = :asTableName USING aoTransaction;If IsNull(llValue) Or llValue < aiNeedCount ThenGoto Process_Error
End IfProcess_Success:
func_commit_transaction(aoTransaction)Return llValue - aiNeedCount + 1Process_Error:
func_rollback_transaction(aoTransaction)Return -1
但行好事,莫问前程!

end

**你好呀,我是一个医信行业工程师,喜欢学习,喜欢搞机,喜欢各种捣,也会持续分享,如果喜欢我,那就关注我吧!**

往期精彩:

作者|医信工程师随笔|Carltiger_github

图片|网络|侵删

关注我,我们共同成长

“你的鼓励就是我分享的动力”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Stable Diffusion】(基础篇六)—— embedding

embedding 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 除了大模型和VAE之外…

RewardBench:Evaluating Reward Models for Language Modeling

Leaderboard&#xff1a; https://hf.co/spaces/allenai/reward-bench Code&#xff1a; https://github.com/allenai/reward-bench Dataset&#xff1a; https://hf.co/datasets/allenai/reward-bench 在人类偏好的强化学习&#xff08;RLHF&#xff09;过程中&#xff0c;奖励…

Centos7重装系统保留数据安装方式记录

一、选择手动配置分区 二、选择/分区以后&#xff0c;输入挂载点/&#xff0c;选择标准分区&#xff0c;勾选重新格式化&#xff0c;单击更新设置。这样重装的时候&#xff0c;就格式化/分区内的数据。 三、选择swap分区&#xff0c;勾选重新格式化&#xff0c;单击更新设置…

【数据分享】2024年省市县行政区划数据(最新版本/带审图号/官方发布/免费获取/Shp格式)

省份\地级市\区县这三个级别的行政边界矢量&#xff08;shp格式&#xff09;数据是我们在各项研究中最常用的数据。在我们发表学术论文的时候&#xff0c;一旦涉及到行政边界&#xff0c;在期刊的投稿指南中都明确要求必须使用自然资源地图技术审查中心发布的标准地图底图&…

基于JSP的在线教育资源管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA/Eclipse、Navicat 系统展示 首页 管理员界面 学生界面 教师界面 摘…

【React】详解 Redux 状态管理

文章目录 一、Redux 的基本概念1. 什么是 Redux&#xff1f;2. Redux 的三大原则 二、Redux 的核心组件1. Store2. Action3. Reducer 三、Redux 的使用流程1. 安装 Redux 及其 React 绑定2. 创建 Action3. 创建 Reducer4. 创建 Store5. 在 React 应用中使用 Store6. 连接 React…

Docker安装oracle19c

文章目录 Docker安装oracle19c1. 拉取镜像2. 创建目录并赋权3. 构建容器并启动4. 查看日志5. 登录docker容器里面6. 登录sqlplus 创建PDB用户7. 查看show pdbs7. 切换数据库8. 创建用户9. 授权10. 使用navicat连接11. 参考和感谢 Docker安装oracle19c 1. 拉取镜像 docker pul…

深入分析 Android ContentProvider (八)

文章目录 深入分析 Android ContentProvider (八)ContentProvider 高级使用及最佳实践案例分析&#xff08;续&#xff09;1. 深入了解跨应用数据共享示例&#xff1a;跨应用数据共享的完整实现1. 定义权限2. 定义 ContentProvider3. ContentProvider 实现 2. 实践案例&#xf…

操作系统中存储系统简介 虚拟内存、内存管理、分页、保护

文章目录 存储器的层次结构存储器之间的实际价格和性能差距存储器的层次关系 虚拟内存简述主要概念虚拟内存的优势 内存管理内存碎片 内存分页页面置换算法TLB加速分页软件TLB管理针对大内存的页管理技术三个重要的缓存能力 内存保护总结 存储器的层次结构 对于存储器&#xff…

用Python打造精彩动画与视频.2.1 Python基础语法概述

2.1 Python基础语法概述 Python作为一门功能强大且易于学习的编程语言&#xff0c;其基础语法简单直观&#xff0c;非常适合初学者入门。这一节将带你了解Python的基本语法规则&#xff0c;为后续制作动画和视频打下坚实的基础。 1. 变量与数据类型 Python的变量不需要提前声…

OCC 创建倒角

目录 一、简介 二、示例 1、使用BRepFilletAPI_MakeFillet 创建倒角 2、使用BRepFilletAPI_MakeChamfer创建斜面倒角 三、总结 一、简介 倒角指的是把工件的棱角切削成一定斜面的加工。倒角是为了去除零件上因机加工产生的毛刺,也为了便于零件装配,一般在零件端部做出…

达梦数据库归档介绍

一、什么是归档 数据库归档是一种数据管理策略&#xff0c;它涉及将旧的、不经常访问的数据移动到一个单独的存储设备&#xff0c;以便在需要时可以检索&#xff0c;同时保持数据库的性能和效率。 归档的主要目标是为了释放数据库中的空间&#xff0c;以便更有效地利用高性能…

【C++高阶数据结构】红黑树:全面剖析与深度学习

目录 &#x1f680; 前言&#xff1a;红黑树与AVL树的比较一&#xff1a; &#x1f525; 红黑树的概念二&#xff1a; &#x1f525; 红黑树的性质 三&#xff1a; &#x1f525; 红黑树节点的定义和结构&#x1f680; 3.1 基本元素&#x1f680; 3.2 节点颜色&#x1f680; 3.…

MongoDB聚合操作详解

文章目录 聚合操作聚合管道管道&#xff08;Pipeline&#xff09;和阶段&#xff08;Stage&#xff09;常用的聚合阶段运算符准备数据集&#xff0c;执行脚本$project$match$count$group$unwind$limit$skip$sort$lookup聚合操作案例1聚合操作案例2 聚合优化执行顺序内存排序 整…

Hugo部署到Vercel踩大坑——全是XML文件?

问题描述 部署到Vercel全都是XML文件 Vercel是著名PAAS服务&#xff0c;相比于 Github Pages&#xff0c;其中国大陆可直接访问&#xff0c;因此尝试把Hugo站点发布到vercel中&#xff0c;部署后遇到问题&#xff0c;所有页面都为xml文件&#xff0c;如下所示&#xff1a; Ve…

AIGC-VDM -Video Diffusion Models论文解读

homepage&#xff1a;https://video-diffusion.github.io/ paper:https://arxiv.org/pdf/2204.03458 参考:https://zhuanlan.zhihu.com/p/585009571 视频生成方面的扩散模型 论文Video Diffusion Models精读&#xff0c;笔者会多多更新AIGC相关知识&#xff01;点个关注吧&…

SpringCloud Alibaba 微服务(二):Nacos

目录 前言 一、什么是Nacos&#xff1f; 二、Nacos的主要功能 服务发现与注册 配置管理 服务健康监控 集群模式 三、安装Nacos 下载Nacos 初始化Nacos 单机模式 集群模式 访问Nacos 四、服务注册 新建子工程 引入Nacos依赖 配置application.yml 创建启动类 …

内网穿透的应用-中文版个人知识库Trilium笔记本地安装结合内网穿透远程协作

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

Linux基础复习(五)

前言 本文介绍了Linux常用命令&#xff0c;接Linux基础复习&#xff08;四&#xff09; 一、常用命令 命令通配符 在Linux中&#xff0c;命令通配符&#xff08;也称为通配符模式或通配符表达式&#xff09;是用来匹配文件名或其他字符串的一种特殊字符。这些通配符可以帮助…

深入解析 GZIP 压缩传输:优化网络性能的利器

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…