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>')
Copy

Argumente

stream_name

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.

  • Wenn es sich bei der Eingabe um einen Ansichts-Stream handelt und sich die Änderungsdatenerfassung (CDC) für die zugrunde liegenden Tabellen ändert, ist der zurückgegebene Wert TRUE. Die Funktion führt einen Vergleich mit den Versions-Metadaten für die zugrunde liegenden Tabellen und nicht für die Ansicht selbst durch. Das Ergebnis ist falsch positiv, wenn die Abfrage in der Definition der Quellansicht nicht auf die Zeilen in den zugrunde liegenden Tabellen verweist, die sich geändert haben. Die Falsch-Positiv-Rate steigt, je selektiver die Ansicht ist.

    Wenn im optionalen WHEN-Parameter einer Aufgabendefinition diese Funktion referenziert wird, bedeutet die höhere Falsch-Positiv-Rate, dass Aufgaben möglicherweise häufiger ausgeführt werden, wenn ein Ansichts-Stream leer ist, als wenn ein Tabellen-Stream die Eingabe für die Funktion ist. Durch diese Prüfung werden jedoch auch dann Aufgabenausführungen vermieden, wenn sich die zugrunde liegenden Tabellendaten nicht ändern.

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