|
|
听你的,反正我要更新回来,
[php]
DECLARE
pa_num NUMBER;
v_part DBA_TAB_PARTITIONS.PARTITION_NAME%TYPE;
CURSOR c0 IS
select PARTITION_NAME
from DBA_TAB_PARTITIONS A
where table_name = 'SM_CALLRECORD'
AND SUBSTR(A.PARTITION_NAME, 3, 8) = '20041002'; --只是一个分区
CURSOR c1 IS
SELECT rowid t_rowid FROM SM_CALLRECORD PARTITION(P_20041002); --直接把这个分区写出来,不用参数传递,呵呵,不会写啊。
v_c0 C0%ROWTYPE;
BEGIN
--FOR v_c0 IN c0 LOOP
FOR v_c1 IN C1 LOOP
pa_num := 1;
UPDATE SM_CALLRECORD
SET CALLTIME = to_char((to_date(calltime, 'yyyymmddhh24miss') +
8 / 24),
'yyyymmddhh24miss')
WHERE rowid = v_c1.t_rowid;
pa_num := pa_num + 1;
IF pa_num >= 100000 THEN
--issue commit per 10W records
commit;
pa_num := 1;
END IF;
END LOOP;
commit; --must be have more one commit command
--END LOOP;
END;
[/php]
一看上次是2890秒,这次要36分钟吧。
本来直接想这样更新算了的:
[php]
UPDATE /*+ PARALLEL(N,2) */ SM_CALLRECORD PARTITION(P_20041002)
SET CALLTIME = to_char((to_date(calltime, 'yyyymmddhh24miss') + 8 / 24),
'yyyymmddhh24miss');
[/php] |
|