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

Arguments

nom_flux

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.

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