DB_INFILE: Verifica di valori rispetto ad un file o ad una query secondaria SQL

Come:

Riferimento:

La funzione DB_INFILE paragona uno o più valori campo in un file d'origine a valori in un file di destinazione. È possibile basare il paragone su uno o più valori campo. DB_INFILE restituisce il valore 1 (TRUE) se il set dei campi d'origine corrisponde al set di valori dal file di destinazione. Altrimenti, la funzione restituisce 0 (zero, FALSE). È possibile usare DB_INFILE dove una funzione è valida in una richiesta WebFOCUS, come un in DEFINE o in una frase WHERE.

Il file di destinazione è in grado di essere qualsiasi origine dati che WebFOCUS è in grado di leggere. A seconda delle origini dati a cui è stato effettuato l'accesso e dei componenti nella richiesta, oWebFOCUS o RDBMS elaborerà il paragone tra valori.

Se Web elabora il paragone, legge l'origine dati di destinazione e crea in modo dinamico un file sequenziale contenente i valori dati di destinazione, insieme ad un sinonimo che descrive il file dati. Crea, quindi, strutture IF o WHERE in memoria con tutte le combinazioni di valori d'origine e di destinazione. Se i dati di destinazione contengono caratteri che WebFOCUS considera caratteri jolly, questi verranno trattati come caratteri jolly, a meno che il comando SET EQTEST = EXACT non sia in vigore.

Le seguenti situazioni esistono quando una origine dati relazionale si trova nel file d'origine.


Inizio pagina

x
Sintassi: Come paragonare valori campo d'origine e di destinazione con DB_INFILE
DB_INFILE(target_file, s1, t1, ... sn, tn)

dove:

target_file

Il sinonimo per il file di destinazione.

s1, ..., sn

I campi dal file di origine.

t l, ..., tn

I campi dal file di origine.

La funzione restituisce il valore 1 se un set di valori di destinazione corrisponde al set dei valori di origine. Altrimenti, la funzione restituisce uno zero (0).


Inizio pagina

x
Riferimento: Note per l'uso per DB_INFILE


Esempio: Paragone di valori di origine e di destinazione usando un file di query secondaria SQL

Questo esempio usa l'origine dati WF_RETAIL DB2.

WF_RETAIL è una origine dati campione da poter creare facendo clic con il tasto destro del mouse su una applicazione sulla console web del Reporting Server, selezionando Nuovo e quindi Campioni dal menu contestuale.

Il file SQL chiamato retail_subquery.sql contiene la seguente query secondaria che recupera codici stato specifici nelle regioni Centrali e Nord-Orientali:

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

Il file principale retail_subquery.mas segue:

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, $

Il file di accesso retail_subquery.acx segue:

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

Nota: È possibile creare un file di query secondaria SQL, insieme ad un sinonimo corrispondente, usando il comando HOLD FORMAT SQL_SCRIPT. Per ulteriori informazioni, consultare il manuale Creazione di prospetti con la lingua di WebFOCUS.

La seguente richiesta usa la funzione DB_INFILE per paragonare i nomi regione ed i codici stato rispetto ai nomi recuperati dalla query secondaria:

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

La traccia mostra che la query secondaria è stata inserita nel predicato WHERE nell'SQL generato.

 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  

L'emissione è:



Esempio: Paragone di valori di origine e di destinazione usando un file sequenziale

Il file sequenziale empvalues.ftm contiene i primi ee gli ultimi nomi dei dipendenti nel dipartimento MIS:

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

Il file principale empvalues.mas descrive i dati nel file 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, $

Nota: È possibile creare un file sequenziale, insieme ad un sinonimo corrispondente, usando il comando HOLD FORMAT SQL_SCRIPT. Per ulteriori informazioni, consultare il manuale Creazione Prospetti con il linguaggio WebFOCUSmanuale.

La seguente richiesta rispetto all'origine dati FOCUS EMPLOYEE usa la funzione DB_INFILE per paragonare i nomi dei dipendenti rispetto ai nomi memorizzati nel file 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

L'emissione è:


Inizio pagina

x
Sintassi: Come controllare l'ottimizzazione DB_INFILE

Per controllare se evitare l'ottimizzazione dell'espressione DB_INFILE, emettere il seguente comando:

SET DB_INFILE = {DEFAULT|EXPAND_ALWAYS|EXPAND_NEVER}

In una richiesta TABLE, emettere il seguente comando:

ON TABLE SET DB_INFILE  {DEFAULT|EXPAND_ALWAYS|EXPAND_NEVER}

dove:

DEFAULT

Consente a DB_INFILE di creare una query secondaria, se la sua analisi ne determina la possibilità. Questo è il valore predefinito.

EXPAND_ALWAYS

Evita che DB_INFILE crei una query secondaria. Invece, estende l'espressione in clausole IF e WHERE in memoria.

EXPAND_NEVER

Evita che DB_INFILE estenda l'espressione in clausole IF e WHERE in memoria. Invece, tenta di creare una query secondaria. Se questa azione non risulta possibile, un messaggio FOC32585 viene generato e l'elaborazione si interrompe.


WebFOCUS