DB_INFILE: Como Testar Valores em Relação a um Arquivo ou uma Subconsulta SQL

Como:

Referência:

A função DB_INFILE compara um ou mais valores de campo em um arquivo fonte com valores em um arquivo alvo. A comparação pode ser baseada em um ou mais valores de campo. DB_INFILE exibe o valor 1 (TRUE) caso o conjunto de campos fonte corresponda a um conjunto de valores do arquivo alvo. Caso contrário, a função retorna 0 (zero, FALSE). DB_INFILE pode ser utilizado onde uma função é valida em uma solicitação WebFOCUS, como em um DEFINE ou uma frase WHERE.

O arquivo alvo pode ser qualquer fonte de dados que o WebFOCUS pode ler. Dependendo das fontes de dados acessadas e dos componentes na solicitação, o WebFOCUS ou o RDBMS irá processar a comparação de valores.

Se o WebFOCUS processar a comparação, ele irá ler a fonte de dados alvo e criar, de forma dinâmica, um arquivo sequencial que contém os valores de dados alvo juntamente com um sinônimo descrevendo o arquivo de dados. Em seguida, a ferramenta construirá estruturas IF ou WHERE na memória com todas as combinações de valores fonte e alvo. Se os dados alvo contiverem caracteres que o WebFOCUS considera curinga, o programa irá tratá-los como caracteres curingas a não ser que o comando SET EQTEST = EXACT esteja em vigor.

As situações a seguir existem quando uma fonte de dados relacionais for o arquivo fonte:


Topo da página

x
Sintaxe: Como Compare Valores de Campo Fonte e Alvo com a Função DB_INFILE
DB_INFILE(target_file, s1, t1, ... sn, tn)

onde:

target_file

É o sinônimo do arquivo alvo.

s1, ..., sn

São os campo do arquivo fonte.

t1, ..., tn

São os campo do arquivo alvo.

A função exibe o valor 1 caso um conjunto de valores alvo correspondam ao conjunto de valores fonte. Caso contrário, a função exibirá um zero (0).


Topo da página

x
Referência: Observações sobre o Uso para a Função DB_INFILE


Exemplo: Como Comparar Valores Fonte e Alvo Utilizando um Arquivo de Subconsulta SQL

Este exemplo utiliza a fonte de dados WF_RETAIL DB2.

WF_RETAIL é uma fonte de dados de exemplo que você pode criar clicando com o botão direito em um aplicativo no Console da Web do Servidor de Relatórios selecionando Novo e, em seguida, Exemplos no menu de contexto.

O arquivo SQL com nome retail_subquery.sql contém a seguinte subconsulta que obtém códigos de estado especificados nas regiões Central e Nordeste:

SELECT  MAX(T11.REGION), MAX(T11.STATECODE)  FROM wrd_dim_geography T11 WHERE (T11.STATECODE IN('AR', 'IA', 'KS', 'KY', 'WY', 'CT', 'MA', 'NJ', 'NY', 'RI')) AND (T11.REGION IN('Central', 'NorthEast'))  GROUP BY T11.REGION, T11.STATECODE

O Arquivo Master retail_subquery.mas se encontra a seguir:

FILENAME=RETAIL_SUBQUERY, SUFFIX=DB2     , $
  SEGMENT=RETAIL_SUBQUERY, SEGTYPE=S0, $
    FIELDNAME=REGION, ALIAS=E01, USAGE=A15V, ACTUAL=A15V,
      MISSING=ON, $
    FIELDNAME=STATECODE, ALIAS=E02, USAGE=A2, ACTUAL=A2,
      MISSING=ON, $

O Arquivo de Acesso retail_subquery.acx se encontra a seguir:

SEGNAME=RETAIL_SUBQUERY, CONNECTION=CON1, DATASET=RETAIL_SUBQUERY.SQL, $

Observação: Você pode criar um arquivo de subconsulta SQL juntamente com um sinônimo correspondente utilizando o comando HOLD FORMAT SQL_SCRIPT. Para obter mais informações, consulte o manual Como Criar Relatórios com a Linguagem do WebFOCUS.

A seguinte solicitação utiliza a função DB_INFILE para comparar os nomes de regiões e códigos de estado com os nomes obtidos pela subconsulta:

TABLE FILE WF_RETAIL
SUM REVENUE
BY REGION
BY STATECODE
WHERE DB_INFILE(RETAIL_SUBQUERY, REGION, REGION, STATECODE, STATECODE)
ON TABLE SET PAGE NOPAGE
END

O rastro mostra que a subconsulta foi inserida no predicado WHERE no SQL gerado:

 SELECT   
  T11."REGION",  
  T11."STATECODE",  
   SUM(T1."Revenue")  
   FROM   
  wrd_fact_sales T1,  
  wrd_dim_customer T5,  
  wrd_dim_geography T11  
   WHERE   
  (T5."ID_CUSTOMER" = T1."ID_CUSTOMER") AND   
  (T11."ID_GEOGRAPHY" = T5."ID_GEOGRAPHY") AND  
  ((T11."REGION", T11."STATECODE") IN (SELECT  MAX(T11.REGION),  
  MAX(T11.STATECODE)  FROM wrd_dim_geography T11 WHERE  
  (T11.STATECODE IN('AR', 'IA', 'KS', 'KY', 'WY', 'CT', 'MA',  
  'NJ', 'NY', 'RI')) AND (T11.REGION IN('Central', 'NorthEast'))   
  GROUP BY T11.REGION, T11.STATECODE))  
   GROUP BY   
  T11."REGION",  
  T11."STATECODE  "
   ORDER BY   
  T11."REGION",  
  T11."STATECODE  "
   FOR FETCH ONLY; 
END  

A saída é:



Exemplo: Como Comparar os Valores Fonte e Alvo Utilizando um Arquivo Sequencial

O arquivo sequencial empvalues.ftm contém o último e primeiro nomes dos funcionários no departamento MIS:

SMITH           MARY        JONES           DIANE       MCCOY           JOHN        BLACKWOOD       ROSEMARIE   GREENSPAN       MARY        CROSS           BARBARA     

O Arquivo Master empvalues.mas descreve os dados contidos no arquivo empvalues.ftm

FILENAME=EMPVALUES, SUFFIX=FIX     , IOTYPE=BINARY, $
  SEGMENT=EMPVALUE, SEGTYPE=S0, $
    FIELDNAME=LN, ALIAS=E01, USAGE=A15, ACTUAL=A16, $
    FIELDNAME=FN, ALIAS=E02, USAGE=A10, ACTUAL=A12, $

Observação: Você pode criar um arquivo de sequencial juntamente com um sinônimo correspondente utilizando o comando HOLD FORMAT SQL_SCRIPT. Para obter mais informações, consulte o manual Como criar relatórios com a Linguagem WebFOCUS manual.

A solicitação a seguir,em relação à fonte de dados FOCUS EMPLOYEE, utiliza a função DB_INFILE para comparar os nomes de funcionários com os nomes armazenados no arquivo empvalues.ftm:

FILEDEF EMPVALUES DISK baseapp/empvalues.ftm
TABLE FILE EMPLOYEE
SUM CURR_SAL
BY LAST_NAME BY FIRST_NAME
WHERE DB_INFILE(EMPVALUES, LAST_NAME, LN, FIRST_NAME, FN)
ON TABLE SET PAGE NOPAGE
END

A saída é:


Topo da página

x
Sintaxe: Como Controlar Otimização de DB_INFILE

Para controlar a otimização da expressão DB_INFILE, emita o comando a seguir:

SET DB_INFILE = {DEFAULT|EXPAND_ALWAYS|EXPAND_NEVER}

Em uma solicitação TABLE, emita o comando a seguir:

ON TABLE SET DB_INFILE  {DEFAULT|EXPAND_ALWAYS|EXPAND_NEVER}

onde:

Padrão

Permite que DB_INFILE crie uma subconsulta caso sua análise determine que seja possível. Este é o valor padrão.

EXPAND_ALWAYS

Impede que DB_INFILE crie uma subconsulta. Em vez disso, expande a expressão em cláusulas IF e WHERE na memória.

EXPAND_NEVER

Impede que DB_INFILE expanda a expressão em cláusulas IF e WHERE na memória. Em vez disso, tenta criar uma subconsulta. Caso não seja possível, uma mensagem FOC32585 é gerada e o processo é interrompido.


Information Builders