内容
行の表示・非表示を制御できる機能。
"CREATE TABLE"時に"ROW ARCHIVAL"句をつけることで、ORA_ARCHIVE_STATE列が追加され、表示・非表示を制御できるようになる。
検証
▼テスト用の表を作成 (row archivalを指定)
SQL> create table ttt (
2 n number(10),
3 v varchar2(10)
4 ) row archival;
表が作成されました。
▼テストデータの挿入
SQL> insert into ttt values (1,'abc');
1行が作成されました。
SQL> insert into ttt values (2,'def');
1行が作成されました。
SQL> insert into ttt values (3,'ghi');
1行が作成されました。
SQL> commit;
コミットが完了しました。
▼ORA_ARCHIVE_STATE列が通常は表示されないことを確認
SQL> desc ttt
名前 NULL? 型
----------- -------- ----------------------------
N NUMBER(10)
V VARCHAR2(10)
SQL> select * from ttt;
N V
-- ---
1 abc
2 def
3 ghi
▼以下のSQLでORA_ARCHIVE_STATE列が表示されることを確認
SQL> select ttt.*, ora_archive_state from ttt;
N V ORA_ARCHIVE_STATE
-- --- -----------------
1 abc 0
2 def 0
3 ghi 0
▼ORA_ARCHICE_STATEの型を確認
SQL> select column_name,data_type,data_length
2 from user_tab_cols where column_name='ORA_ARCHIVE_STATE';
COLUMN_NAME DATA_TYPE DATA_LENGTH
----------------- --------- ------------
ORA_ARCHIVE_STATE VARCHAR2 4000
▼ORA_ARCHIVE_STATE列が0の場合は表示、それ以外の値が格納されている場合は非表示になる
SQL> update ttt set ora_archive_state=1 where n=2;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> select * from ttt;
N V
-- ---
1 abc
3 ghi
▼セッションパラメータを変更することにより、非表示列を表示させることができる
SQL> ALTER SESSION SET ROW ARCHIVAL VISIBILITY=ALL;
セッションが変更されました。
SQL> select * from ttt;
N V
-- ---
1 abc
2 def
3 ghi
SQL> ALTER SESSION SET ROW ARCHIVAL VISIBILITY=ACTIVE;
セッションが変更されました。
SQL> select * from ttt;
N V
-- ---
1 abc
3 ghi
▼ORA_ARCHIVE_STATE列には、文字も格納することが可能。(非表示になる)
SQL> update ttt set ora_archive_state=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') where n=3;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> select * from ttt;
N V
-- ---
1 abc
▼ORA_ARCHIVE_STATE列の内容を確認
SQL> alter session set row archival visibility=all;
セッションが変更されました。
SQL> select ttt.*,ora_archive_state from ttt;
N V ORA_ARCHIVE_STATE
-- --- -------------------
1 abc 0
2 def 1
3 ghi 2016-08-29 23:42:59
▼ROW ARCHIVALを無効にする
SQL> alter table ttt no row archival;
表が変更されました。
SQL> select * from ttt;
N V
-- ---
1 abc
2 def
3 ghi
SQL> select ttt.*,ora_archive_state from ttt;
select ttt.*,ora_archive_state from ttt
*
行1でエラーが発生しました。:
ORA-00904: "ORA_ARCHIVE_STATE": 無効な識別子です。