Kategorien:

Systemfunktionen (Systeminformationen)

SYSTEM$STREAM_HAS_DATA

Gibt an, ob ein angegebener Stream Datensätze vom Typ Change Data Capture (CDC) enthält.

Syntax

SYSTEM$STREAM_HAS_DATA('<stream_name>')

Argumente

Name_des_Streams

Der Name des abzufragenden Streams.

  • Beachten Sie, dass der gesamte Name in einfache Anführungszeichen eingeschlossen werden muss, einschließlich Datenbank und Schema (wenn der Name vollqualifiziert ist), d. h. '<Datenbank>.<Schema>.<Name_des_Streams>'.

  • Wenn der Streamname zwischen Groß- und Kleinschreibung unterscheidet bzw. Sonderzeichen oder Leerzeichen enthält, sind doppelte Anführungszeichen erforderlich, damit sich Groß-/Kleinschreibung und Zeichen korrekt verarbeiten lassen. Die doppelten Anführungszeichen müssen in einfache Anführungszeichen eingeschlossen werden, d. h. '"<Name_des_Streams>"'.

Nutzungshinweise

  • Diese Funktion soll bei der Definition von Aufgaben im WHEN-Ausdruck verwendet werden. Wenn der angegebene Datenstream keine Änderungsdaten enthält, überspringt die Aufgabe die aktuelle Ausführung. Diese Prüfung kann dazu beitragen, das unnötige Starten oder Fortsetzen eines Warehouses zu vermeiden. Beachten Sie jedoch, dass die Funktion so konzipiert ist, dass sie falsch-negative Werte vermeidet (d. h. Rückgabe von „false“, auch wenn der Datenstream Änderungsdaten enthält). Die Funktion garantiert jedoch nicht, dass falsch-positive Werte vermieden werden (d. h. Rückgabe von „true“, wenn der Datenstream keine Änderungsdaten enthält).

  • Diese Funktion führt einen Vergleich (diff) der Tabellenversionsmetadaten durch (zwischen dem Stream-Offset und der aktuellen Transaktionszeit), um festzustellen, ob der Stream CDC-Datensätze enthält. Wenn die DML-Aktivität für die Tabelle während dieses Zeitraums aus derselben Menge von Zeilen bestand, die eingefügt, optional aktualisiert und gelöscht wurden, um zum ursprünglichen Tabellenstatus zurückzukehren, ist es möglich, dass diese Funktion einen TRUE-Wert zurückgibt, obwohl der Stream keine CDC-Datensätze enthält.

Beispiele

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                                  |
+----------------------------------------+