问题描述
嗨
谢谢你给我这个机会
大表有2列,2十亿数据,不断增长,没有分区。一个插入触发器,当在列n1中插入时,它从列2中的值的序列生成nextval。
Column1具有主键,因此我们搜索Column1中是否不存在值,然后插入并最终触发column2的生成值。
在下一个实例中,再次在column1上查询表以获取column2值。
我们使用另一个ETL工具,因此我们处理的记录数量,即我们在column1中调用值存在并检索column2值的次数。
我采用的方法是在外部工具将数据插入表时删除触发器。
Insead我写存储的proc从外部ETL取column1的值,将nextval存储到变量v_sequencevalue中,插入到表值中 (在value1中,v_sequencevalue);
将v_sequencevalue分配给OUT变量并存储到最终表中,这样我就可以避免对这个大表进行额外调用以获取column2的值。
这是在多个数据处理环境中的好方法吗?
谢谢你给我这个机会
大表有2列,2十亿数据,不断增长,没有分区。一个插入触发器,当在列n1中插入时,它从列2中的值的序列生成nextval。
Column1具有主键,因此我们搜索Column1中是否不存在值,然后插入并最终触发column2的生成值。
在下一个实例中,再次在column1上查询表以获取column2值。
我们使用另一个ETL工具,因此我们处理的记录数量,即我们在column1中调用值存在并检索column2值的次数。
我采用的方法是在外部工具将数据插入表时删除触发器。
Insead我写存储的proc从外部ETL取column1的值,将nextval存储到变量v_sequencevalue中,插入到表值中 (在value1中,v_sequencevalue);
将v_sequencevalue分配给OUT变量并存储到最终表中,这样我就可以避免对这个大表进行额外调用以获取column2的值。
这是在多个数据处理环境中的好方法吗?
专家解答
最佳方法:
* 升级到12c或更高
* 将列设置为具有序列默认值或标识
* 使用返回子句获取值:
注意这仅适用于插入... 值。插入...select不支持返回子句。
在升级之前,无论您是使用触发器还是手动分配序列,都取决于您。
就我个人而言,我认为最好在你的插入中使用序列并返回这样的值:
这更清楚你的意图,并避免触发开销。但是您可能需要触发器来涵盖未提供序列值的情况。
如果这可能是您关心的问题,则可以定义仅在c2为null时触发的触发器:
* 升级到12c或更高
* 将列设置为具有序列默认值或标识
* 使用返回子句获取值:
create sequence s; create table t ( c1 int, c2 int default s.nextval ); var v number; insert into t values ( 1, default ) returning c2 into :v; print :v V ---------- 1复制
注意这仅适用于插入... 值。插入...select不支持返回子句。
在升级之前,无论您是使用触发器还是手动分配序列,都取决于您。
就我个人而言,我认为最好在你的插入中使用序列并返回这样的值:
insert into t values ( 999, s.nextval ) returning c2 into :v; print :v V ---------- 2复制
这更清楚你的意图,并避免触发开销。但是您可能需要触发器来涵盖未提供序列值的情况。
如果这可能是您关心的问题,则可以定义仅在c2为null时触发的触发器:
drop table t cascade constraints purge; create table t ( c1 int, c2 int ); create or replace trigger trig before insert on t for each row when ( new.c2 is null ) begin dbms_output.put_line ( 'Fired!' ); :new.c2 := s.nextval; end; / insert into t values ( 100, s.nextval ) returning c2 into :v; print :v V ---------- 3 insert into t ( c1 ) values ( 101 ) returning c2 into :v; Fired! print :v V ---------- 4复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
563次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
491次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
462次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
455次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
454次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
442次阅读
2025-04-22 00:20:37
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
429次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
417次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
401次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
374次阅读
2025-04-17 17:02:24