- カテゴリ:
システム関数 (システム情報)
SYSTEM$STREAM_HAS_DATA¶
指定されたストリームに変更データキャプチャ(CDC)レコードが含まれているかどうかを示します。
構文¶
SYSTEM$STREAM_HAS_DATA('<stream_name>')
引数¶
ストリーム名
クエリするストリームの名前です。
データベースとスキーマ(名前が完全修飾されている場合)を含む、名前全体を一重引用符で囲む必要があります。つまり、
'<データベース>.<スキーマ>.<ストリーム名>'
。ストリーム名で大文字と小文字が区別されるか、特殊文字やスペースが含まれる場合、大文字と小文字の処理には二重引用符が必要です。二重引用符は、一重引用符で囲む必要があります。例:
'"<ストリーム名>"'
使用上の注意¶
この関数は、タスクの定義の WHEN 式で使用することを目的としています。指定されたストリームに変更データが含まれていない場合、タスクは現在の実行をスキップします。このチェックは、ウェアハウスを不必要に開始または再開することを回避するのに役立ちます。ただし、この関数はフォールスネガティブ(つまり、ストリームに変更データが含まれている場合でもfalse値を返す)を回避するように設計されています。しかし、この関数は、誤検知の回避を保証するものでは ありません (つまり、ストリームに変更データが含まれていない場合にtrue値を返す)。
この関数は、テーブルバージョンメタデータの差分(ストリームオフセットと現在のトランザクション時間の間)を実行して、ストリームに CDC の記録が含まれているかどうかを判断します。その期間中のテーブルの DML アクティビティが、挿入、オプションで更新、削除される同じ行セットで構成され、元のテーブル状態に戻った場合、ストリームに CDC レコードが含まれていない場合でも、この関数は TRUE 値を返す可能性があります。
例¶
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 | +----------------------------------------+