当前位置: 首页 > news >正文

oralce创建种子表,使用存储过程生成最大值sql,考虑并发,不考虑并发的脚本,plsql调试存储过程,java调用存储过程示例代码

oralce创建种子表,使用存储过程生成最大值sql,考虑并发,不考虑并发的脚本,plsql调试存储过程,java调用存储过程示例代码

创建种子表(GY_IDENTITY_TABLE)

dmc 设置主键

-- Create table
create table GY_IDENTITY_TABLE
(bmc     VARCHAR2(30) not null,dqz     NUMBER(18),csz     INTEGER,dzz     INTEGER,tx_jlsj DATE
)
tablespace xxxSpacepctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);
-- Create/Recreate primary, unique and foreign key constraints 
alter table GY_IDENTITY_TABLEadd constraint KEY_6544287 primary key (BMC)using index tablespace xxxSpacepctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);

获取主键存储过程PROD_GET_DQZ_MAX

(有并发问题,适用于基础数据维护模块)

CREATE OR REPLACE PROCEDURE PROD_GET_DQZ_MAX(V_IDENTITY  IN VARCHAR2,
V_TABLENAME IN VARCHAR2,
V_COUNT      IN NUMBER,
V_DQZ        OUT NUMBER) AS
V_SQL VARCHAR2(500);
BEGIN
IF V_COUNT IS NULL OR V_COUNT <= 0 OR V_IDENTITY IS NULL OR
V_TABLENAME IS NULL THEN
V_DQZ := 0;
RETURN;
END IF;
V_SQL := 'SELECT DQZ FROM ' || V_IDENTITY || ' WHERE BMC = :1';
BEGIN
EXECUTE IMMEDIATE V_SQL
INTO V_DQZ
USING V_TABLENAME;
EXCEPTION
WHEN OTHERS THEN
BEGIN
V_DQZ := 0;
END;
END;
IF V_DQZ > 0 THEN
V_DQZ := V_DQZ + V_COUNT;
V_SQL := 'UPDATE ' || V_IDENTITY || ' SET DQZ = :1 WHERE BMC = :2';
ELSE
V_DQZ := V_COUNT;
V_SQL := 'INSERT INTO ' || V_IDENTITY ||
'(DQZ,BMC,CSZ,DZZ) VALUES(:1,:2,1,1)';
END IF;
SAVEPOINT POINT;
BEGIN
EXECUTE IMMEDIATE V_SQL
USING V_DQZ, V_TABLENAME;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK TO SAVEPOINT POINT;
V_DQZ := -1;
RETURN;
END;
END;
COMMIT;
RETURN;
END PROD_GET_DQZ_MAX;

调用存储过程 V_COUNT为增量,输入1,每次执行后返回当前种子值+1
在这里插入图片描述

获取主键存储过程PROD_GET_DQZ_MAX_SYNCLOCK

(加了for update锁,考虑了并发问题,适用于业务高并发模块)

CREATE OR REPLACE PROCEDURE PROD_GET_DQZ_MAX_SYNCLOCK(V_IDENTITY  IN VARCHAR2,V_TABLENAME IN VARCHAR2,V_COUNT     IN NUMBER,V_DQZ       OUT NUMBER
) ASV_SQL        VARCHAR2(500);V_CURRENT_DQZ NUMBER;
BEGIN-- 参数校验IF V_COUNT IS NULL OR V_COUNT <= 0 OR V_IDENTITY IS NULL OR V_TABLENAME IS NULL THENV_DQZ := 0;RETURN;END IF;-- 尝试锁定并读取现有记录(关键:FOR UPDATE)V_SQL := 'SELECT DQZ FROM ' || V_IDENTITY || ' WHERE BMC = :1 FOR UPDATE';BEGINEXECUTE IMMEDIATE V_SQL INTO V_CURRENT_DQZ USING V_TABLENAME;-- 行存在:更新V_DQZ := V_CURRENT_DQZ + V_COUNT;V_SQL := 'UPDATE ' || V_IDENTITY || ' SET DQZ = :1 WHERE BMC = :2';EXECUTE IMMEDIATE V_SQL USING V_DQZ, V_TABLENAME;EXCEPTIONWHEN NO_DATA_FOUND THEN-- 行不存在:尝试插入(可能因并发冲突失败)V_DQZ := V_COUNT;V_SQL := 'INSERT INTO ' || V_IDENTITY ||' (DQZ, BMC, CSZ, DZZ) VALUES (:1, :2, 1, 1)';BEGINEXECUTE IMMEDIATE V_SQL USING V_DQZ, V_TABLENAME;EXCEPTIONWHEN DUP_VAL_ON_INDEX THEN-- 并发插入冲突:说明另一个会话已插入,回退为更新-- 重新读取并更新(递归调用或重试)ROLLBACK; -- 回滚当前事务(释放隐式锁)PROD_GET_DQZ_MAX_SYNCLOCK(V_IDENTITY, V_TABLENAME, V_COUNT, V_DQZ);RETURN;END;WHEN OTHERS THENV_DQZ := -1;RAISE; -- 抛出原始错误便于排查END;COMMIT;
END PROD_GET_DQZ_MAX_SYNCLOCK;

java调用存储过程代码部分代码

PROD_GET_DQZ_MAX 存储过程前3个参数为in类型,第4个参数为out类型

 // 20190812 获取短信表主键调用HIS存储过程 beginint jlxh;conn = session_his.connection();callableStatement = conn.prepareCall("{call PROD_GET_DQZ_MAX('GY_IDENTITY','GY_QYDXXX',1,?)}");callableStatement.registerOutParameter(1, Types.DECIMAL);callableStatement.execute();// 执行jlxh = callableStatement.getInt(1);System.out.println("获取短信表主键调用HIS存储过程 返回结果为:" + jlxh);

plsql调试存储过程

右键存储过程 选择test,输入参数后点击 start debugger 启动调试,然后上面会有各种调试的按钮,
step into(步进)用的最多;
在这里插入图片描述
不过默认情况下目前调试不会进入存储过程内部,只调试调用的代码,没什么用
需要右键存储过程,选择 add debug information,再次调试就会进入存储过程函数内部
在这里插入图片描述
鼠标移到对应的变量可以看到变量值
在这里插入图片描述

http://www.dtcms.com/a/613658.html

相关文章:

  • 计算机网络技术三级知识点
  • 好用心 做网站送女友wordpress英文主题出现汉字
  • 建筑网站夜里几点维护个人网站名字大全
  • 18.HTTP协议(二)
  • 【科技补全76】新概念英语点读工具NCE-Flow、在线文件管理器copyparty 部署指北
  • 添加某些应用程序使其能够用win+r启动
  • 免费的个人网站北京工程建设监理协会网站
  • 34_FastMCP 2.x 中文文档之FastMCP客户端高级功能:处理服务端发起的用户引导详解
  • 算法公司技术面试经验总结
  • 公路建设管理办公室网站网站建设到维护
  • 美国 TikTok 带货 GMV 翻倍:专线 + 纯净住宅 IP 的流量密码
  • [智能体设计模式] 第11章:目标设定与监控模式
  • Modbus RTU 转 Modbus TCP:物联网网关实现中药产线巴赫曼与三菱PLC互联
  • 商城网站都有哪 些功能济南网签查询系统
  • Flink20 SQL 窗口函数概述
  • Java基础 | SpringBoot实现自启动的方式
  • 【ZeroRange WebRTC】UDP无序传输与丢包检测机制深度分析
  • 零基础建设网站视频教程抚州的电子商务网站建设公司
  • qt显示类控件--- Label
  • 【深度学习】基于Faster R-CNN与HRNet的豆类品种识别与分类系统
  • 专业建设网站公司东莞阿里巴巴代运营
  • 【深度学习】YOLOv10n-MAN-Faster实现包装盒flap状态识别与分类,提高生产效率
  • 网站备案需要费用吗中国容桂品牌网站建设
  • 知识图谱与中医古籍的数智化融合:中医药多智能体大模型系统的未来展望
  • wordpress全站cdn法人变更在哪个网站做公示
  • 鸿蒙开发TypeScript第六课:对象
  • 【Linux日新月异(四)】CentOS 7进程管理深度指南:掌控系统生命线
  • 如何避免新手对 instanceof 的误解?
  • 每周AI看 | OpenAI发布GPT-5.1、网易云商自研内部知识问答Agent、商汤开源空间智能大模型
  • 移动端部署噩梦终结者:动态稀疏视觉Transformer的量化实战