-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdate_rowid.sql
More file actions
65 lines (51 loc) · 1.49 KB
/
update_rowid.sql
File metadata and controls
65 lines (51 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
drop table rowid_test;
CREATE TABLE rowid_test AS
SELECT *
FROM all_objects;
ALTER TABLE rowid_test ADD (
CONSTRAINT rowid_test_pk
PRIMARY KEY (object_id)
);
SET SERVEROUTPUT ON
DECLARE
TYPE t_id_tab IS TABLE OF rowid_test.object_id%TYPE;
l_id_tab t_id_tab;
l_rowid ROWID;
l_start NUMBER;
BEGIN
SELECT object_id
BULK COLLECT INTO l_id_tab
FROM rowid_test;
-- Time the original method.
l_start := DBMS_UTILITY.get_time;
FOR i IN l_id_tab.first .. l_id_tab.last LOOP
SELECT rowid
INTO l_rowid
FROM rowid_test
WHERE object_id = l_id_tab(i)
FOR UPDATE;
UPDATE rowid_test
SET object_name = object_name
WHERE object_id = l_id_tab(i);
END LOOP;
DBMS_OUTPUT.put_line('Primary Key (' || l_id_tab.count || ' rows): ' ||
TO_CHAR( (DBMS_UTILITY.get_time - l_start) / 100
, 'FM999990.00') || ' sec.' );
-- Time the original method.
l_start := DBMS_UTILITY.get_time;
FOR i IN l_id_tab.first .. l_id_tab.last LOOP
SELECT rowid
INTO l_rowid
FROM rowid_test
WHERE object_id = l_id_tab(i)
FOR UPDATE;
UPDATE rowid_test
SET object_name = object_name
WHERE rowid = l_rowid;
END LOOP;
DBMS_OUTPUT.put_line('Rowid (' || l_id_tab.count || ' rows) : ' ||
TO_CHAR( (DBMS_UTILITY.get_time - l_start) / 100
, 'FM999990.00') || ' sec.' );
ROLLBACK;
END;
/