Avatar billede havmaage Juniormester
05. oktober 2009 - 20:12 Der er 2 kommentarer og
1 løsning

endnu et cursor issue jeg ikke forstår

Jeg har denne sp, den skulle gerne kunne beregne rente beløbet via min egen function, men den fejler når jeg kalder den med

Msg 512, Level 16, State 1, Procedure tilskriv_rente, Line 24
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Msg 512, Level 16, State 1, Procedure tilskriv_rente, Line 24
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Msg 512, Level 16, State 1, Procedure tilskriv_rente, Line 24
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Msg 512, Level 16, State 1, Procedure tilskriv_rente, Line 24
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.





koden her, skulle gerne loope gennem de selctede rows og berenge renten og skrive den ud via print.

ALTER PROCEDURE [dbo].[tilskriv_rente]


AS
BEGIN
    declare @renteBelob float
    declare @kontonr smallint
   
   
    declare pegefinger CURSOR for
    select kontonr from renteOpgorelse
    open pegefinger
    FETCH NEXT FROM pegefinger into  @kontonr
   
    WHILE @@FETCH_STATUS = 0 BEGIN
   
        set @renteBelob = (select  dbo.Beregn_rente(renteSaldo,dage,renteSats)
        from renteOpgorelse
        where kontonr = @kontonr)   
          /* her vil jeg indsætte rente belobet på konto's */       

        print cast(@renteBelob as varchar(20))
 
       
        FETCH NEXT FROM pegefinger into @kontonr
    END --WHILE
    close pegefinger
    deallocate pegefinger

END


GO
Avatar billede havmaage Juniormester
05. oktober 2009 - 21:37 #1
løste det selv, total tanke torsk, der er jo flere rækker med samme kontonr derfor looper cursoren igen pr. kontonr som ikke er unik.
ændrede det til id og nu vioker det.
Avatar billede arne_v Ekspert
10. oktober 2009 - 19:34 #2
Hvad goer den SP som:

UPDATE renteopgoerlse SET rentesaldo=rentesaldo+dbo.Beregn_rente(renteSaldo,dage,renteSats)

ikke gør?
Avatar billede havmaage Juniormester
11. oktober 2009 - 10:10 #3
tjaa... jeg ville lave en procedure der tilskriver renter på alle kontoer.

UPDATE renteopgoerlse SET rentesaldo=rentesaldo+dbo.Beregn_rente(renteSaldo,dage,renteSats)
where kontonr = @kontonr

Istedet for at lave en cursor der peger på kontonr lavede jeg en cursor der pegede på både id, og kontonr derved kunne jeg opdatere alle posteringer.

Jeg skulle beregne renten udfra at hvis der stod 1000 kr, på en konto en dato og der gik 10 dage indtil næste postering. Skulle den beregne renten af det til enhvertid indestående beløb de dage.

altså medbringe dage imellem hver ændring på saldoen,

(Det var en opgave i forbindelse med mit deltidsstudie og mssql er nyt for mig især sp cursors og triggers.

Har læst en masse om at man skal prøve at undgå disse features men jeg skal jo kende dem :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester