Gå til innhold

Bruk av cursors i stored procedure


Anbefalte innlegg

Skal lage ein stored procedure som akkumulerer ein verdi i ein tabell.

Dette må antakeligvis skje med hjelp av ein cursor, noko eg skjønar heller lite av.

Er det noko som kan forklare meg enkelt korleis cursoren fungerer, og kva som må

gjerast for å addere ein verdi til variabelen?

 

Brukar forøvrig TransactSQL.

Lenke til kommentar
Videoannonse
Annonse

Poenget med oppgåva er nok at eg skal bruke cursors,

problemet er at eg ikkje heilt skjønar kva som skjer.

Det som skal skje er at eg skal akkumulerer ein int verdi i ein tabell.

 

Er litt pes å forklare heile databasen, men kan legge ut ER diagram om du vil.

Det eg lurar mest på er korleis ein adderer ein verdi til ein variabel.

Lenke til kommentar
haha, will do :D

 

Sidan du er så godt i gang med å svara; kva er alternativet til ein cursor?

Så vidt eg skjønar er vel poenget at ein skal gå igjennom tabellane på ein rask måte, altså utan å hente ut kvar tuppel...

 

I 99,9% av tilfellene så er en vanlig set-basert spørring det raskeste.

 

Som allerede forklart så er det raksere å skrive

select sum(antall) from produkter

enn å åpne en cursor som blar seg en og en rad og lagrer summen i en variabel. Dette bl.a. fordi 1) databaseserveren ikke trenger å bruke tid på å returnere hver eneste rad til deg, 2) den finner en optimal plan for å utføre spørringen, 3) sikkert flere ting, men det er tidlig på morgene enda.

 

Men som du skjønner har du 0,1% hvor en cursor faktisk er raksere. Kommer ikke på noen gode eksempler akkurat nå, men har sett eksempler i enkelte bøker som består av å finne kompliserte dateranges, og disse er betydelig raskere med cursors.

 

Edit: running sums vil mulgiens også være raskere ved bruk av cursor.

Endret av kaffenils
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...