永发信息网

oracle表有几百万数据,我要把日期那一列修改为本年的随机一天该怎么写存储过程啊

答案:2  悬赏:40  手机版
解决时间 2021-03-01 13:13
oracle表有几百万数据,我要把日期那一列修改为本年的随机一天该怎么写存储过程啊
最佳答案
表名为test,日期字段为sysdatetime,直接执行匿名块即可
declare
cursor c_cur is select * from test
for update;
v_year varchar(20);
v_J varchar2(50);
v_logintime varchar2(50);
begin
select to_char(sysdate,'yyyy') into v_year from dual;
v_year := v_year||'-01-01';
select to_char(TO_DATE(v_year,'yyyy-mm-dd'),'J') into V_J from DUAL;
for i in c_cur loop
select to_char(TO_DATE(trunc(DBMS_RANDOM.VALUE(V_J,V_J+364)),'J'),'yyyy-mm-dd') into v_logintime from DUAL;
update test1 set sysdatetime=to_date(v_logintime,'yyyy-mm-dd')
where current of c_cur;
end loop;
commit;
end;
全部回答
declare v_id int; v_value date; v_days_on_year int; -- 定义游标. cursor c_test_main is select id, value from test_main for update; begin -- 计算本年多少天 v_days_on_year := trunc( add_months(sysdate,12), 'yyyy' ) - trunc( sysdate, 'yyyy' ); -- 打开游标. open c_test_main; -- 填充数据. fetch c_test_main into v_id, v_value; -- 假如检索到了数据,才处理. while c_test_main%found loop -- 更新数据. update test_main set value = trunc( sysdate, 'yyyy' ) + trunc(dbms_random.value(0, v_days_on_year-1)) where current of c_test_main; -- 填充下一条数据. fetch c_test_main into v_id, v_value; end loop; -- 关闭游标 close c_test_main; end; / 主要知识点: 1. trunc( sysdate, 'yyyy' ) 取本年第一天 2. trunc( add_months(sysdate,12), 'yyyy' ) 明年的第一天 3. dbms_random.value(0, v_days_on_year-1)) 获取一个 0 - 天数之间的 随机数 不过数据量几百万, 不知道是不是需要 中间 提交几次。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
重美专业足疗保健城怎么去啊,有知道地址的么
中国历史上不认命的人有哪些
:请问手的四指(除大拇指外)被机器压了,但都
两千三百字《水浒传》梗概写为论文讲述书中的
普通计算器怎么关机
爱宝贝童装屋地址在哪,我要去那里办事
肯德基贵还是必胜客贵?哪个好吃
荣昌三惠鹅府怎么去啊,有知道地址的么
古希腊是西方文明的发源地。雅典奴隶制民主政
cpu内部的构造究竟有多复杂
有人知道广纸新城吗?觉得他们的地块怎么样?
读会计专业的一般出来先做什么工作,跟会计有
鹤云陶瓷在哪里啊,我有事要去这个地方
趴办公桌上感觉呼吸困难是怎么回事
潘玮柏在演唱会上为何哭了?
推荐资讯
iphone46.1.3越狱后安装微信只能装百分之15
橙色是什么颜色
xeq玻尿酸用多久可以去痘,我用了两个月了脸
炎方乡西河村地址有知道的么?有点事想过去
陶瓷品色白好还是偏黄好
镇平县医药公司永康药店怎么去啊,有知道地址
若2的x+3次方乘3的x+3次方=6的2x-4次方,求x
工伤休假期间过节有福利吗?
荔枝订阅是什么意思
汕头市程宇贸易有限公司这个地址在什么地方,
水解 百分率 水解程度 分别是什么
勾勾是什么意思?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?