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.
Se la query secondaria risulta in una istruzione SELECT supportata da RDBMS, l'adattatore relazionale la inserisce nel predicato WHERE dell'SQL generato.
Se la query secondaria non risulta in una istruzione SELECT valida per RDBMS, l'adattatore relazionale recupera i valori di destinazione. Genera, quindi, un predicato WHERE, con un elenco di tutte le combinazioni di valori campo di origine e di destinazione.
È possibile creare un file SQL contenente una query secondaria e un sinonimo corrispondente usando il comando HOLD FORMAT SQL_SCRIPT. Per ulteriori informazioni, consultare il manuale Creazione Prospetti con il linguaggio WebFOCUS .
Se l'origine dati contiene solo quei campi riferiti da DB_INFILE come campi di destinazione, l'adattatore relazionale crea una query secondaria che recupera i valori di destinazione. Se la query secondaria risulta in una istruzione SELECT supportata da RDBMS, l'adattatore relazionale la inserisce nel predicato WHERE dell'SQL generato.
Se la query secondaria non risulta in una istruzione SELECT valida per RDBMS, l'adattatore relazionale recupera un elenco univoco dei valori di destinazione. Genera, quindi, un predicato WHERE con un elenco di tutte le combinazioni di valori campo d'origine e di destinazione.
DB_INFILE(target_file, s1, t1, ... sn, tn)
dove:
Il sinonimo per il file di destinazione.
I campi dal file di origine.
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).
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 è:
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 è:
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:
Consente a DB_INFILE di creare una query secondaria, se la sua analisi ne determina la possibilità. Questo è il valore predefinito.
Evita che DB_INFILE crei una query secondaria. Invece, estende l'espressione in clausole IF e WHERE in memoria.
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 |