暂无图片
Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?
我来答
分享
暂无图片 匿名用户
Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?

Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Zixin Huo

在Oracle中,如果需要在truncate和insert之间保证查询不会查到空,可以考虑使用数据库事务。

可以在一个事务中执行truncate和insert操作,这样如果查询在该事务结束之前进行,将会看到truncate之前的数据,而不会看到空数据。在事务结束之后,所有数据都已经被成功插入,查询将看到完整的数据集。

例如,以下是一个示例代码,以保证查询不会查到空:

BEGIN -- 开始事务 BEGIN -- 执行truncate操作 TRUNCATE TABLE mytable; -- 执行insert操作 INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2'); INSERT INTO mytable (column1, column2) VALUES ('value3', 'value4'); -- 可以插入更多数据 END; -- 提交事务 COMMIT; END;
复制

上面示例中,truncate和insert操作被包含在BEGIN和END块之间,这些块被组合成一个事务。所以在这个事务中,所有操作都将被作为一个原子操作执行,如果有任何一个操作失败,整个事务将被回滚。

暂无图片 评论
暂无图片 有用 0
打赏 0
DarkAthena
2023-04-23
chatgpt不靠谱,truncate会自动提交的
Zixin Huo
答主
2023-04-24
是的,truncate 操作会自动提交,那是因为 truncate 操作会释放表上的所有锁,并将表的存储空间归零,所以才导致的无法回滚。 如果需要在 truncate 和 insert 操作之间进行回滚操作,可以用事务来控制。
Thomas

truncate执行了不是隐式提交了吗?例如:TRUNCATE 10:00---10:05,INSERT 10:05--10:20,那么在10:00--10:05期间查询,表应该被锁了,查不了吧?而在10:05--10:20期间发起的查询,查不出记录。也正常啊。所以感觉这个和是否有TRUNCATE无关,而和之后批量插入的耗时有关。 

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
进入oracle容器后执行exp命令,导出a.dmp的备份文件,当删除之前备份,多次备份a.dmp,linux环境找不到a.dmp
回答 1
已采纳
oracle容器指的是docker容器的话,a.dmp还在docke内,你需要将其dockercp到Linux文件系统。例如:从容器59拷贝到文件系统dockercpe3fed7f659:/var/l
Oracle,同一张表,两个字段a和b,a插入或更新值时,想要实时同步给b,怎么实现?
回答 2
已采纳
方法一:对两列同时赋值或更新insertintotab1(a,b)values(1,1);updatetab1seta1,b1where…方法二:重新定义列b,将其创建为虚拟列altertableta
Oracle Exadata X5-2一体机如何关机及注意事项
回答 1
参考官方文档:ShutDownLogintothefirstdatabaseserverasroot.ChangetotheOneCommanddirectorycd/opt/oracle.Suppo
11g备份恢复restore过程报错
回答 2
找到原因了,在备份完成之前生成的控制文件,所以报错提示在找老的备份
linux rman 备份集 到win下还原会有坏块,linux 端 validate database 检测,又检测不到坏块,这是为什么?
回答 3
源端是哪,目标端是哪。考虑传输、操作系统编码等情况
AWR分析报告问题求助:CPU爆满,有没有大佬帮忙看看是什么原因导致的,谢谢
回答 3
已采纳
和上述分析的结论差不多,就是这个等待时间;dbcpuhightopsqlevent从这里可以看到cpu有两个方面的问题,一个当然是SQL执行性能导致的,另一个是可能遇到资源管理器导致限制了sql的执行
什么是反射、序列化、反序列化?事务有几种级别?
回答 2
已采纳
反射是在程序运行时动态访问DDL的一种方式。序列化是将对象对二进制、XML等方式直接向文件的存储。反序列化是将存储到文件的对象取出的过程。事务的级别的三种:页面级、应用程序级、数据库级。
Oracle在什么情况一个高水位1M都不到的表, 全表扫面会跑7个G的逻辑读?
回答 1
也许你看到的是这个表,但是表中有blob等,他存储在其他segment。
Oracle中,19c gi+11g db是否可行呢?有没有这样做过或者有成熟的方案可以分享一下吗
回答 2
已采纳
可以这么做,但生产还是建议把db升级到19c.19cGI11DB几个月前搭过一套要准备升级的环境,OS:Linuxone719cGi19cDBsoft11gDBsoft11gDBinstance(注意
oracle undo表空间无法回收
回答 1
undo表空间内部由多个自动管理的rollback segment组成, 你说的这种情况, 就是有的rollback segment在表空间的很高的高水位上(d