Re: LEFT JOIN UNA FETCH
[ Nouvelle discussion
| Répondre au groupe
|
it.comp.as400 ]
MarcoF ha scritto:
> On 14 Lug, 21:57, "Stefano P." <procs...@pinzillacchere.yahoo.it>
> wrote:
>
>>>>> Come faccio a gestirlo sulla fetch?
>>>>>
>>> COALESCE(campo1, <valore default>) no?
>>>
>> Sono "due cose diverse":
>> se non vuoi assolutamente avere il campo nullo allora usi "Coalesce" e
>> passa la paura, non importa quale interfaccia stai usando (SQLi,
>> RunSqlScript, odbc etc. etc.);
>> se invece vuoi usare l'sql "embedded" (soprattutto con statement
>> dinamici, noti solo a tempo di esecuzione) allora devi dare la
>> possibilità al programma di gestire i nulli e la soluzione è quella
>> suggerita da Danilo, cioè la schiera di indicatori di campo nullo.
>>
>> Saluti
>> Stefano P.
>>
>> --
>> "Niuna impresa, per minima che sia,
>> può avere cominciamento e fine senza queste tre cose:
>> e cioè senza sapere, senza potere, senza con amor volere"
>> [Anonimo fiorentino, XIV sec.]
>>
>> (togliere le "pinzillacchere" dall'indirizzo email ;-)
>>
>
> --Stefano ha scritto --
> se invece vuoi usare l'sql "embedded" (soprattutto con statement
> dinamici, noti solo a tempo di esecuzione) allora devi dare la
> possibilità al programma di gestire i nulli e la soluzione è quella
> suggerita da Danilo, cioè la schiera di indicatori di campo nullo.
> --
>
> Trovo che obbligarci a questa soluzione (so che IBM non ascolta questa
> lista, ma il Common si) sia la cosa più fetente cha abbia mai visto da
> parte Ibm. IL supporto generale sui campi nulli è una cosa a dir poco
> obrobriosa per l'SQLRPG, un po' meglio per l'RPG.
> 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?
>
> Grazie e scusate lo sfogo.
> MarcoF
>
Io per questo problema ho fatto cosi' (non sara' molto bello ma funziona):
D nomecampo S 128A VaryIng
D nomi S Dim(200) Like(nomecampo)
D SkNull S 3I 0 Dim(200)
.......... // Estrazione campi ad inizio programma
Exec Sql
Declare Sqlcur cursor for
Select column_name
From Syscolumns
Where TABLE_NAME = '***MIOFILE***' And
TABLE_SCHEMA = '***MIALIBRERIA***'
Order By ORDINAL_POSITION;
Exec Sql
Open Sqlcur4f;
Dow 1 = 1;
Exec Sql
Fetch Sqlcur4f into :nomecampo;
If sqlcode <> 0;
Leave;
EndIf;
cx += 1;
nomi(cx) = nomecampo;
EndDo;
Exec Sql
Close Sqlcur4f;
.......
// Lettura dati
If sknull(%Lookup('***CAMPODAUTILIZZARE***':nomi)) < 0;
.........
Else;
........
EndIf;
Mauro Romeo

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