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

pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri

[es] :: MS SQL :: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri

[ Pregleda: 3021 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri10.12.2008. u 19:31 - pre 187 meseci
Hajte mi pomozite molim vas evo već dva sata se zafrkavam i nikako da mi prođe
a vjerovatno je neka glupost koju nikako ne mogu da vidim

Hoću da uradim slijedeće

Code:

BEGIN TRANSACTION t1;
go    
exec sp_ado_msi_optimum 1647760;
go    
rollback transaction t1;


A da mi u bazi osnau zapisani rekordi koje je izvršila procedura sp_ado_msi_optimum;

Smama procedura ovako izgleda:

Code:

-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        Admir Hodžić
-- Create date: 10.12.2008
-- Description:    Ovo je seqvenca proovjera-optimum koja kontroliše da li će Narudžba napraviti višak zaliha na destnaciski randnji
-- Verzija: 1.Beta
-- drop procedure sp_ado_msi_optimum
-- =============================================
CREATE PROCEDURE sp_ado_msi_optimum
@id int
AS
BEGIN  

    SET NOCOUNT ON;
    
    declare @rand float
    set @rand= rand()
    /*--prvo uzimamo TRESH HOLD primke u LOG tablicu da vidimo šta to ne valja--*/
    insert into ado_log_ulaz
    (tip,skl_id,par_id,doc_dob,rbr,art_id,ulaz,optimum,lager,mpc,mpc_lag,fc,fc_lag,nc,nc_lag,rand)
    select 
         doc.tip
        ,doc.skl_id
        ,doc.par_id
        ,doc.doc_dob
        ,sdo.rbr
        ,sdo.art_id
        ,sdo.kol
        ,lager.optimum
        ,lager.kolicina
        ,sdo.mpc
        ,lager.mpc
        ,sdo.fc
        ,lager.fc_zad
        ,lager.nc
        ,lager.nc_zad
        ,@rand
    from doc 
    inner join sdo on doc.id=sdo.doc_id
    inner join art on sdo.arT_id=art.id
    left outer join lager on doc.skl_id=lager.skl_id and sdo.art_id=lager.art_id
    where doc.id=@id
    and sdo.kol > isnull(lager.optimum,0)-isnull(lager.kolicina,0) /*--ovdije treba dodati uslov paketa u FETURE verzijama--*/    
    
    /*--sada provjeramo da li smo išta upiali preko @@idenditiya--*/
    
    if @@identity is null  /*--ako nismo ništa upoisali idenditi je null i onda puštamo poruku da je uredu--*/
        begin
            select 
                (Convert(Bit,0)) as valid,'Nema problema' as Msg
                
        end
    else /*--usuprotnom pročitati će mo zapis iz LOGA uz pomoć paramtra rand i --*/
        begin
            select 
                (Convert(Bit,0)) as valid,
            'Stavka: '+
            art.sifra+' '+art.naziv+' '
            +'RBR: '+convert (varchar(3),RBR)
            +isnull(
            (' Dozvoljeni ulaz:'+cast(round((optimum-lager),0) as varchar(5))
            + ' a ulazi:'+cast(ulaz as varchar(5))+' ;')
                    ,'napostoji u cijeniku.;') as Msg
            from 
                ado_log_ulaz
                inner join art on art_id=art.id
                where rand=@rand
            order by rbr
        end;
end
GO

Probao sam sve i svašata, čitao fourm ranije postove i BOL ali nisam uspo riještiti problem

Kako da počenm i završim transakciju u stored proceduri te i ako ovu slijedeću roll back-ujem da ostanu zapisi prve
Hvala unaprijed
Admir
S poštovanjem
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 11:02 - pre 187 meseci
cekaj, cemu ti onda sluzi transakcija t1? Mislim, da li imas nesto izmedju pocetka i kraja transakcije, osim exec procedure?
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 11:11 - pre 187 meseci
U transakciji T1 imam još puno upita koji pokušavaju
zapisati robni dokument, i prije upisa u log i poslije upisa u log (izvršavanja moje procedure)
ali nisam navodio da pojednostavim situaciju.
Eh sada bi ja želio da zapišem u log ovu grešku putem uskladištene procedure
te da mi taj zapis ostane iako na kraju transakcije naprivm rool back

S poštovanjem
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 12:21 - pre 187 meseci
Ne moze, zapamti gresku, uradi rollback pa upisi log entry i to ce biti implicitno commit-ovano (pod uslovom da SP ne pozivas pod jos jednom eksplicitnom transakcijom na aplikativnom nivou).
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 13:22 - pre 187 meseci
Bojim se da me niste najbolje razumjeli
Pod greškom sam mislio malverzaciju sa podatcima, a ne SQL grešku, Nije se dogodio nikakav RISE ERROR,
Ova transakcija će biti kompletna roll backovana na aplikativnom nivo ali tek poslije što moja seqvenca vati Valid statu flase.

S poštovanjem
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.telekom.yu.



+104 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 13:36 - pre 187 meseci
Procedure koje se nalaze između "Begin transaction" i "Rollback"-"Commit" se ili sve upisuju tj. isvršavaju ili se ni jedna ne izvršava tako da to što ti želiš ne može da se napravi tako.

MMIX je lepo rekao, zapamti grešku, u tvom slučaju malverzaciju, uradi rollback pa onda upiši malverzaciju u log.
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 13:40 - pre 187 meseci
U Oracle bazi podataka ovo se radi pomoću AUTONOMOUS_TRANSACTION.

Ovde: http://www.c-sharpcorner.com/U...tionsinMicrosoftSQLServer.aspx

je opisana tehnika koja daje sličan rezultat na MS SQL, ali nisam ulazio u analizu teksta, pošto se ne snalazim baš sa MSSQL.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 13:44 - pre 187 meseci
Bez obzira kada ce biti rollback-ovana sve sto je deo transakcije bice ponisteno (teorija kaze: ACID - Atomic, Consistent, Isolated, Durable - kljucno je Atomic: ili sve ili nista).
Pretpostavljam da hoces nesto kao NotSupported attribut u com+ ali SQL Server to ne podrzava.
Every hamster has his day.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 14:05 - pre 187 meseci
autonomous transakcija nije nista drugo do interno izvrsavanje odredjene procedure preko sekundarne konekcije i iskreno nije mi bas najjasnije zasto ta funkcionalnost ne postoji u MMSQLu. Medjutim ovaj workaround se bazira na tome da rollback nece uticati na temp tabele sto je vise bug nego feature i ja se ne bih oslanjao mnogo na to jer to moze vrlo lako da nestane sa nekim service packom. Ako vec koristis SQL2005/2008 bolje resenje emuliranja autonomous transakcija po meni bi bila CLR procedura iz koje ces otvoriti novu konekciju/transaction context i pozvati proceduru koju CLRu das kao parametar (i tako uraditi logovanje) i onda tu CLR proceduru pozoves kad ti treba autonomna transakcija.

Eto materijala za blog, okacicu resenje i ovde, mozda nekom zatreba.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 14:06 - pre 187 meseci
Citat:

MMIX je lepo rekao, zapamti grešku, u tvom slučaju malverzaciju, uradi rollback pa onda upiši malverzaciju u log.

Da li mogu dobiti neki gudie line ili smjernicie kako da ovo napravim,
U koji log da upišem onaj transakciski pa poslije da iz njega tražim ili neki drugi.

Unaprijed zahvalan
Admir
S poštovanjem
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.telekom.yu.



+104 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 14:48 - pre 187 meseci
Code:

BEGIN TRANSACTION t1;
go    

declare @NumerToInsert
set @NumerToInsert = 1647760

go    
rollback transaction t1;

exec sp_ado_msi_optimum NumerToInsert;


Ukoliko se u sp_ado_msi_optimum pozivaš na neke podatke koje nisi promenio/dodao zbog rollback-a onda ti ni ovo neće raditi, već moraš da zapamtiš sve podatke koje si pokušao da promeniš/dodaš kao što sam to napisao za @NumerToInsert
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 15:15 - pre 187 meseci
Hvala na pomoći i hvala na strpljenu

Još ću ovo pitati i onda mi samo ostaje da vidim na MMIX ovom blogu kako je on to izveo.

Postoje li neki @@Parametri koji mogu biti vidljivi i drugima.

Nešto kao što postojie ##TempTable koje mogu čitati i drugi

Probao sam uraditi
Code:

Begin tran
insert into ##TempTable
roll back tran


Ali bez pomoći
Jer ako ne commitujem transakciju nema ni ##TempTable.

Više bi volio da prepustim taj roll back da uradi apllication server
Umijesto mene
Neznam kako će se on ponašati ako mu neko drugi ukine transakciju koju je on počeo.



Unaprijed zahvalan !

S poštovanjem
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 15:48 - pre 187 meseci
Mozda tvoj problem nije van procedure, nego u samoj procedure. Ako kaze ROLLBACK na kraju, to ce se i desiti - ROLLBACK na kraju bez obzira na to sta je procedura uradila.

BEGIN TRANS --- pocinje transakcija
EXECUTE PROCEDURE --- nesto se desava, ovo je transakcija
ROLLBACK ---- bezuslovni rollback

Ako u stvari zelis da neke rekorde procedura upise u tabelu A, a neke odbije i/ili upise u log (tabela B) jer nisu bili dovoljno dobri da bi otisli u tabelu A, onda sve odradi unutar procedure. Nesto ovako:

BEGIN PROCEDURE
BEGIN TRANSACTION
INSERT INTO A
WHERE good record
-- Ako nije prosao INSERT
IF @@Error rollback i izadji iz procedure,

-- ako je prethodni insert prosao, pokusaj da upises u drugu tabelu lose rekords
INESRT INTO B
WHERE bad record

-- Pprvi INSERT, u tabelu A je prosao sigurno
-- ako en prodje insert u B, onda moras da ROLLBACK i onaj prvi
-- pa zato imas:
IF @@Error rollback i izadji iz procedure,

END PROCEDURE

Imas u BOL za TRY-CATCH jednostavan i razumljiv primer kako se radi sa transakcijama.
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri11.12.2008. u 16:31 - pre 187 meseci
@Zidar
Nažalost ovdije nije slučaj da smijem selektirati rekorde na jdenu ili drugu stranu
Radi se o robnim ulazniom dokumentima u maloprodaju gdije Račun dobavljača mora Biti indendičan Ulaznoj Kalkulaciji.

Sada je slijedeća situacija da u našem poslovnom procesu postoje dvije instance radnika
Oni koji mogu zaključiti ulazni dokument ukoliko ulazne količine neće proeći optimalne
I oni koji mogu pustiti da se prekorači optimalna količina na ulazu.
Eh da sada oni nebi morali od artikla do artikla ici i podizati optimalne količine ručno
ja sam imao ideju da taj dio ulaza koji nevalja ostavim u log tablicu kako bi poslije ovi
šefovi na jednom mijestu mogli vidjeti šta od robe nije moglo uči u maloprodaju i na jednostavan način propustiti te količine.

Probati ću još jednio sa RISSE ERROR funkcijom kod ovakvih ulaza
Ali ne znam šta će se dalje događati u uskaldištenoj proceduri i njenim temp tabelama
Može li se izvesti nešto kao RISEE ERROR (neki broj neka poruka) te nakon toga go to
neka nova procedura.
koja nece biti u prvoj transakciji.

Lijep pozdrav
S poštovanjem
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri12.12.2008. u 13:38 - pre 187 meseci
Ok, uspeo sam da sklopim nesto sto radi ok

Emulating autonomous transactions in MS SQL Server

CLR procedura je ova:

Code:
using System.Data.SqlClient; 
using System.Security.Principal; 
using Microsoft.SqlServer.Server; 

namespace AutonomousTransactionCLR 
{
  public static class ExecContext 
  { 
    [SqlProcedure(Name = "ExecuteAutonomous")] 
    public static void ExecuteAutonomous(string connectionString, string sqlText) 
    { 
      if (SqlContext.IsAvailable) 
      { 
        WindowsImpersonationContext impContext = null; 
        try 
        { 
          if (SqlContext.WindowsIdentity != null) 
            impContext = SqlContext.WindowsIdentity.Impersonate(); 
          using (SqlConnection conn = new SqlConnection(connectionString + ";enlist=false;")) 
          { 
            SqlCommand cmd = new SqlCommand(sqlText, conn); 
            conn.Open(); 
            cmd.ExecuteNonQuery(); 
          }
        } 
        finally 
        { 
          if (impContext != null) impContext.Undo(); 
        } 
      } 
    } 
  } 
}



a kad se registruje poziva se sa:

begin transaction;
exec dbo.ExecuteAutonomous 'Data Source=SOLAR;Initial Catalog=AdventureWorks;Integrated Security=True', 'insert into Test values (123)';
rollback;
select * from Test;


Nazalost izgleda da je nemoguce odraditi ovo bez da se na neki nacin prosledi connection string ili instrukcije CLRu kako da generise connection string, pa vi sad tweakujte ovo kako vam odgovara.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri12.12.2008. u 15:48 - pre 187 meseci
Zahvaljujem na BLOG-u
i Na odgovoru
Sada sam na velikom BELAJU jer ovo mog šturog znanja i knjiga koje su mi prošle kroz ruke nisu se dodicle CLR-ova.
Sad imam problem sa vremenom i učenjem ali isplatiti će se.
Javim se kada napravim riješenje.

Super pisanje na Blogu, samo šteta ili sam ja glup pa sam pročitao samo 4 posta ili ih stvarno nema više.


S poštovanjem
 
Odgovor na temu

[es] :: MS SQL :: pomoć oko ptvrđivanja transakcije u usklaištenoj procedjuri

[ Pregleda: 3021 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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