Categorias:

Funções do sistema (Informações do sistema)

SYSTEM$STREAM_HAS_DATA

Indica se um fluxo especificado contém registros de captura de dados de alterações (CDC).

Sintaxe

SYSTEM$STREAM_HAS_DATA('<stream_name>')
Copy

Argumentos

stream_name

O nome do fluxo a ser consultado.

  • Observe que o nome completo deve ser incluído entre aspas simples, incluindo o banco de dados e o esquema (se o nome for totalmente qualificado), ou seja, '<bd>.<esquema>.<nome_fluxo>'.

  • Se o nome do fluxo diferenciar letras maiúsculas e minúsculas ou incluir quaisquer caracteres ou espaços especiais, as aspas duplas são necessárias para processar o caso/caracteres. As aspas duplas devem ser incluídas dentro das aspas simples, ou seja, '"<nome_fluxo>"'.

Notas de uso

  • Esta função destina-se a ser utilizada na expressão WHEN na definição das tarefas. Se o fluxo especificado não contiver dados de alteração, a tarefa pula a execução atual. Esta verificação pode ajudar a evitar iniciar ou retomar um warehouse desnecessariamente. No entanto, note que esta função foi concebida para evitar falsos negativos (ou seja, retornar um valor falso mesmo quando o fluxo contém dados de alteração); no entanto, a função não é garantida para evitar falsos positivos (ou seja, retornar um valor verdadeiro quando o fluxo não contém dados de alteração).

  • Esta função realiza uma comparação dos metadados da versão de tabela (entre o offset do fluxo e o tempo transacional atual) para determinar se o fluxo contém registros CDC. Se a atividade de DML para a tabela durante esse período consistiu em inserir, opcionalmente atualizar e excluir o mesmo conjunto de linhas, retornando ao estado original da tabela, então é possível que esta função possa retornar um valor TRUE mesmo que o fluxo não contenha registros CDC.

  • Quando a entrada é um fluxo de exibição, o valor retornado é TRUE quando a captura de dados de alteração (CDC) registra a mudança de tabelas subjacentes. A função realiza uma comparação nos metadados da versão para as tabelas subjacentes e não para a exibição em si. O resultado é um falso positivo quando a consulta na definição da exibição de origem não faz referência às linhas nas tabelas subjacentes que foram alteradas. A taxa de falsos positivos aumenta à medida que uma exibição se torna mais seletiva.

    Quando esta função é referenciada no parâmetro opcional WHEN em uma definição de tarefa, a maior taxa de falsos positivos significa que as tarefas podem ser executadas quando um fluxo de exibição está vazio mais frequentemente do que quando um fluxo de tabela é a entrada para a função. No entanto, esta verificação ainda evita a execução de tarefas quando não há alteração nos dados da tabela subjacente.

Exemplos

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