DEFQUERYTABLESERVICE
Permette di definire una query inserendo al suo interno la definizione di tabelle effettuate in un altro programma o sub esterna.
Tramite questa specifica è possibile disegnare una query, con una definizione frammentata su diversi programmi appartenenti anche a prodotti diversi, per poi completarne la sua definizione con l'introduzione di eventuali relazioni (JOIN). Si definisce una '@DEFQUERYTABLESERVICE poi le successive '@DEFQUERYTABLE relative alle tabelle in relazione e così via.
Se ne sconsiglia l'utilizzo all'interno dello stesso prodotto dove lo sviluppo è proprietario delle tabelle coinvolte, mentre è indispensabile allo sviluppo per definire query con tabelle proprietarie di altri gruppi di sviluppo. L'utilizzo della funzione, deve seguire, nell'ordine di definizione, la specifica '@DEFQUERY.
Parametri
| Parametro | Definizione | I/O | Versione traduttore | SMP | |
|---|---|---|---|---|---|
| IDQUERY | Long | ||||
| FIGLIO | |||||
| PADRE | |||||
| REL | |||||
| OBBLIGATORIA | Intero | ||||
| OPERATOREJOIN | Stringa | ||||
| NOMERELAZIONE | Stringa | ||||
| VINCOLI | |||||
| TABELLA | |||||
| TABELLAPADRE | |||||
| TABELLAFIGLIO | |||||
| ERRORE | Intero |
IDQUERY
Identificatore della query ottenuto tramite @DEFQUERY.
FIGLIO
[IDQueryService] Identificativo della query, identifica la query esterna da inserire.. Se è la prima tabella inserita nella query, il parametro FIGLIO assume la valenza di tabella principale della query. IDQueryService: variabile di tipo LONG. [AliasQueryService] Alias da assegnare alla query esterna da utilizzare per riferirsi nel codice BC. AliasQueryService: può essere una variabile di tipo stringa od una costante tra doppi apici.
PADRE
[DefinizioneTabella] Identifica la tabella padre alla quale viene aggiunta, in relazione, la tabella definita dal parametro FIGLIO.
REL
[Relazione] La presenza del parametro REL definisce la relazione, in termini di uguaglianza dei campi, tra la tabella indicata in FIGLIO[] e la tabella indicata in PADRE[]. Integra la funzionalità della specifica '@DEFQUERYREL. Il parametro REL è opzionale se:
- è indicata la relazione mediante la specifica '@DEFQUERYREL
- se non è indicato il parametro PADRE. Diversamente è obbligatorio.
OBBLIGATORIA
[FlagRelObb] Identifica se la relazione di esistenza del record è obbligatoria (non sono ammessi valori nulli): corrisponde all'applicazione della clausola INNER JOIN tra le due tabelle oggetto della relazione. Il default per la relazione è opzionale (ovvero di documentazione): corrisponde all'applicazione della clausola LEFT OUTER JOIN tra le due tabelle oggetto della relazione. Se è indicato anche il parametro OPERATOREJOIN, viene restituito errore in traduzione, in quanto il parametro OBBLIGATORIA corrisponde a OPERATOREJOIN[INNER]. Per questo motivo, il parametro OBBLIGATORIA è da considerarsi deprecato e sostituibile con OPERATOREJOIN[INNER], tranne nei casi in cui FlagRelObb sia una variabile di tipo numerico e non la costante '1' (uno). Argomento valido solamente se presente il parametro REL. FlagRelObb: variabile di tipo numerico. <tabella> Valore Descrizione 0 Relazione opzionale (LEFT OUTER JOIN) 1 Relazione obbligatoria (INNER JOIN) </tabella>
Parametro con valori ammessi, si possono utilizzare i seguenti valori:
| Valore | Descrizione |
|---|---|
0 | Relazione opzionale (LEFT OUTER JOIN) |
1 | Relazione obbligatoria (INNER JOIN) |
OPERATOREJOIN
[OperatoreJoin] Indica il tipo di JOIN, tra i valori INNER, JOIN, LEFT, RIGHT, FULL e CROSS, da applicare alle tabelle in relazione. OperatoreJoin: Variabile di tipo stringa o costante tra doppi apici. Argomento valido solamente se presente il parametro REL.
Parametro con valori ammessi, si possono utilizzare i seguenti valori:
| Valore | Descrizione |
|---|---|
INNER | Definizione operatore INNER JOIN |
JOIN | Definizione operatore INNER JOIN |
LEFT | Definizione operatore LEFT OUTER JOIN |
RIGHT | Definizione operatore RIGHT OUTER JOIN |
FULL | Definizione operatore FULL OUTER JOIN |
CROSS | Definizione operatore CROSS JOIN (utilizzabile solo su @DEFQUERYTABLE) |
NOMERELAZIONE
[NomeRelazione] Nome della relazione (codice) derivato dall'elenco relazioni previste per la tabella. Il nome della relazione è visibile in gestione descrittori o nel programma di visualizzazione dello schema del dizionario dati (BCVSQLW). Se non indicato la relazione deve essere esplicitata mediante i parametri PADRE, FIGLIO e REL. NomeRelazione: può essere una variabile di tipo stringa od una costante tra doppi apici.
VINCOLI
FlagAttivazioneProfilazione [NOPERM[FlagControlloPermessi]] Permette di attivare la profilazione avanzata sulla query e di specificare la modalità di gestione dei record esclusi dal vincolo di profilazione della tabella.
TABELLA
Nome del DFX da cui reperire le caratteristiche della tabella.
TABELLAPADRE
Nome del DFX da cui reperire le caratteristiche della tabella.
TABELLAFIGLIO
Nome del DFX da cui reperire le caratteristiche della tabella.
ERRORE
Consente al programma di intercettare e gestire l'errore restituito dalla funzione.
Utilizzare uno dei metodi GetLastError*() della classe BCContextInfo per ottenere le informazioni dell'errore.
Esempi
Definizione
DIM QueryObject[INT]
DIM serviceQueryObject[INT]
'@DEFQUERY IDQUERY[QueryObject] NOME["BCRIF_DEFQUERYTABLESERVICE_8"]
'@DEFQUERY IDQUERY[serviceQueryObject] NOME["EXTERNALQUERYDEFINITION_2"]
' Definizione della query in un sorgente esterno
' ExternalQueryDefinition(serviceQueryObject)
'@DEFQUERYTABLESERVICE IDQUERY[QueryObject] FIGLIO[QUERYSERVICE[serviceQueryObject] ALIAS["ARTICOLI"]]
'@DEFQUERYJOIN IDQUERY[QueryObject] TABELLA[BLDMARCA] TABELLAPADRE[[ARTICOLI]] _
REL[BLDMARCA.COD = [ARTICOLI].CodMarca] _
OPERATOREJOIN["INNER"]
'@DEFQUERYCOLUMN IDQUERY[QueryObject] ESPR[[ARTICOLI].CodArt AS [CodArt]] _
ESPR[[ARTICOLI].DesArt AS [DesArt]] _
ESPR[BLDMARCA.DES AS [DesMarca]]
'@DEFQUERYWHERE IDQUERY[QueryObject] ESPR[BLDMARCA.COD = "01"]
Definizione con parametro PADRE
DIM QueryObject[INT]
DIM serviceQueryObject[INT]
'@DEFQUERY IDQUERY[QueryObject] NOME["BCRIF_DEFQUERYTABLESERVICE_8"]
'@DEFQUERY IDQUERY[serviceQueryObject] NOME["EXTERNALQUERYDEFINITION_2"]
' Definizione della query in un sorgente esterno
' ExternalQueryDefinition(serviceQueryObject)
'@DEFQUERYFROM IDQUERY[QueryObject] TABELLA[BLDMARCA]
'@DEFQUERYTABLESERVICE IDQUERY[QueryObject] FIGLIO[QUERYSERVICE[serviceQueryObject] ALIAS["ARTICOLI"]] _
PADRE[BLDMARCA] REL[[ARTICOLI].CodMarca = BLDMARCA.COD]
'@DEFQUERYJOIN IDQUERY[QueryObject] TABELLA[BLDFAMIGLIA] TABELLAPADRE[[ARTICOLI]] _
REL[BLDFAMIGLIA.COD = [ARTICOLI].CodFamiglia] _
OPERATOREJOIN["INNER"]
'@DEFQUERYCOLUMN IDQUERY[QueryObject] ESPR[[ARTICOLI].CodArt AS [CodArt]] _
ESPR[[ARTICOLI].DesArt AS [DesArt]] _
ESPR[BLDMARCA.DES AS [DesMarca]] _
ESPR[BLDFAMIGLIA.DES AS [DesFamiglia]]
'@DEFQUERYWHERE IDQUERY[QueryObject] ESPR[[ARTICOLI].CodArt > "010" And [ARTICOLI].CodArt < "021"]