ďťż
 
trigger i sprawdzanie unikalnosci ďťż
 
trigger i sprawdzanie unikalnosci
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

trigger i sprawdzanie unikalnosci



PeBe - 04-01-2006 09:32
trigger i sprawdzanie unikalnosci
  Witam
Mam problem z napisaniem wyzwalacza w pl/sql-u before insert or update,
ktory sprawdza czy wstawiana wartosc jest unikalna. Utworzylem kursor,
ktory zlicza identyczne rekordy - jesli w wyniku otrzymam jakis wiersz
to chcialem wyrzucic wyjatek, jesli go nie znajdzie to jest ok. Jednak
to nie dziala - prawdopodobnie dlatego, ze w wyzwalaczu nie moge uzywac
select na tabeli do ktora aktualizuje/wstawiam. Czy jest z tego jakies
wyjscie? Nie chodzi mi tutaj konkretnie o ten problem, bo moge go obejsc
inaczej, ale w jaki sposob wybrac selectem jakies wiersze z tej tabeli?
Dzieki z gory za pomoc.
Pozdrawiam





=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 04-01-2006 09:32

  Dnia Tue, 03 Jan 2006 18:19:22 +0100, PeBe <pebe@op.pl> wklepał(-a):

>Witam
>Mam problem z napisaniem wyzwalacza w pl/sql-u before insert or update,
>ktory sprawdza czy wstawiana wartosc jest unikalna. Utworzylem kursor,
>ktory zlicza identyczne rekordy - jesli w wyniku otrzymam jakis wiersz
>to chcialem wyrzucic wyjatek, jesli go nie znajdzie to jest ok. Jednak
>to nie dziala - prawdopodobnie dlatego, ze w wyzwalaczu nie moge uzywac
>select na tabeli do ktora aktualizuje/wstawiam. Czy jest z tego jakies
>wyjscie? Nie chodzi mi tutaj konkretnie o ten problem, bo moge go obejsc
> inaczej, ale w jaki sposob wybrac selectem jakies wiersze z tej tabeli?

Po 1. - FAQ.
Po 2. - możesz użyć procedury z transakcją autonomiczną. Ale to i tak ci nic nie
da, bo nie będzie ona widzieć rekordów wstawianych przez inne sesje.

Zrób po prostu klucz unikalny.
--
Sławomir Szyszło mailto:slaszysz@poczta.onet.pl
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?grou...mp.bazy-danych




Krzysztof Wiśniewski - 04-01-2006 09:32

 
Użytkownik "Sławomir Szyszło" <slaszysz@poczta.onet.pl> napisał w wiadomości
news:dpegeh.1ag.1@slaszysz.poczta.onet.pl...
| Dnia Tue, 03 Jan 2006 18:19:22 +0100, PeBe <pebe@op.pl> wklepał(-a):
|
| >Witam
| >Mam problem z napisaniem wyzwalacza w pl/sql-u before insert or update,
| >ktory sprawdza czy wstawiana wartosc jest unikalna. Utworzylem kursor,
| >ktory zlicza identyczne rekordy - jesli w wyniku otrzymam jakis wiersz
| >to chcialem wyrzucic wyjatek, jesli go nie znajdzie to jest ok. Jednak
| >to nie dziala - prawdopodobnie dlatego, ze w wyzwalaczu nie moge uzywac
| >select na tabeli do ktora aktualizuje/wstawiam. Czy jest z tego jakies
| >wyjscie? Nie chodzi mi tutaj konkretnie o ten problem, bo moge go obejsc
| > inaczej, ale w jaki sposob wybrac selectem jakies wiersze z tej tabeli?
|

Bo tworzysz wyzwalacz nie taki, jak trzeba. :)

CREATE TRIGGER tgr_tabela ON dbo.tabeka
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
/*Czy wstawiono niedozwoloną wartość: */
IF EXISTS
(
SELECT dbo.tabela.ID FROM dbo.tabela
INNER JOIN inserted ON inserted.unikalne_pole = dbo.tabela.unikalne_pole
WHERE dbo.tabela.ID != inserted.ID
)
BEGIN
RAISERROR (Nie da rady! To pole ma być unikalne!', 13 , 1)
ROLLBACK TRANSACTION
RETURN
END

Ale pamiętaj - ma to sens, jeśli wstawiono pojedynczy rekord. Dla operacji
na większej liczbie rekordów musisz oprogramować mądrzejsze rozwiązanie.

| Zrób po prostu klucz unikalny.

To chyba najrozsądniejsze i najmniej pracochłonne rozwiązanie.

Pozdrawiam,
Krzysiek




=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 04-01-2006 09:33

  Dnia Tue, 3 Jan 2006 19:12:00 +0100, "Krzysztof Wiśniewski"
<ktuvok@poczta.onet.pl> wklepał(-a):

>Bo tworzysz wyzwalacz nie taki, jak trzeba. :)

(...)

A po jakiemu ten trigger? :)

P.S.
PeBe - pisz o jaką bazę chodzi.
--
Sławomir Szyszło mailto:slaszysz@poczta.onet.pl
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [pgsql] Wykonanie triggera po =?ISO-8859-2?Q?zako=F1czeniu_tra?==?ISO-8859-2?Q?nsakcji?= =?ISO-8859-2?Q?Mam_do_napisania_triggera_plpgsq?= =?ISO-8859-2?Q?l_mo=BFe_kto=B6_b=EAdzie_w_stanie_pom_?= [pgsql] Zmienna jako pole NEW w trigger pl/pgSQL. =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?[Oralce]_Jak_sprawdzi=E6_d?= =?ISO-8859-2?Q?ok=B3adn=B1_wersj=EA_binari=F3w=3F?= [MSSQL] Wykonanie DTS za =?ISO-8859-2?Q?pomoc=B1_triggera?= =?iso-8859-2?q?firebird_i_triggery_-_logowanie_historii_zmian_zawarto=B6ci?= =?iso-8859-2?q?Jak_wykona=E6_rekompilacj=EA_procedury/triggera?= Postgresql - gdzie moge sie nauczyc pisania funkcji i triggerow w Funkcja replace w triggerach MS SQL Server 2005
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kfia-tek.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com