Newsgroup: it.comp.software.database
Titolo: Sconnessione ad Oracle su query...

Ogni volta che faccio una query su Oracle mettendo una condizione su
un campo calcolato (da una funzione in un package) mi ritrovo
sconnesso da Oracle (il campo in questione e' COD)
SQL> r
  1  select i.matricola, i.denomina ,i.TIPO ,i.CONCESSIONE ,i.MOD_ATTR
  2  from GOI_INCR_STA i where mod_attr = 9
  3  --and (i.COD_TRONCO=1 OR i.COD_TRONCO=0)
  4  and i.COD=111
  5* AND i.MATRICOLA = ''
AND i.MATRICOLA = ''
                   *
ERRORE alla riga 5:
ORA-03113: end-of-file sul canale di comunicazione
il problema e' comparso da quando ho iniziato ad usare i dblinks,
GOI_INCR_STA e' una vista che prende i dati da un altro db ed in
particolare il campo COD e' il risultato di una funzione sul database
locale applicata ad un campo della tabella remota
nella funzione ho messo ogni tipo di controllo nel timore che fosse un
errore non gestito, ma continuo ad avere lo stesso problema...
questa in ogni caso e' la funzione:
function get_cod
(
cod_goi IN VARCHAR2
) return number
IS
p_cod_gasd number;
p_cod number := -1;
BEGIN
   if cod_goi is null then
       return -1;
   end if;
   BEGIN
      SELECT to_number(cod_goi) into p_cod_gasd from dual;
      select cod into p_cod
         from SIG_GEST_MET
         where cod_gasd = p_cod_gasd;
   exception
      when OTHERS then
         null;
   end;
   return p_cod;
END get_cod;
e questa e' la vista:
CREATE OR REPLACE VIEW GOI_INCR_STA
AS 
 select i.INTZ_COD_INTERFERENZA  matricola
 ,i.INTZ_DESC_INTERFERENZA denomina
 ,'A'	 tipo
 ,sigas.get_concessione('GOI_INTERFERENZE',i.INTZ_COD_INTERFERENZA) 
concessione
 ,sigas.get_cod_tronco(i.TROH_COD_TRONCO) cod_tronco
 ,sigas.get_cod(i.META_COD_METANODOTTO)    cod
 ,i.META_COD_METANODOTTO COD_GASD
 ,0  MOD_ATTR
 from goi.GOI_INTERFERENZE@goi_link i,
at.AT_ATTRAVERSAMENTI_FLUVIALI@goi_link f
 where i.TINE_COD_TIPO = 'ACA' 
 and f.INTZ_COD_INTERFERENZA(+) = i.INTZ_COD_INTERFERENZA
 and f.INTZ_COD_INTERFERENZA is null;

 sconnesso da Oracle (il campo in questione e' COD)
versione e piattaforme del locale e del remoto,
hai provato il dblink?
il global_name ?
felice_pago
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 il global_name ?
la situazione e' questa:
.se non metto la condizione "where cod=..." va tutto bene...
.se aggiungo la condizione (con qualsiasi valore...), mi sconnette da
Oracle
.se seleziono il campo non noto valori strani e comunque come detto
sopra la select va senza problemi (posto che non aggiungo quella
condizione...)
le versioni sono la 9.2 per windows da una parte e dall'altra
(installate dallo stesso CD); in produzione su server sara' la stessa
versione ma per UNIX
avevo avuto un problema analogo ed era dovuto praticamente ad un
errore della funzione non gestito (nel campo mi aspettavo una stringa
di un certo formato, quando non era in quel formato facevo una
substr() con dei valori non validi ed il risultato era
inaspettatamente che venivo sconensso da Oracle, corretti quei valori
pensavo di avere risolto il problema orainvce mi si sta ripresentando
in un'altra tabella dove peraltro tutti i valori sembrano corretti)


beh allora e' li', o meglio in quello che cerchi, dalla funzione, di far
passare via sql*net,
prova a mettere un when-others e catturi a monte l'errore, prima che ti
disconnetta.
mica viaggiano dei blob ?


 mica viaggiano dei blob ?
il "when others" c'e' gia' e non ci sono blob...
quello che non mi torna e' il comportamento diverso quando il campo e'
all'interno della select e quando invece e' nella where ...
io credo francamente che si tratti di un bug di Oracle, dovuto al
fatto che viene esaurita qualche zona di memoria temporanea; pero' non
vorrei andare a casaccio ed aumentare la SGA tanto per provare...
spero anche che sia un bug limitato alla versione per windows