![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
jestem początkującym samoukiem i potrzebuję utworzyć trigger, który po wstawieniu danych do tabeli T1, wstawi jedną z wstawionych wartości do tabeli T2. Z tym, że jeśli wartość ta jest null albo "" (czyli defacto pusta) ma nie wykonywać inserta.. Akutalnie wygląda to tak:
I do tabeli T2 dodawane są nowe wartości.. ale są również dodawane wartości puste ( '' ) które nie mają być dodawane.. (ma po prostu nie robić tego kroku). Pewnie jest jakiś niewielki błąd.. Średniozaawansowani nie będą pewnie na pierwszy rzut oka zauważą co jest nie tak.. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
zamień OR na AND
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki.. ruszyło..
Jednakże mam inny teraz problem i nie chcąć tworzyć nowego tematu podczepie się tutaj i zapytam: czy jest możliwość wykonania takiego triggera, że.. - wstawiam wpis do tabeli zawody z jakąś datą (date) - w bazie danych są utworzone tabele na wzór - wyniki_rok, tj. wyniki_2010 ; wyniki_2011 ; wyniki_2012... - i teraz jak dodawana jest data 2013-10-05 do tabeli zawody, to na tej podstawie ma sprawdzić czy istnieje tabela wyniki_2013.. jesli nie to ma ją utworzyć.. Czy jest taki "myk" w ogóle możliwy? Jeśłi tak to proszę o jakieś sugestie (neuralgiczne miejsca z kodem, który należy tu wykorzystać.. czyli jak sprawdzać czy dana tabela isnieje i jak sam rok można wyciągnąć z daty..) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie bezsensowne... Tworzenie tabel dla poszczególnych lat.
Np. policz sumę zakupów jednego klienta za wszystkie lata (IMG:style_emoticons/default/smile.gif) powodzenia. A tak serio, to w jednej tabeli dodaj sobie indeksowane pole 'rok'. reszta bez zmian. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że rozwiązanie jest nie najszczęśliwsze ale tak to wlasnie ma wyglądać... dlatego się pytam czy jest to możliwe do zaimplementowania w triggerze..
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
nie pomagamy tworzyć bezsensownych rozwiązań
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
to nie dziękuje..
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
nie lubie kategoryzowania.
stwierdzenie ze podział tabel na lata jest z punktu złe - nie do końca pokrywa się z prawdą. potrafię sobie wyobrazić kilka istotnych powodów, dla których takie rozwiązanie ma sens << np generowanie raportów. czy tutaj jest to dobrym rozwiązaniem? nie wiem. nie znam modelu aplikacji. jedyna rada - to w procedurze która zakłada tabelę 'zawody_rok', dopisz automatycznie procedurę 'wyniki rok' skoro masz zawody - to musisz miec wyniki, generowanie tego w locie jest bez sensu. j. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
@alegorn - wreszcie jakiś konkretny głos..
Tylko teraz musze znaleźć rozwiązanie do tego.. (składniowe..) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
możesz użyć PREPARE - a przynajmniej tak myślę (IMG:style_emoticons/default/biggrin.gif)
w przykładzie masz pokazane 2 sposoby przekazywania zmiennych, aby zmodyfikować nazwę tabeli chyba będziesz musiał użyć sposobu z concat - zmienna3 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie próbuje coś w tym kierunku i ...
tak jak pisałem muszę wyciągnąć rok z daty zamiast całości.. więc znalazłem coś takiego:
i to działa dając tylko rok.. Tylko teraz ten uzyskany rok chciałbym przekazać dalej... i nie wiem jak (IMG:style_emoticons/default/sad.gif) Chciałbym uzyskać coś takiego:
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 13.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mój błąd.. tam ma być przekazana do procedury zmienna Data
Witam po dłuższej przerwie.. prace z triggerem zostały na moment wstrzymane ale teraz trzeba to dokończyc.. Z racji ograniczeń triggera w związku z tworzeniem nowych tabel zastanawiam się czy jest możliwość takiego rozwiązania.. (są to jeszcze niedopracowane składniową rozwiązania..) EDIT: Po prawie dwóch godzinach myślenia nad kodem mam taki komunikat: "Dynamic SQL is not allowed in stored function or trigger" Co w przygotowanym poniżej kodzie może wywoływać taki komunikat? I jak sobie z tym poradzić? Tworzę trigger, który wywołuje w sobie procedure, która otrzymuje jako parametr datę z operacji triggera..
a procedura ma za zadanie utworzyć nową tabele, która w nazwie tabeli ma mieć przekazany wcześniej rok, coś na wzór - wyniki_2013 (tylko tutaj chyba trzeba skorzystać z polecenia PREPARE do utworzenia tej zmiennej tablicowej ? Dokładnie nie wiem jak to może/powinno wyglądać..)
Wszelka pomoc/sugestie mile widzane (IMG:style_emoticons/default/smile.gif) (ps. proszę tylko o nie komentowania tego rozwiązania w stylu - "tak się nie robi, że tabela ma nazwe wyniki_2012, wyniki_2013.." bo ja o tym wiem.. ale to jest jak już wspominałem bardziej udowodnienie tego "że się da". Ten post edytował mikajlo 15.12.2012, 15:34:03 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 04:39 |