12. april 2002 - 09:39Der er
9 kommentarer og 1 løsning
Count af antal records i en cursor.
Er der en måde hvorved man kan counte hvor mange records der er i en cursor i pl/sql?
Jeg arbejder på et online system hvor jeg gerne vil vise brugeren hvor mange records jeg har og samtidig vise dem på skærmen.
Derfor har jeg set flere eksempler på at man først har lavet en count med en sql sætning og derefter lavet selve cursoren der henter dataerne. Da det kan være ret komplekse sql sætninger fordobler man derfor tiden det tager at hente data, og det er selvfølgelig ikke så godt
Det har strejfet mig, jeg løber ikke hele cursoren igennem. Hvad angår [table].count kan du så ikke vise mig hvordan du gør, for jeg kan ikke få det til at virke.
På forhånd tak.
Det ville være nemmere hvis man både kun fetche og baglæns i en cursor, men det kan man vist ikke :)
Man kan kun bevæge sig forlæns i cursore, med mindre man bruger C og ikke PL/SQL. Man kan IKKE counte antallet uden en loop. Hvis du overfører data til en PL/SQL table har du alligevel loopet data igennem og kunne lige så godt have talt dem. Til gengæld kan du loope forlæns OG baglæns i en PL/SQL table OG du kan tælle med .Count.
Syntax (IKKE checket) i PL/SQL table:
tListe is table of varchar2(200) index by binary_integer; x binary_integer:=0; cursor cListe is select name from table1;
for rListe in cListe loop x:=x+1; tListe(x):=rListe.name; -- x giver sådan set antallet end loop;
vCount := tListe.Count; -- giver antallet x:= tListe.first; -- giver "pointer til første entry" x:= tListe.last; -- gæt selv x:= tListe(x).prior; -- sætter x fra nuværende til forrige x:= tListe(x).next; -- gæt selv
Grunden til at jeg afviser dit svar er at vi arbejder med så store datastørrelser at det ville fylde for meget i hukommelsen. Det kan nok bare ikke lade sig gøre på en nem måde :(
Hvis du bare laver det til x antal arrays af enkelt kolonner kan du lave en
open cursorx; fetch cursorx bulk collect into array1, array2... osv.; close cursorx;
Herefter er cursoren lukket og du har alle data i arrays i stedet for din cursor og du kan arbejde på stort set samme måde. Det fylder altså ikke mere end i en cursor.
Når du så skal tælle, er det lige meget hvilket af dine arrays du laver en array.count på.
Så er det vist på tide at få lukket den her sag, selv om der vist ikke er kommet et rigtig godt svar :(
Jeg giver teepee min points da han vist kom med det bedste svar.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.