【YashanDB数据库】statement级别的触发器在jdbc接口调用executeBatch时被多次触发

news/2025/3/15 17:25:11/文章来源:https://www.cnblogs.com/YashanDB/p/18343491

问题现象

某客户使用jdbc接口向yashandb的表A插入数据。

表A上有一个语句级触发器,其内容为在触发时执行alter sequence操作;另外还有一个insert时的行级触发器,其内容为将每行的部分列赋给新值,这些新值要么来自sequence.nextval,要么来自于current_timestamp。

客户向表A插入90万条数据大概要花费两个半小时。

问题的风险及影响

表中插入数据慢,影响客户系统的处理效率。

问题影响的版本

22.2.14.100及以前的所有版本

23.2.1.100及以前的所有版本

问题发生原因

yashandb的代码bug,批量执行循环调用anlExecuteSingle,会多次触发语句级触发器

解决方法及规避方式

版本层面通过修改代码解决。

规避方式不使用语句级触发器

问题分析和处理过程

使用如下的ddl来验证语句级触发器被触发了多少次:

drop table trig_test;
create table trig_test(t1 number,t2 number);drop table flag;
create table flag(t number);
create or replace trigger trig_01
before insert or update on trig_test
begininsert into flag values(1);
end;
/

使用如下的java代码来触发:

//代码占位符
public static void main(String[]args){try(Connection conn = DBUtil.getConn()){conn.setAutoCommit(false);PreparedStatement ps = conn.prepareStatement("insert into trig_test(t1) values(?)");for(int i = 0; i < 100; i++){ps.setInt(1,i);ps.addBatch();}ps.executeBatch();conn.commit();}catch (Exception e){e.printStackTrace();}
}

java代码执行完成后,查看flag表中的总数据量,就可以知道触发器被触发了多少次。yashandb的实际结果:

可以看到,语句级触发器被触发了100次,这是不合理的。

经验总结

了解客户对jdbc的使用场景;

灵活使用辅助表来验证触发器的触发次数。

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

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

相关文章

Redis分布式锁防止缓存击穿

一、Nuget引入 StackExchange.Redis、DistributedLock.Redis依赖 二、使用 StackExchange.Redis 对redis操作做简单封装public class RedisHelper { private static ConnectionMultiplexer _redis; private static string _connectionString;// 静态构造函数,确保在程序启动时…

新西兰 WHV 打工度假签证 All In One

新西兰 WHV 打工度假签证 All In One New Zealand WHV (Working Holiday Visas)新西兰 WHV 打工度假签证 All In OneNew Zealand WHV (Working Holiday Visas)打工度假常见问题答疑我们为你整理一些关于新西兰打工度假签证的常见问题及解答,希望能够帮助准备中的你。我该如何申…

词云图大师(WordCloudMaster)上线Web端!

我们非常激动地宣布,词云图大师(WordCloudMaster)现已正式上线Web端!这一全新版本为用户带来了更多的便捷和功能,让创建和分享词云变得更加轻松。无论是企业、教育机构还是个人用户,都可以通过Web端实现快速生成和定制属于自己的词云图。 https://studio.wordcloudmaster…

图表全能王(ChartStudio) 上架VisionPro!

图表全能王(ChartStudio) - 终极图表制作工具!支持条形图、折线图、面积图、柱形图、条形图、饼图、玫瑰图、雷达图、牛肉图、风琴图、旭日图、桑基图等图表。 https://apps.apple.com/app/chartstudio-data-analysis/id6474099675 https://apps.apple.com/cn/app/%E5%9B%BE%E…

H5页面能否获取手机的ip

在HTML5中,出于安全和隐私的考虑,浏览器不允许网页直接访问设备的本地IP地址。不过,可以通过一些方法间接获取到用户的公网IP地址,但这些方法通常依赖于服务器端的配合。 以下是几种获取用户公网IP地址的方法: 1. 使用WebRTC WebRTC(Web Real-Time Communications)提供了…

异常类型结构图

异常类型结构图 目录异常类型结构图异常类型结构图Error和Exception的区别Error和Exception的联系Error和Exception的区别 异常类型结构图Error和Exception的区别 Error和Exception的联系继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception。 Er…

Typecho在Ubuntu 22.04上的安装部署

本文介绍了Typecho在Ubuntu 22.04上的安装和配置安装Nginx并配置访问 安装PHP并输出脚本结果 配置typechoNginx安装并验证 apt install nginx systemctl start nginx正常情况应该可以看到Nginx的欢迎页面了,如果看不到就是防火墙的问题,设置下防火墙放通即可。 安装PHP并使用…

003.flask与Mysql的连接以及增删改查

Flask与Mysql的连接以及在Flask中对数据库进行增删改查python解释器:3.8.3版本 flask==2.2.2版本 flask_sqlalchemy=3.1.1 flask_migrate==4.0.71.创建文件并且配置创建一个大文件在该文件中进行创建static(静态),templates(动态文件),app.py文件将大文件移到vscode软件中(py…

结构开发笔记(一):外壳IP防水等级与IP防水铝壳体初步选型

前言做产品,需要选型外壳结构,本篇普及IP防护等级与基础铝合金外壳。 IPXX防护等级IP等级(Ingress Protection rating)是用于描述电气设备外壳对异物(如尘埃、手指或其他固体物体)和水侵入的防护能力的国际标准。这个标准在全球范围内被广泛应用,以确保设备在各种环境条…

【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

问题现象 使用如下的sql语句创建自关联外键表: drop table self_f_key; create table self_f_key(t1 number primary key not null, t2 number); create index i_s_1 on self_f_key(t2); alter table self_f_key add constraint c_0001 foreign key(t2) references self_f_key…

《DNK210使用指南 -CanMV版 V1.0》第十七章 machine.WDT类实验

第十七章 machine.WDT类实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210…

打造高效智能的会员预约系统

打造个性化预约体验:美业、美发、按摩与医美行业的会员预约系统构建在当今这个快节奏的社会中,美容美发、按摩放松及医美整形等服务行业迎来了前所未有的发展机遇。为了提升顾客体验,增强用户粘性,并高效管理门店运营,开发一套集会员管理、预约调度、服务定制化于一体的预…