Discussione:
SQL numero totale di righe estratte
(troppo vecchio per rispondere)
Massimiliano Toninelli
2017-10-19 07:53:50 UTC
Permalink
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma non lo
trovo.
Da una DECLARE con Cursor, estraggo

exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;

Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)

Tia
--
Massimiliano
----------------------------------------
Chi sa fare, fa!
Chi non sa fare, insegna!
Chi non sa insegnare, insegna agli insegnanti!
e chi non sa insegnare agli insegnanti, fa politica.
http://www.toninelli.it
--
In CGIDEV2/AJAX/SSI
Forniture alberghiere http://www.nuovimagazzinirossi.it
Dr.UgoGagliardelli
2017-10-19 07:55:58 UTC
Permalink
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma non lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
Massimiliano Toninelli
2017-10-19 08:07:39 UTC
Permalink
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma non lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le prime 20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Dr.UgoGagliardelli
2017-10-19 08:27:54 UTC
Permalink
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma non lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le prime 20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Se ad ogni fetch ti facesse vedere 500, come faresti a sapere di quante
righe e' costituita l'ultima fetch se ad esempio il numero di righe non
fosse multiplo do 20?
Quello che devi fare, e':

exec sql select count(1) into :count from TABLE where DEC like :keyric

per ottenere il numero di righe e poi fare tante fetch in base al count,
considerando anche il resto di count/20.
Massimiliano Toninelli
2017-10-20 08:52:04 UTC
Permalink
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma
non
lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le prime 20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Se ad ogni fetch ti facesse vedere 500, come faresti a sapere di quante
righe e' costituita l'ultima fetch se ad esempio il numero di righe non
fosse multiplo do 20?
exec sql select count(1) into :count from TABLE where DEC like :keyric
per ottenere il numero di righe e poi fare tante fetch in base al count,
considerando anche il resto di count/20.
Questo è bruttino come metodo ... Fai due stmt ed era quello che volevo
evitare.
Hai ragione sia tu come Oelix per il fatto che lo obbligo ad estrarre fino a
20.
Ieri ho trovato sul manuale il Sensitive che Asensitive:

declare SqlCur3 insensitive cursor for PrepCur3;

permette di leggere dentro la SQLCA il valore delle righe estratte nel campo
SQLERRD(2)
Dr.UgoGagliardelli
2017-10-20 11:46:48 UTC
Permalink
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma
non
lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le prime 20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Se ad ogni fetch ti facesse vedere 500, come faresti a sapere di quante
righe e' costituita l'ultima fetch se ad esempio il numero di righe non
fosse multiplo do 20?
exec sql select count(1) into :count from TABLE where DEC like :keyric
per ottenere il numero di righe e poi fare tante fetch in base al count,
considerando anche il resto di count/20.
Questo è bruttino come metodo ... Fai due stmt ed era quello che volevo
evitare.
Sara' anche bruttino ma l'SQL funziona cosi', non esiste un dialetto
specifico localizzato per Piadena!
:-)
Post by Massimiliano Toninelli
Hai ragione sia tu come Oelix per il fatto che lo obbligo ad estrarre fino a
20.
declare SqlCur3 insensitive cursor for PrepCur3;
permette di leggere dentro la SQLCA il valore delle righe estratte nel campo
SQLERRD(2)
Non credere di risolvere, il cursore sensitive ti permette di vedere le
righe variate nello stesso resulset, anche quelle eventualmente gia'
lette: e' cosi' che lo vuoi? Inoltre le righe stimate potrebbero non
essere le stesse effettivamente ritornate.
Probabilmente ti converrebbe utilizzare una query semplice ed una serie
di fetch multiple.
Massimiliano Toninelli
2017-10-20 15:09:11 UTC
Permalink
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma
non
lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le
prime
20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Se ad ogni fetch ti facesse vedere 500, come faresti a sapere di quante
righe e' costituita l'ultima fetch se ad esempio il numero di righe non
fosse multiplo do 20?
exec sql select count(1) into :count from TABLE where DEC like :keyric
per ottenere il numero di righe e poi fare tante fetch in base al count,
considerando anche il resto di count/20.
Questo è bruttino come metodo ... Fai due stmt ed era quello che volevo
evitare.
Sara' anche bruttino ma l'SQL funziona cosi', non esiste un dialetto
specifico localizzato per Piadena!
:-)
Post by Massimiliano Toninelli
Hai ragione sia tu come Oelix per il fatto che lo obbligo ad estrarre fino a
20.
declare SqlCur3 insensitive cursor for PrepCur3;
permette di leggere dentro la SQLCA il valore delle righe estratte nel campo
SQLERRD(2)
Non credere di risolvere, il cursore sensitive ti permette di vedere le
righe variate nello stesso resulset, anche quelle eventualmente gia'
lette: e' cosi' che lo vuoi? Inoltre le righe stimate potrebbero non
essere le stesse effettivamente ritornate.
Probabilmente ti converrebbe utilizzare una query semplice ed una serie di
fetch multiple.
No va bene così! Sto facendo due siti di ecommerce in Cgidev2 e la velocità
del sistema è spaventosa...!! :-D

Inoltre, ho un engineer da me per le interfacce jQuery e un grafico, e non
hanno mai visto una cosa simile nello sviluppo, che ripetono essere
straordinari!!!
In tre giorni abbiamo fatto una cosa bellissima!
Merito del cgidev2!!!
:-D
Dr.UgoGagliardelli
2017-10-21 00:21:02 UTC
Permalink
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Post by Dr.UgoGagliardelli
Post by Massimiliano Toninelli
Se ne era parlato tempo fa, e l'ho da qualche parte nei miei pgm, ma
non
lo
trovo.
Da una DECLARE con Cursor, estraggo
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
fetch first 20 rows only;
Ne dovrebbe estrarre 500, ma mostra solo le prime 20.
Dove è scritto il valore 500? Nel SQLDA non c'è.-
Non posso mettere chiaramente una COUNT(*)
Tia
Se usi fetch first 20 rows only cosa dovrebbe farti vedere se non 20?
500! Sto facendo un nuovo sito di ecommerce, e devo mostrare le
prime
20,
informarlo che ci sono altre 480 righe e mostrare un ciclo di 24 link che
sono le altre pagine
Se ad ogni fetch ti facesse vedere 500, come faresti a sapere di quante
righe e' costituita l'ultima fetch se ad esempio il numero di righe non
fosse multiplo do 20?
exec sql select count(1) into :count from TABLE where DEC like :keyric
per ottenere il numero di righe e poi fare tante fetch in base al count,
considerando anche il resto di count/20.
Questo è bruttino come metodo ... Fai due stmt ed era quello che volevo
evitare.
Sara' anche bruttino ma l'SQL funziona cosi', non esiste un dialetto
specifico localizzato per Piadena!
:-)
Post by Massimiliano Toninelli
Hai ragione sia tu come Oelix per il fatto che lo obbligo ad estrarre fino a
20.
declare SqlCur3 insensitive cursor for PrepCur3;
permette di leggere dentro la SQLCA il valore delle righe estratte nel campo
SQLERRD(2)
Non credere di risolvere, il cursore sensitive ti permette di vedere le
righe variate nello stesso resulset, anche quelle eventualmente gia'
lette: e' cosi' che lo vuoi? Inoltre le righe stimate potrebbero non
essere le stesse effettivamente ritornate.
Probabilmente ti converrebbe utilizzare una query semplice ed una serie di
fetch multiple.
No va bene così! Sto facendo due siti di ecommerce in Cgidev2 e la velocità
del sistema è spaventosa...!! :-D
D campi ds dim(20)
D fld1
D fld2
exec sql declare SqlCur3 cursor for
select fld1, fld2
from TABLE
where DEC like :keyric
exec sql open sqlcur3...
for...
exec sql fetch 20 rows into :campi
e' questo che intendevo, dopo la fetch SQLERRD(3) contiene il numero di
righe ritornate, dopola open del cursore insensitive SQLERRD(2) contiene
il numero esatto di righe nel result set, e visto che la' fuori c'e' uno
che pagina, non ti devi preoccupare degli effetti collaterali del
cursore sensitive aperto.

Obelix
2017-10-19 21:04:33 UTC
Permalink
Post by Massimiliano Toninelli
Dove è scritto il valore 500?
Da nessuna parte. Mica le conta, se gliene chiedi solo 20...
Post by Massimiliano Toninelli
Post by Massimiliano Toninelli
Non posso mettere chiaramente una COUNT(*)
exec sql GET DIAGNOSTICS :Rows = DB2_NUMBER_ROWS ;

DB2_NUMBER_ROWS
If the previous SQL statement was an OPEN or a FETCH which caused
the size of the result table to be known, returns the number of rows in
the result table. For SENSITIVE cursors, this value can be thought of as
an approximation since rows inserted and deleted will affect the next
retrieval of this value. Otherwise, the value zero is returned.
Massimiliano Toninelli
2017-10-20 08:53:03 UTC
Permalink
Post by Obelix
Post by Massimiliano Toninelli
Dove è scritto il valore 500?
Da nessuna parte. Mica le conta, se gliene chiedi solo 20...
Hai ragione!
Post by Obelix
Post by Massimiliano Toninelli
Post by Massimiliano Toninelli
Non posso mettere chiaramente una COUNT(*)
exec sql GET DIAGNOSTICS :Rows = DB2_NUMBER_ROWS ;
Perfetto... tengo per la prox volta. Al momento ho usato la SQLCA con
SENSITIVE e leggendo nella SQLCA... Scritto dentro al posto di Ugo.
Post by Obelix
DB2_NUMBER_ROWS
If the previous SQL statement was an OPEN or a FETCH which caused the
size of the result table to be known, returns the number of rows in the
result table. For SENSITIVE cursors, this value can be thought of as an
approximation since rows inserted and deleted will affect the next
retrieval of this value. Otherwise, the value zero is returned.
Tnx
Continua a leggere su narkive:
Loading...