Catégories :

Fonctions système (Informations système)

SYSTEM$STREAM_HAS_DATA

Indique si un flux spécifié contient des enregistrements de capture de données modifiées (CDC).

Syntaxe

SYSTEM$STREAM_HAS_DATA('<stream_name>')
Copy

Arguments

stream_name

Le nom du flux à interroger.

  • Notez que le nom complet doit être placé entre guillemets simples, y compris la base de données et le schéma (si le nom est complètement qualifié), c’est-à-dire '<bd>.<schéma>.<nom_flux>'.

  • Si le nom du flux est sensible à la casse ou inclut des caractères spéciaux ou des espaces, des guillemets doubles sont nécessaires pour traiter la casse/les caractères. Les guillemets doubles doivent être placés entre guillemets simples, c’est-à-dire '"<nom_flux>"'.

Notes sur l’utilisation

  • Cette fonction est destinée à être utilisée dans l’expression WHEN dans la définition des tâches. Si le flux spécifié ne contient pas de données de modification, la tâche saute l’exécution en cours. Cette vérification peut permettre d’éviter de démarrer ou de reprendre un entrepôt inutilement. Cependant, il faut noter que la fonction est conçue pour éviter les faux négatifs (c’est-à-dire renvoyer une fausse valeur même lorsque le flux contient des données de modification) ; cependant, la fonction ne garantit pas d’éviter les faux positifs (c’est-à-dire renvoyer une valeur vraie lorsque le flux ne contient pas de données de modification).

  • Cette fonction effectue un diff des métadonnées de version de table (entre le décalage de flux et l’heure de transaction actuelle) pour déterminer si le flux contient des enregistrements CDC. Si l’activité DML de la table au cours de cette période était constituée du même ensemble de lignes insérées, éventuellement mises à jour et supprimées et renvoyant à l’état de la table d’origine, il est alors possible que cette fonction renvoie une valeur TRUE alors que le flux ne contient aucun enregistrement CDC.

  • Lorsque l’entrée est un flux de vues, la valeur renvoyée est TRUE lorsque les enregistrements de capture de données de modification (CDC) pour les tables sous-jacentes changent. La fonction effectue une comparaison sur les métadonnées de version des tables sous-jacentes plutôt que sur la vue elle-même. Le résultat est un faux positif lorsque la requête dans la définition de la vue source ne fait pas référence aux lignes des tables sous-jacentes qui ont été modifiées. Le taux de faux positifs augmente à mesure qu’une vue devient plus sélective.

    Lorsque cette fonction est référencée dans le paramètre facultatif WHEN d’une définition de tâche, le taux de faux positifs plus élevé signifie que les tâches peuvent s’exécuter lorsqu’un flux de vues est vide plus souvent que lorsqu’un flux de tables est l’entrée de la fonction. Toutefois, cette vérification permet d’éviter l’exécution de tâches lorsqu’il n’y a pas de changement dans les données de la table sous-jacente.

Exemples

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