Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kursori--Koliko fetch-eva...

[es] :: MS SQL :: Kursori--Koliko fetch-eva...

[ Pregleda: 2535 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Hrvoje Balažinec
Varaždinske Toplice

Član broj: 123178
Poruke: 28
*.adsl.net.t-com.hr.



Profil

icon Kursori--Koliko fetch-eva...16.01.2007. u 12:38 - pre 210 meseci
Radim proceduru u kojoj kursori brinu o tome da datum isporuke nije manji od datuma narudzbe:

Code:

if exists (select name from sys.procedures where name = 'CheckOrders')
    drop procedure CheckOrders
go
create procedure CheckOrders
    @Drzava        nvarchar (15)

with encryption as

declare    @OrderID        int

declare    crsOrders cursor keyset for
select     OrderID
from    Orders
where   Orders.ShipCountry = @Drzava

open     crsOrders

fetch next from    crsOrders
into    @OrderID

while @@fetch_status = 0
begin
        update    Orders 
        set        Orders.RequiredDate = Orders.OrderDate 
        where    Orders.RequiredDate < Orders.OrderDate
        and        Orders.OrderID = @OrderID

    fetch next from    crsOrders
    into    @OrderID
end

close    crsOrders
deallocate crsOrders
/*
execute CheckOrders 'France'
*/



i to sve radi, ali bi sad jos zelio dodati izlazni parametar @KolikoFetcheva koji bi davao rezultat koliko je kursor procitao redova. Kako da to izvedem?



 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...16.01.2007. u 13:15 - pre 210 meseci
pa gore gdje deklariraš ulazni param. @Drzava dodaj jos

declare @KolikoFetcheva TIP<smallint ili int> output

i tada svaki put kad pricitas redak povecaj za jedan, (tu gdje radis update u while petlji),i na kraju ce broj u toj var.bit jednak broju proc.redova, ne znam dal ima neka mogučnost da sa kursorom to dobijes??? ako ima volio bih znati!-ja bi tako napravio!
----Roberto----
 
Odgovor na temu

Hrvoje Balažinec
Varaždinske Toplice

Član broj: 123178
Poruke: 28
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...16.01.2007. u 13:33 - pre 210 meseci
Citat:

declare @KolikoFetcheva TIP<smallint ili int> output


ovo mi je jasno i
/*
declare @KolikoFetcheva
execute CheckOrders 'France', @KolikoFetcheva output
*/

, ali ne znam napravit taj brojac

Citat:

(tu gdje radis update u while petlji),i na kraju ce broj u toj var.bit jednak broju proc.redova


i pitanje:
Dal u @OrderID prije zatvaranja kursora ostaju svi redovi koje je kursor procitao ili on pamti samo red po red?
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.ptt.yu.

Jabber: DarkMan


Profil

icon Re: Kursori--Koliko fetch-eva...16.01.2007. u 16:45 - pre 210 meseci
Ne znam da li obozavas kursore ili nisi znao drugacije da uradis i zbog nekog razloga moras da ga koristis.
Kursori zu dosta zahtevni za server i treba ih izbegavati kada nisu potrebni.
Za tvoj slucaj mislim da ti nisu uopste potrebni.

Code:


        declare @ukupno_porudzbina int,
                   @neispravnih_porudzbina int

--  ovim dobijas koliko imas ukupno porudzbina
        select @ukupno_porudzbina = count(*)
          from Orders
          where ShipCountry = @Drzava

-- ovim dobijas koliko porudzbina nisu ispravni tj. koliko ces ih ispraviti
        select @neispravnih_porudzbina = count(*)
          from Orders
          where RequiredDate < OrderDate and ShipCountry = @Drzava

-- mesto onog pozamasnog kursora dovoljno ti je ovaj jedan update
        update  Orders 
        set        RequiredDate = OrderDate 
        where    RequiredDate < OrderDate and ShipCountry = @Drzava

 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...16.01.2007. u 17:25 - pre 210 meseci
Citat:

i pitanje:
Dal u @OrderID prije zatvaranja kursora ostaju svi redovi koje je kursor procitao ili on pamti samo red po red?

-ovo baš ne znam što misliš, u njemu je vrijednost OrderID iz kursora al za samo jedan red, tj onaj koji fetch-ujes! NE svi jer je to varijabla!

Code:


if exists (select name from sys.procedures where name = 'CheckOrders')
    drop procedure CheckOrders
go
create procedure CheckOrders
    @Drzava        nvarchar (15)
    @KolikoFetchova smallint output = 0

with encryption as

declare    @OrderID        int

declare    crsOrders cursor keyset for
select     OrderID
from    Orders
where   Orders.ShipCountry = @Drzava

open     crsOrders

fetch next from    crsOrders
into    @OrderID

while @@fetch_status = 0
begin
---svaki put +=1, a ako u kursoru nema ništa onda je defaultno 0 te ce tu vrijendost imati i na izlazu dole -----
        set @KolikoFetchova=@KolikoFetchova+1
        update    Orders 
        set        Orders.RequiredDate = Orders.OrderDate 
        where    Orders.RequiredDate < Orders.OrderDate
        and        Orders.OrderID = @OrderID

    fetch next from    crsOrders
    into    @OrderID
end

close    crsOrders
deallocate crsOrders
/*
execute CheckOrders 'France'
*/

tako bi to išlo, a možeš mislim da ti je možda lakše ovako kako si dobio iznad prijedlog bez kursora, svodi se na jednostavne upite!
----Roberto----
 
Odgovor na temu

Hrvoje Balažinec
Varaždinske Toplice

Član broj: 123178
Poruke: 28
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...16.01.2007. u 22:12 - pre 210 meseci
Citat:


Ne znam da li obozavas kursore ili nisi znao drugacije da uradis i zbog nekog razloga moras da ga koristis.
Kursori zu dosta zahtevni za server i treba ih izbegavati kada nisu potrebni.
Za tvoj slucaj mislim da ti nisu uopste potrebni.



I ja bi volio da ovo mogu bez kursora, ali moram da ih koristim (vjezba koju je dao profesor zahtjeva da zadatak izradimo pomocu kursora)



Citat:


set @KolikoFetchova=@KolikoFetchova+1



Ovo daje rezultat, ali je problem kad je rezultat uvijek 0.



 
Odgovor na temu

Hrvoje Balažinec
Varaždinske Toplice

Član broj: 123178
Poruke: 28
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...17.01.2007. u 12:21 - pre 210 meseci
Roberto555, ja se ispricavam jer ovo:
Code:

set @KolikoFetchova=@KolikoFetchova+1


radi, ali sam ja glupan zaboravio dodati:

Code:

print @KolikoFetchova


Uglavnom ovo je rjesenje:

Code:

if exists (select name from sys.procedures where name = 'CheckOrders')
    drop procedure CheckOrders
go


create procedure CheckOrders
    @Drzava        nvarchar (15),
    @KolikoFetchova   int output

with encryption as

declare    @OrderID        int

declare    crsOrders cursor keyset for
select     OrderID
from    Orders
where   Orders.ShipCountry = @Drzava

open     crsOrders

fetch next from    crsOrders
into    @OrderID
 
set @KolikoFetchova = 0
    
while @@fetch_status = 0
begin
        set @KolikoFetchova = @KolikoFetchova + 1
        update    Orders 
        set        Orders.RequiredDate = Orders.OrderDate 
        where    Orders.RequiredDate < Orders.OrderDate
        and        Orders.OrderID = @OrderID

    

    fetch next from    crsOrders
    into    @OrderID
end


close    crsOrders
deallocate crsOrders


/*
declare @KolikoFetchova smallint
execute CheckOrders 'France', @KolikoFetchova output
print @KolikoFetchova
*/



Hvala!!!
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...17.01.2007. u 12:33 - pre 210 meseci
Ne kužim kako ne radi al probaj ovo:
napravi tablic ulice sa kolonama sifra_ulice i naziv_ulice i upisi nešto unutra pod sifra_ulice da bude od 4-12 recimo i napravi ovo
---------------

Code:

declare @brojFetch smallint
declare @NazivUlice nvarchar(30)
set @brojFetch = 0
declare kur cursor for select naziv_ulice from ulice where sifra_ulice<10 and sifra_ulice>5
open kur
fetch next from kur into @NazivUlice
while (@@fetch_status=0)
begin
print 'Naziv ulice: '+@NazivUlice
set @brojFetch=@brojFetch+1
fetch next from kur into @NazivUlice
end
close kur
deallocate kur
print 'Broj redova: '
print @brojFetch


i ovo ti radi u SQL Serv. MS, a ako to zoveš iz programa onda stavi izlazni par. ili možeš možda (nisam tako) da loviš return value,
----Roberto----
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...17.01.2007. u 12:34 - pre 210 meseci
e sorry ja sam baš pisao i radio ovu tablicu i to da ti dam primjer pa si ti već u meduvremenu odg..... da ne brišem od viška glava ne bolI!
----Roberto----
 
Odgovor na temu

Hrvoje Balažinec
Varaždinske Toplice

Član broj: 123178
Poruke: 28
*.adsl.net.t-com.hr.



Profil

icon Re: Kursori--Koliko fetch-eva...17.01.2007. u 13:34 - pre 210 meseci
Zbog toga jer sam zaboravil upisati print @KolikoFetchova MS SQL Server ne javlja gresku(ali nije bilo rezultata), ja sam radil drugo rjesenje sa privremenom tablicom.

Code:

...
create table #Counter (KolikoFetchova int)
...
begin
           insert into #Counter values (@KolikoFetchova)
       set @KolikoFetchova = @KolikoFetchova + 1
...

end

select top 1 * from #Counter
order by KolikoFetchova desc

close    crsOrders
deallocate crsOrders


i ovo je radilo, pa sam na taj nacin skuzil da mi fali print @KolikoFetchova, jer je ovo set @KolikoFetchova = @KolikoFetchova + 1 radilo.

Jos jednom, HVALA!!!
 
Odgovor na temu

[es] :: MS SQL :: Kursori--Koliko fetch-eva...

[ Pregleda: 2535 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.