複数のテーブルからデータを選択していますが、それらのテーブルで最大の「タイムスタンプ」を取得する必要もあります。カスタムキャッシュコントロールを作成するためにそれが必要になります。
tbl_name tbl_surname
id | name id | surname
--------- ------------
0 | John 0 | Doe
1 | Jane 1 | Tully
... ...
私は次のクエリを持っています:
SELECT name, surname FROM tbl_name, tbl_surname WHERE tbl_name.id = tbl_surname.id
結果セットに次の情報を追加する必要があります。
SELECT MAX(ora_rowscn) FROM (SELECT ora_rowscn FROM tbl_name
UNION ALL
SELECT ora_rowscn FROM tbl_surname);
UNIONを使用しようとしましたが、エラー(単一グループのデータではなく、グループの混合)などが発生し、ユニオンを使用できない理由がわかります。
キャッシュ管理のためにDBから取得した現在のスナップショットのタイムスタンプが必要なため、これを2つの呼び出しに分割したくありません。また、selectとMAXの呼び出しの間で、DBが変更される可能性があります。
これが私が望む結果です:
John | Doe | 123456
Jane | Tully | 123456
ここで、123456は、テーブルtbl_nameおよびtbl_surnameの最後の変更(挿入、更新、削除)のおおよその時刻です。
DBへの読み取り専用アクセス権を持っているため、トリガー、ストアドプロシージャ、追加のテーブルなどを作成できません。
提案をありがとう。
編集:値*ora_rowscn*は行のブロックごとに割り当てられます。したがって、1つのテーブルでは、この値は行ごとに異なる可能性があります。クエリに関係する両方の(すべての)テーブルからの最大値が必要です。