View Full Version : [Oracle] cursor
texerasmo
03-01-2008, 10:55
Ciao a tutti un domanda semplice.
In oracle definisco il numero max di cursori aperti.
Che nel mio appplicativo corrispondono a oggetto resulset.
Ora ho risolto aumentando il numero dei cursori su oracle.
Volevo capire meglio
Se io ho un tabella di 100 righe e ho definito un cursore di 90 su oracle.
se il mio result va a riempirsi con un select * from table
è in questo caso che va in errore?
tnks
No il numero di cursori aperti non c'entra niente con la cardinalità dei risultati di una query...
open p_refcur for
select * from table;
Il cursore è 1. Quel parametro è esattamente il numero massimo di cursori aperti (che di default mi pare sia 300) dalle varie transazioni.
Scusa, ma qual'era l'errore? E a quanto avevi settato il numero di cursori aperti? (Che è un parametro che raramente va modificato tra l'altro, se non in situazioni molto particolari...boh, io ho sempre usato il valore di default).
texerasmo
03-01-2008, 12:37
Quindi
Essendo l'applicativo fatto in java soto stati lasciati diversi resulset aperti
Mi sempre che il valore settato è 500
ERRORE è questo
ORA-01000: maximum open cursors exceeded
Quindi
Essendo l'applicativo fatto in java soto stati lasciati diversi resulset aperti
Mi sempre che il valore settato è 500
ERRORE è questo
ORA-01000: maximum open cursors exceeded
Evidentemente non viene chiusa la connessione e/o il callableStatement...posta un esempio di chiamata. Usi un datasource, vai via jdbc, usi una libreria per il pooling, altro...?
Oppure hai dei cursori che utilizzi e poi non chiudi all'interno delle procedure.
texerasmo
03-01-2008, 15:29
purtroppo non posso vedere la web-appp
purtroppo non posso vedere la web-appp
Eh allora non fai tanta strada...cmq l'errore è li (direi, al 95% secondo la mia esperienza).
Altra fonte di errore può essere un utilizzo dei cursori in pl/sql tipo:
-- pseudo pl/sql
cursor my_cur is select * from table;
open my_cur;
loop
fetch my_cur into my_record;
exit when my_cur%not_found;
-- faccio alcune cose con il record fetchato
end loop;
-- qui ci va un "close my_cur;" direi...che forse non c'è!
Questa può essere un'altra sorgente di problemi...
texerasmo
04-01-2008, 07:55
Grazie,un cosa
fetch cos'è?
Grazie,un cosa
fetch cos'è?
'fetch' estrae un record dal cursore e lo mette in un tipo record.
Un link veloce, il primo che ho trovato...
http://www.unix.org.ua/orelly/oracle/prog2/ch06_06.htm
texerasmo
04-01-2008, 08:11
gentilissimo
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.