- カテゴリ:
システム関数 (システム情報)
SYSTEM$STREAM_HAS_DATA¶
指定されたストリームに変更データキャプチャ(CDC)レコードが含まれているかどうかを示します。
構文¶
SYSTEM$STREAM_HAS_DATA('<stream_name>')
引数¶
stream_name
クエリするストリームの名前です。
データベースとスキーマ(名前が完全修飾されている場合)を含む、名前全体を一重引用符で囲む必要があります。つまり、
'<データベース>.<スキーマ>.<ストリーム名>'
。ストリーム名で大文字と小文字が区別されるか、特殊文字やスペースが含まれる場合、大文字と小文字の処理には二重引用符が必要です。二重引用符は、一重引用符で囲む必要があります。例:
'"<ストリーム名>"'
使用上の注意¶
この関数は、タスクの定義の WHEN 式で使用することを目的としています。指定されたストリームに変更データが含まれていない場合、タスクは現在の実行をスキップします。このチェックは、ウェアハウスを不必要に開始または再開することを回避するのに役立ちます。ただし、この関数はフォールスネガティブ(つまり、ストリームに変更データが含まれている場合でもfalse値を返す)を回避するように設計されています。しかし、この関数は、誤検知の回避を保証するものでは ありません (つまり、ストリームに変更データが含まれていない場合にtrue値を返す)。
この関数は、テーブルバージョンメタデータの差分(ストリームオフセットと現在のトランザクション時間の間)を実行して、ストリームに CDC の記録が含まれているかどうかを判断します。その期間中のテーブルの DML アクティビティが、挿入、オプションで更新、削除される同じ行セットで構成され、元のテーブル状態に戻った場合、ストリームに CDC 記録が含まれていない場合でも、この関数は TRUE 値を返す可能性があります。
入力がビューストリームの場合、 基になるテーブル の変更に対する変更データキャプチャ(CDC)が記録すると、戻り値は
TRUE
になります。この関数は、ビュー自体ではなく、基になるテーブルのバージョンメタデータに対して差分を実行します。ソースビュー定義のクエリが、変更された基になるテーブルの行を参照していない場合、結果は誤検知になります。ビューがより選択的になるにつれて、誤検知の割合が増加します。この関数がタスク定義のオプションの
WHEN
パラメーターで参照されている場合、誤検知率が高いということは、テーブルストリームが関数の入力である場合よりも、ビューストリームが空の場合にタスクが実行される可能性があることを意味します。ただし、このチェックでは、基になるテーブルデータに変更がない場合でも、タスクの実行は回避されます。
例¶
create table MYTABLE1 (id int); create table MYTABLE2(id int); create stream MYSTREAM on table MYTABLE1; insert into MYTABLE1 values (1); -- returns true because the stream contains change tracking information select system$stream_has_data('MYSTREAM'); +----------------------------------------+ | SYSTEM$STREAM_HAS_DATA('MYSTREAM') | |----------------------------------------| | True | +----------------------------------------+ -- consume the stream begin; insert into MYTABLE2 select id from MYSTREAM; commit; -- returns false because the stream was consumed select system$stream_has_data('MYSTREAM'); +----------------------------------------+ | SYSTEM$STREAM_HAS_DATA('MYSTREAM') | |----------------------------------------| | False | +----------------------------------------+