存储过程快速更新大表字段
① 写了一个简单的oracle存储过程 实现表的字段更新
骚年,问题出在了你的update语句,哥表示无语。。。请睁大眼睛看:
'11' AND
② ORACLE中,写一个存储过程来更新表中的某个字段值
给你思路, 首先查出表中总数 ,保存总数, 然后定义一个当前条数,从0开始,每次调用给它加5000。update语句执行则用rownum,跟你保存的当前条数作为条件判断.
③ Oracle存储过程,更新大量数据,如何循环分批次提交
可通过以下方法:
以100条数据为例,如果海量数据可参考。
如test表中有如下数据:
sql">declare
iint;--定义变量
v_countint;--定义变量
v_loopint;--定义变量
begin
selectcount(*)intov_countfromtest;--计算表内数据总数
selectceil(v_count/10)intov_loopfromal;--计算需要循环次数
i:=1;--为i赋值
whilei<=v_looploop--循环退出条件
updatetestsetbegintime=<=10;--执行更新
commit;--提交
i:=i+1;--i依次加1
endloop;--结束循环
end;
④ ORACLE存储过程,循环插入数据后,更新数据来源表state字段
下面例子中A表是数据源,B表是插入数据目标。
create or replace procere ... ...
cursor c1 is select * from A where... ...for update of 需要更新的列;
v c1%rowtype;
begin
open c1;
loop
fetch c1 into v;
exit when c1%notfound;
insert into B... ...;
update A set 需要更新列=... ... where current of c1;
... ...
end loop;
... ...
end;
⑤ SQL存储过程更新数据
表HC_RKDMX的相关字段
YJSL OrderNO RKSL
先按OrderNO降序,得到
OrderNO RKSL YJSL
---4------5---NULL
---3------2---NULL
---2------4---NULL
---1------6---NULL
然后set @SL = 11
set YJSL =@SL -RKSL,减完为止
得到
OrderNO RKSL YJSL
---4------5----6
---3------2----4
---2------4----0
---1------6---NULL
再把最后减到为0的数变为11-(YJSL1+YJSL2)=1?
然后把剩下的不够减的NULL变0?
而且还要把得到的YJSL更新到原来的ROWID列上?得到一个6 4 1 0的列按物理地址插入?就是说倒序插入?
OrderNO RKSL YJSL
---4------5----0
---3------2----1
---2------4----4
---1------6----6
如果set @SL = 13的话
OrderNO RKSL YJSL
---4------5----8
---3------2----6
---2------4----2
---1------6---(-4) 这里(-4)变为13-(5+2+4)=2?
如果@SL不刚好的排序后的全N个RKSL的和的话怎么处理,负数和剩余的NULL全部为0?
看不懂。。是不是你算错了
应该是由@SL减去表里的RKSL等于YJSL(安OrderNO一次序小到大的顺序的计算,直到计算完为止)
OrderNO RKSL YJSL
---1------6----5
---2------4----1
---3------2----(-1)
---4------5---NULL
不知道是不是你算错了~想来想去不知道你怎么得到YJSL 6 4 1 0的唯一的可能是先降序 11-5=6 -2=4 -4=0那是6 4 0 NULL啊
囧。、。。自己本来还以为降序的
后面想来想去晕了~
其实存储过程的话很好写的,但是没弄清楚你要得到什么,怎么得到