connect scott/tiger
接続されました。
SQL> @?\rdbms\admin\utlchain
表が作成されました。
SQL> create table test (col1 number, col2 varchar2(4000), col3 varchar2(4000));
表が作成されました。
SQL> declare
2 cnt number;
3 begin
4 for cnt in 1..10 loop
5 insert into test values(cnt, rpad('A', 1500, 'A'), rpad('B', 1500, 'B'));
6 end loop;
7 commit;
8 end;
9 /
PL/SQLプロシージャが正常に完了しました。
SQL> analyze table test list chained rows;
表が分析されました。
SQL> select head_rowid from chained_rows;
レコードが選択されませんでした。
SQL> rem col2, col3を長くしてupdateすることで行移行を発生させる
SQL> update test set col2 = rpad('C', 3000, 'C'),
2 col3 = rpad('D', 3000, 'D') where col1 in (3, 9);
2行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> analyze table test list chained rows;
表が分析されました。
SQL> select head_rowid from chained_rows;
HEAD_ROWID
------------------
AAAXE5AAJAAAAFtAAA
AAAXE5AAJAAAAFvAAA
SQL> create table work_test as select * from test
2 where exists (select 'X' from chained_rows
3 where head_rowid = test.rowid);
表が作成されました。
SQL> delete from test where exists (select 'X' from chained_rows
2 where head_rowid = test.rowid);
2行が削除されました。
SQL> insert into test select * from work_test;
2行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> rem 古いデータが残っているので、analyze前にchained_rowsテーブルを切り捨て
SQL> truncate table chained_rows;
表が切り捨てられました。
SQL> analyze table test list chained rows;
表が分析されました。
SQL> select head_rowid from chained_rows;
レコードが選択されませんでした。
SQL> drop table work_test;
表が削除されました。
|