Stored procedura

poruka: 8
|
čitano: 2.876
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
protjeran
offline
Stored procedura

Ukratko, treba mi primjer stored procedure koja kao parametre prima jedan zapis i njega zapisuje negdje u bazu. Jedan od parametara treba biti i timestamp (rowversion), i ono što zapravo trebam jest da stored procedura pomoću timestampa izbaci exception na klijentskoj strani ako je došlo do data konkurencije (provjera se vrši usporedbom tipestampa u stored proceduri). Riječ je o SQL serveru.

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: Stored procedura
Tracer kaže...

Ukratko, treba mi primjer stored procedure koja kao parametre prima jedan zapis i njega zapisuje negdje u bazu. Jedan od parametara treba biti i timestamp (rowversion), i ono što zapravo trebam jest da stored procedura pomoću timestampa izbaci exception na klijentskoj strani ako je došlo do data konkurencije (provjera se vrši usporedbom tipestampa u stored proceduri). Riječ je o SQL serveru.

Stored procedure ne izbacuju exceptione i nemaju veze s klijentima, već se izvršavaju na serveru. Ono što možeš dobiti je potvrda o grešci od SQL servera. Također, SP ne primaju zapise, nego parametre u tipovima baze.

Dakle, da bi dobio to što tražiš, trebaš parsati i proslijediti parametre koje želiš i parsati i klasificirati ili direktno izbaciti eventualnu grešku na serveru.

Biti u većini nije vrijedno vremena inteligentnog čovjeka. G.H.Hardy || Hrvatska je oligarhijska partitokracija s primjesama patokracije.
16 godina
protjeran
offline
Stored procedura

Ako se ne varam SQL Server od verzije 2005 podržava try cach throw

Programko http://programko.bloger.hr
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Stored procedura
Programko kaže...

Ako se ne varam SQL Server od verzije 2005 podržava try cach throw

Djelomično si u pravu, ali ne u onom dijelu koji njega zanima. U SQL Serveru možeš specificirati TRY CATCH, ali to znači samo da možeš definirati alternativne operacije ako ono unutar TRY-a ne uspije. Bez obzira na to, poruke o greškama i dalje parsaš u aplikaciji, s razlikom da ti se aplikacijska rutina neće prekinuti greškom u bazi.

Biti u većini nije vrijedno vremena inteligentnog čovjeka. G.H.Hardy || Hrvatska je oligarhijska partitokracija s primjesama patokracije.
15 godina
protjeran
offline
RE: Stored procedura
naxeem kaže...
Tracer kaže...

Ukratko, treba mi primjer stored procedure koja kao parametre prima jedan zapis i njega zapisuje negdje u bazu. Jedan od parametara treba biti i timestamp (rowversion), i ono što zapravo trebam jest da stored procedura pomoću timestampa izbaci exception na klijentskoj strani ako je došlo do data konkurencije (provjera se vrši usporedbom tipestampa u stored proceduri). Riječ je o SQL serveru.

Stored procedure ne izbacuju exceptione i nemaju veze s klijentima, već se izvršavaju na serveru. Ono što možeš dobiti je potvrda o grešci od SQL servera. Također, SP ne primaju zapise, nego parametre u tipovima baze.

Dakle, da bi dobio to što tražiš, trebaš parsati i proslijediti parametre koje želiš i parsati i klasificirati ili direktno izbaciti eventualnu grešku na serveru.

Naredba raiserror "baca" ono što ja u klijentu hvatam s try-catch tj. exception. I kada sam napisao "zapis" onda i mislim na sve njegove dijelove koji su predani kao parametri. Također, iako se stored procedura izvršava na serveru ne može se reći da klijent nema veze s njom, jer ja kao klijent tu proceduru i pozivam, te radim s njenim result setom.

 

I molim, bez nepotrebne filozofije. Trebam samo konkretan primjer usporedbe timestampa (onog u bazi i dolaznog preko parametra). Zapisi se identificiraju primarnim ključem ID (increment). Hvala.

Poruka je uređivana zadnji put uto 25.8.2009 19:54 (Tracer).
16 godina
neaktivan
offline
RE: Stored procedura

U redu, to jest arhitekturala filozofija.

Ali vidim da znaš za RAISERROR. Ako to znaš, gdje je problem? U SQL-u se polja uspoređuju sa znakom "=".

Biti u većini nije vrijedno vremena inteligentnog čovjeka. G.H.Hardy || Hrvatska je oligarhijska partitokracija s primjesama patokracije.
15 godina
protjeran
offline
Stored procedura

Problem je u sljedećem. Ja predam stored proceduri ovakve paramtre:  ID, IME, PREZIME, TIMESTAMP. I sada ta procedura treba pronaći zapis s tim ID-om (nije problem upotrebom select-a), i ako ga ne nađe onda dodaje novi zapis s tim parametrima. Međutim, ako nađe zapis s tim ID-om onda ga treba izmjeniti tako da promjeni stupce IME i PREZIME (postavi ih na vrijednosti predane parametrima). Međutim niti to ne smije napraviti ako je klijentski timestamp (onaj iz parametara) "manji" od onog koji je trenutno na serveru (postojećem zapisu u tablici) tj. ako je netko drugi od klijenata već izmjenio zapis na serveru. Tada treba izbaciti taj exception.

 

Znači, treba mi realizacija klasičnog data concurrency problema upotrebom stored procedure. Inače ovaj problem rješavam automatski kroz try-catch na klijentu, ali tada moram usporedbom stringova analizirati što se dogodilo, umjesto da imam neki id pogreške, što želim postići tom stored procedurom.

Poruka je uređivana zadnji put uto 25.8.2009 20:33 (Tracer).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
RE: Stored procedura

Neznam dali sam pogodio priču ali probajmo:


use [ImeBaze]

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'procNameProcedure')
    BEGIN
        DROP  Procedure  dbo.procNameProcedure
    END

GO

CREATE Procedure dbo.procOraRacunStavkeReport
    @id int,
    @FirstName varchar(50),
    @LastName varchar(50),
    @CreateTime timestamp,
    @Result int output
AS
begin
    declare @count int;
    declare @baseTime datetime;
    set @count=(select count(*) from imeTablice where id=@id);
    if @count > 0 then
        begin
            set @baseTime=(Select top 1 Time from imeTablice where id=@id);
            if @baseTime<@CreateTime then
            begin
                update imeTablice
                set
                    FirstName=@FirstName,
                    LastName=@LastName,
                    Time=@CreateTime
                where
                    id=@id;
                    set @Result=rowcount();
            end
            else
            begin
                set @Result=-1;
            end
        end
    else
        begin
            insert into imeTablice
            values(@id,@FirstName,@LastName,@Time);
            set @Result=0;
        end
end

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice