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