Re: LEFT JOIN UNA FETCH
[ Nouvelle discussion
| Répondre au groupe
|
it.comp.as400 ]
On 15 Lug, 10:08, Danilo Cussini <c...@inwind.it> wrote:
> On 15 Lug, 09:07, MarcoF <ma...@mr-srl.it> wrote:
>
> > Non so se qualcuno ha risolto il problema delle SELECT * FROM e dei
> > campi nulli, è ben vero che sono sconsigliate ma quando devo usare più
> > del 50% dei campi o se sono molti trovo che usare la ds sia
> > infinitamente più comodo. La tecnica suggerita è quella di passare una
> > schiera d'indicatori numerici per poi interrogarli POSIZIONALMENTE, è
> > chiaro che l'inserimento di una colonna in un qualsiasi punto che non
> > sia la fine del record causa il classico errore di aliasing. L'unica
> > soluzione che ho trovato finora è estrarmi l'elenco dei campi del file
> > e trovarmi la posizione del campo a runtime, chiaramente comodo.
> > Qualcuno ha trovato soluzioni migliori?
>
> Nell' articolo "Come velocizzare le applicazioni SQL" (System i NEWS
> aprile 2005) Paul Conte consiglia di creare una view sulla tabella con
> le colonne che vogliamo usare nella SELECT:
>
> Utilizzare le viste per reperire le righe in una struttura host
> L’SQL/400 dispone di una funzione proprietaria che consente
> di specificare una struttura host (ad esempio, una struttura dati
> RPG, un elemento di gruppo Cobol), invece di un elenco di
> singole variabili host, su un’istruzione Fetch annidata in un
> programma HLL. I valori della colonna reperita vengono collocati
> nei sottocampi della struttura secondo l’ordine in cui
> vengono dichiarati i sottocampi. Sebbene si tratti di una funzione
> non standard, è in grado di semplificare la codifica.
> Inoltre una funzionalità correlata, le schiere di strutture host,
> può migliorare in modo significativo le prestazioni consentendo
> il reperimento di più righe su ciascuna operazione Fetch.
> Il modo più semplice e per dichiarare una struttura host è
> di fare riferimento a una tabella o a una vista come a un file
> esterno. È quindi possibile utilizzare “Select * …” sulla
> dichiarazione
> di cursore associata che fa riferimento alla stessa
> tabella o vista. Utilizzate insieme, queste tecniche assicurano
> che ogni volta che il programma viene compilato, la struttura
> host e le colonne del cursore coincidano perfettamente.
> Tuttavia, se è necessario reperire solo poche colonne di
> una tabella che ne contiene molte, questo approccio richiede
> alcuni aggiustamenti. Una soluzione semplice è la creazione
> di una vista che elenchi soltanto le colonne richieste. Quindi,
> si fa riferimento a questa vista nel cursore e (come file esterno)
> nella dichiarazione della struttura host. Ci si deve sempre
> ricordare che una vista SQL non determina mai che il DB2
> crei un percorso di accesso con chiave, per cui non s’incorrerà
> in un eccessivo sovraccarico del sistema per l’aggiornamento
> di troppe viste sulla tabella.
> La seguente istruzione crea una vista che può essere utilizzata
> per un reperimento equivalente a quello del suggerimento
> 1:
>
> Create View CustIdName As
> Select CustId, CustName
> From Customer
>
> La seguente istruzione crea una struttura dati RPG ILE che
> può essere utilizzata come struttura host per il reperimento dei
> dati attraverso questa vista:
>
> D CustNameR E DS ExtName( CustIDName )
>
> La dichiarazione di cursore associata diventa:
>
> Declare Cursor CustNameCsr
> Cursor For
> Select *
> From CustIdName
> Order By CustName
>
> L’istruzione Fetch sarà invece:
>
> Fetch Next
> From CustNameCsr
> Into :CustNameR
>
> Si noti che occorre includere le colonne utilizzate in una
> clausola Where del cursore nella definizione della vista oppure
> si deve utilizzare una clausola Where che faccia riferimento
> alla tabella sottostante, come in questo esempio in cui vengono
> selezionati solo i clienti di una città specifica:
>
> Declare Cursor CustCityCsr
> Cursor For
> Select *
> From CustIdName As CN
> Where CN.CustId
> In ( Select C.CustId
> From Customer As C
> Where C.CustCity = :InpCustCity )
> Order By CustName
Una domanda, se faccio una CHGPF modificando il tracciato record, la
vista si adegua automaticamente come se fosse un logico?
Ciao
MarcoF

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|