oracle批量更新数据从另一表_【案例】Oracle t-sql 更新大批量数据 更新两张大数据表案例...

天萃荷净

t-sql 更新大批量数据,有两张很大的表,写了一个存储过程处理(加工数据然后插入到一张新表中),因为一次性处理数据量很大,会导致tempdb等资源被耗尽,为了解决这个问题,每次输入两个参数,每次根据两个id的范围处理程序

1、建一张日志表

CREATE TABLE [dbo].[data_log](

[start_time] [datetime] NULL DEFAULT (getdate()),

[min_id] [int] NULL,

[max_id] [int] NULL,

[end_time] [datetime] NULL DEFAULT (getdate()

)

2、编写处理过程

CREATE PROCEDURE [dbo].[insert_more](@min_data int,@max_data int)

as

begin

--开始处理

insert into data_log values(getdate(),@min_data,@max_data,getdate())

--处理程序

INSERT INTO test_1

SELECT t1.name,

t2.name,

t1.id

FROM t_1 t1,

t_2 t2

WHERE t1.id = t2.id

AND t1.id<=@max_data

AND t1.id>@min_data

--结束处理

update data_log set end_time=getdate() where min_id=@min_data and max_id=@max_data

end

3、生成批量执行该存储过程语句

CREATE PROCEDURE [dbo].[get_list](@min_id int,@max_id int,@mode int)

AS

declare @i int

declare @max_m int

begin

set @i=0

while @i<=(@max_id-@min_id)/@mode

begin

set @max_m=@min_id+(@i+1)*@mode

if @max_m>@max_id

set@max_m=@max_id

print 'EXEC [dbo].[insert_more] @min_data = '+CAST(@min_id+@i*@mode as VARCHAR(50))+',@max_data = '+CAST(@max_m as VARCHAR(50))+';'

set @i=@i+1

END

end

利用3的过程,输入最小id,最大id,取值间隔,生成需要执行2过程的sql语句,执行这些语句完成操作,通过日志监控操作情况

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【案例】Oracle t-sql 更新大批量数据 更新两张大数据表案例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值