<context information> ::=
'cache' = { 'on' | 'off' } // 'on' by default
| 'cache_invalidate' = { 'matching_rows' | 'matching_pk' | 'all_rows' } // 'matching_rows' by default
| 'cache_preload' = { 'true' | 'false' } // 'false' by default
| 'cache_return_query_results' = { 'true' | 'false' } // 'true' by default
| 'cache_wait_for_load' = { 'true' | 'false' } // 'false' by default
前提: 下記を作成
cache Full モードの基本ビュー
基本ビューを参照するインタフェースビュー
インタフェースビューを参照する統合ビュー
(確認事項1) インタフェースビューでキャッシュを作成できるか?
→ できない
(確認事項2) 統合ビューでキャッシュを作成できるか?
→ できる
(確認事項3) インタフェースビューでCONTEXT句によりキャッシュをバイパスできるか?
→ できる
(確認事項4) 統合ビューでCONTEXT句によりキャッシュをバイパスできるか?
→ できる
CONTEXT ('cache' = 'on')で、統合ビューがcache ONの場合、統合ビューのcacheが使用される。
CONTEXT ('cache' = 'on')で、統合ビューがcache OFFの場合、基本ビューがcache ONであればそのcacheが使用される。
CONTEXT ('cache' = 'on')で、インタフェースビューの場合、基本ビューがcache ONであればそのcacheが使用される。
CONTEXT ('cache' = 'off')の場合、基本ビューや統合ビューのcacheは使用されない。
truncate table tab1;
insert into tab1(col1) values(1);
insert into tab1(col1) values(2);
insert into tab1(col1) values(3);
select * from tab1;
-- 既存の全データを無効化してキャッシュをロードする
SELECT *
FROM db01.b_tab1
CONTEXT (
'cache' = 'on'
, 'cache_preload' = 'true'
, 'cache_invalidate' = 'all_rows'
, 'cache_wait_for_load' = 'true'
, 'cache_return_query_results' = 'false')
;
SELECT *
FROM db01.tab1
CONTEXT (
'cache' = 'on'
, 'cache_preload' = 'true'
, 'cache_invalidate' = 'all_rows'
, 'cache_wait_for_load' = 'true'
, 'cache_return_query_results' = 'false')
;
SELECT * FROM db01.b_tab1 CONTEXT ('cache' = 'on');
SELECT * FROM db01.b_tab1 CONTEXT ('cache' = 'off');
SELECT * FROM db01.i_tab1 CONTEXT ('cache' = 'on');
SELECT * FROM db01.i_tab1 CONTEXT ('cache' = 'off');
SELECT * FROM db01.tab1 CONTEXT ('cache' = 'on');
SELECT * FROM db01.tab1 CONTEXT ('cache' = 'off');