Oracle存储过程,更新大量数据,如何循环分批次提交?

Oracle存储过程,更新大量数据,如何循环分批次提交?,第1张

可通过以下方法:

以100条数据为例,如果海量数据可参考。

如test表中有如下数据:

现要将begintime改成当前时间,每10条提交一次。

可用如下存储过程:

declare 

i int--定义变量

v_count int--定义变量

v_loop int--定义变量

begin

 select count(*) into v_count from test--计算表内数据总数

 select ceil(v_count/10) into v_loop from dual--计算需要循环次数

 i:=1--为i赋值

 while i<=v_loop loop--循环退出条件

   update test set begintime=sysdate where begintime is null and rownum<=10--执行更新

   commit--提交

   i:=i+1--i依次加1

 end loop--结束循环

end

哥们,不用循环吧?再说用循环也不能解决吧,循环你的值怎么赋?你怎么知道下个记录该更新成什么?

通过to_char(to_date(logintime,'yy-mm-dd'),'yyyy-mm-dd')试试可不可转换,没环境没法试,不行的话用instr函数,一句update就行了,不过我现在没时间写代码,给你个思路

instr((logintime,'-',1)可以取出第一个-的位置,然后通过substr(logintime,1,instr((logintime,'-',1)-1)取出第一个-前面的部分,就是年,20||就行了,然后再用instr(logintime,'-',2)

--这个是第2个-的位置,知道第1、2个-的位置后还是通过substr取出第1个-和第2个-之间的字符,就是月,case when一下如果是1位就补个0,。。。。依次类推,麻烦是麻烦点,但是比较通用,能适应各种情况,不过日期的话应该有规律,应该能根据规律简化不少,你自己琢磨吧.

如果你非要用循环可通过rowid这个伪列,即定义一个参数做计数用,循环一次加1,直到等于max(rowid)为止,不过我实在想不出用循环怎么弄,期待高手。。。

*** 作步骤如下:

准备数据:在excel中构造出需要的数据

2.将excel中的数据另存为文本文件(有制表符分隔的)

3.将新保存到文本文件中的数据导入到pl*sql中

在pl*sql中选择tools-->text

importer,在出现的窗口中选择"Data

from

Textfile",然后再选择"Open

data

file",

在d出的文件选择框中选中保存有数据的文本文件,此时将会看到data

from

textfile中显示将要导入的数据

4.在configuration中进行如下配置

注:如果不将"Name

in

header"勾选上会导致字段名也当做记录被导入到数据库中,从而导致数据错误

5.点击data

to

oracle,选择将要导入数据的表,并在fields中将文本中的字段与表中的字段进行关联

6.点击import按钮进行导入

7.查看导入的数据

OK,至此数据导入成功。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9998163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存