Thread View: pl.comp.lang.delphi.bazy-danych
9 messages
9 total messages
Started by bunias80
Wed, 26 Nov 2014 08:31
Firebird - dodawanie pola not null z wartością domyślną
Author: bunias80
Date: Wed, 26 Nov 2014 08:31
Date: Wed, 26 Nov 2014 08:31
15 lines
1978 bytes
1978 bytes
Czy ktoś stosuje takie zabiegi: alter table Adventures add id int default -1 not null ? wg. dokumentacji pole powinno się dodać i zrobić się "update" wszystkich rekordów na wartość -1. I ogólnie tak to działa. Jak sprawdzałem to pola mają wartość z default. Niestety ostatnio po taki dodaniu pola przy backup mam błąd: SQLCode: -625 IBErrorCode: 335544347 Komunikat błędu: "validation error for column IDWYNIK, value "*** null ***"" Wynika jakby jednak update się nie zrobił. Czy jedynym rozwiązaniem jest dodawanie: update Adventures set id = -1 where id is null zawsze tak to robicie? Czy może większość liczy na tego default'a?
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: Tomek D
Date: Wed, 26 Nov 2014 10:03
Date: Wed, 26 Nov 2014 10:03
33 lines
2199 bytes
2199 bytes
W dniu 2014-11-26 09:31, bunias80@gmail.com pisze: > Czy ktoś stosuje takie zabiegi: alter table Adventures add id int > default -1 not null ? Stosuje > > wg. dokumentacji pole powinno się dodać i zrobić się "update" > wszystkich rekordów na wartość -1. I ogólnie tak to działa. Jak > sprawdzałem to pola mają wartość z default. Z moich doświadczeń wynika, że nie działa (nie wiem co pisze na ten temat w dokumentacji). Chyba, że korzystasz z narzędzia typu IBExpert, który robi update pola po jego dodaniu. > > Niestety ostatnio po taki dodaniu pola przy backup mam błąd: SQLCode: > -625 IBErrorCode: 335544347 Komunikat błędu: "validation error for > column IDWYNIK, value "*** null ***"" > > Wynika jakby jednak update się nie zrobił. Czy jedynym rozwiązaniem > jest dodawanie: update Adventures set id = -1 where id is null > > zawsze tak to robicie? Czy może większość liczy na tego default'a? > Zawsze robię w takiej sytuacji update. To daje pewność zwłaszcza w wypadkach gdy trzeba powielić zmianę na wielu bazach. Jak się o tym zapomni to problem potrafi się objawić np. dopiero gdy będziemy chcieli odtworzyć backup bazy. Tomek D.
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: bunias80
Date: Wed, 26 Nov 2014 14:08
Date: Wed, 26 Nov 2014 14:08
13 lines
2000 bytes
2000 bytes
W dniu środa, 26 listopada 2014 11:03:43 UTC+1 użytkownik Tomek D napisał: > Zawsze robię w takiej sytuacji update. To daje pewność zwłaszcza w > wypadkach gdy trzeba powielić zmianę na wielu bazach. > > Jak się o tym zapomni to problem potrafi się objawić np. dopiero gdy > będziemy chcieli odtworzyć backup bazy. > No tylko to nie jest rozwiązanie. Dzięki "default" mogłem dodać pole w jednej transakcji. Teraz muszę zadbać o to aby skrypt aktualizacyjny po dodaniu kolumny w nowej transakcji zrobił update. W moim przypadku aktualizacje robi aplikacja i taki zabieg to komplikuje. Dziwne jest to że dodałem tak sporo pól i nie było problemu. Tylko teraz wystąpił.
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: Tomek D
Date: Wed, 26 Nov 2014 14:23
Date: Wed, 26 Nov 2014 14:23
30 lines
2270 bytes
2270 bytes
W dniu 2014-11-26 15:08, bunias80@gmail.com pisze: > W dniu środa, 26 listopada 2014 11:03:43 UTC+1 użytkownik Tomek D > napisał: > >> Zawsze robię w takiej sytuacji update. To daje pewność zwłaszcza w >> wypadkach gdy trzeba powielić zmianę na wielu bazach. >> >> Jak się o tym zapomni to problem potrafi się objawić np. dopiero >> gdy będziemy chcieli odtworzyć backup bazy. >> > > No tylko to nie jest rozwiązanie. Dzięki "default" mogłem dodać pole > w jednej transakcji. Teraz muszę zadbać o to aby skrypt > aktualizacyjny po dodaniu kolumny w nowej transakcji zrobił update. W > moim przypadku aktualizacje robi aplikacja i taki zabieg to > komplikuje. "default" nie jest rozwiązaniem na wypełnienie nowo dodanego pola zadaną wartościa, ale dla zapewnienia wartości jeśli nie zostanie ona jawnie wyspecyfikowania w poleceniu INSERT. Bardzo często przy większych zmianach w bazie konieczne jest rozbicie na kilka transakcji, więc mechanizm i tak jest niezbędny. > > Dziwne jest to że dodałem tak sporo pól i nie było problemu. Tylko > teraz wystąpił. Być może dodawałeś pole do pustej tabeli to problemu nie było. Tomek D.
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: Adam Siwoń
Date: Wed, 26 Nov 2014 14:27
Date: Wed, 26 Nov 2014 14:27
25 lines
2311 bytes
2311 bytes
W dniu 2014-11-26 15:08, bunias80@gmail.com pisze: > W dniu środa, 26 listopada 2014 11:03:43 UTC+1 użytkownik Tomek D napisał: > >> Zawsze robię w takiej sytuacji update. To daje pewność zwłaszcza w >> wypadkach gdy trzeba powielić zmianę na wielu bazach. >> >> Jak się o tym zapomni to problem potrafi się objawić np. dopiero gdy >> będziemy chcieli odtworzyć backup bazy. >> > > No tylko to nie jest rozwiązanie. Dzięki "default" mogłem dodać pole w jednej transakcji. Teraz muszę zadbać o to aby skrypt aktualizacyjny po dodaniu kolumny w nowej transakcji zrobił update. > W moim przypadku aktualizacje robi aplikacja i taki zabieg to komplikuje. > > Dziwne jest to że dodałem tak sporo pól i nie było problemu. Tylko teraz wystąpił. > A te fragmenty SQLa, które podałeś są wzięte z programu czy wpisane z ręki do posta? Może to drobiazg, ale w fragmentach kodu masz aktualizację tabeli wykonywaną na polu ID, a komunikat dotyczy IDWYNIK. Może w momencie aktualizacji ujawnia Ci się po prostu błąd na innym polu i stąd problem. -- z pozdrowieniami Adam Siwoń
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: bunias80
Date: Wed, 26 Nov 2014 15:03
Date: Wed, 26 Nov 2014 15:03
23 lines
2306 bytes
2306 bytes
W dniu środa, 26 listopada 2014 15:23:47 UTC+1 użytkownik Tomek D napisał: > "default" nie jest rozwiązaniem na wypełnienie nowo dodanego pola zadaną > wartościa, ale dla zapewnienia wartości jeśli nie zostanie ona jawnie > wyspecyfikowania w poleceniu INSERT. fragment z dokumentacji " alter table Adventures add id int default -1 not null Default values are normally not applied when adding fields to existing rows, but with NOT NULL fields they are. " więc chyba jednak jest > Bardzo często przy większych zmianach w bazie konieczne jest rozbicie na > kilka transakcji, więc mechanizm i tak jest niezbędny. Tutaj tematem nie jest jak zrobić aktualizację tylko czy ktoś stosuje samo add not null default.... i mu to działa czy może to jednak babol FB > > Być może dodawałeś pole do pustej tabeli to problemu nie było. Nie....nawet kilkadziesiąt tyś. rekordów.
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: bunias80
Date: Wed, 26 Nov 2014 15:05
Date: Wed, 26 Nov 2014 15:05
12 lines
2019 bytes
2019 bytes
W dniu środa, 26 listopada 2014 15:27:58 UTC+1 użytkownik Adam Siwoń napisał: > > A te fragmenty SQLa, które podałeś są wzięte z programu czy wpisane z > ręki do posta? Może to drobiazg, ale w fragmentach kodu masz > aktualizację tabeli wykonywaną na polu ID, a komunikat dotyczy IDWYNIK. > Może w momencie aktualizacji ujawnia Ci się po prostu błąd na innym polu > i stąd problem. > dodanie pola było przykładem z dokumentacji. Błąd zacytowałem jaki mam u siebie na bazie. stąd rozjazd z nazwami. Pole IDWYNIK dodaje dokładnie tak jak to w przykładzie tylko do innej tabeli :)
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: wloochacz
Date: Wed, 26 Nov 2014 15:36
Date: Wed, 26 Nov 2014 15:36
41 lines
2947 bytes
2947 bytes
W dniu 2014-11-26 16:03, bunias80@gmail.com pisze: > W dniu środa, 26 listopada 2014 15:23:47 UTC+1 użytkownik Tomek D napisał: > >> "default" nie jest rozwiązaniem na wypełnienie nowo dodanego pola zadaną >> wartościa, ale dla zapewnienia wartości jeśli nie zostanie ona jawnie >> wyspecyfikowania w poleceniu INSERT. I UPDATE takoż, a dokładnie - jeśli pole z wartością domyślną zostanie pominięte przy operacjach DML, to zostanie tam wsadzona wartość domyślna. > fragment z dokumentacji > " alter table Adventures add id int default -1 not null > > Default values are normally not applied when adding fields to existing rows, but with NOT NULL fields they are. > > " > więc chyba jednak jest I tak powinno to zadziałać; a więc, jeśli robisz ADD FIELD NOT NULL with DEFAULT, to przy dodaniu tego nowego pola do tabeli jego wartość powinna zostać automatycznie ustalona tym, co zostało określone jako wartość domyślna. Ale to zadziała tylko i wyłącznie wtedy, kiedy od razu nadasz ograniczenie NOT NULL. A jeśli zrobiłeś tak: 1) Dodaj nowe pole z wartością domyślną 2) Druga operacja - nadanie ograniczenia not null To efekt będzie taki, jak opisujesz. >> Bardzo często przy większych zmianach w bazie konieczne jest rozbicie na >> kilka transakcji, więc mechanizm i tak jest niezbędny. > > Tutaj tematem nie jest jak zrobić aktualizację tylko czy ktoś stosuje samo add not null default.... i mu to działa czy może to jednak babol FB W MSSQL działa ;-) >> Być może dodawałeś pole do pustej tabeli to problemu nie było. > Nie....nawet kilkadziesiąt tyś. rekordów. > -- wloochacz
Re: Firebird - dodawanie pola not null z wartością domyślną
Author: bunias80
Date: Wed, 26 Nov 2014 15:44
Date: Wed, 26 Nov 2014 15:44
24 lines
2647 bytes
2647 bytes
W dniu środa, 26 listopada 2014 16:36:40 UTC+1 użytkownik wloochacz napisał: > I tak powinno to zadziałać; a więc, jeśli robisz ADD FIELD NOT NULL with > DEFAULT, to przy dodaniu tego nowego pola do tabeli jego wartość powinna > zostać automatycznie ustalona tym, co zostało określone jako wartość > domyślna. Ale to zadziała tylko i wyłącznie wtedy, kiedy od razu nadasz > ograniczenie NOT NULL. > > A jeśli zrobiłeś tak: > 1) Dodaj nowe pole z wartością domyślną > 2) Druga operacja - nadanie ograniczenia not null > To efekt będzie taki, jak opisujesz. robię to jednym poleceniem ALTER TABLE INWESTYCJA ADD IDWYNIK INTEGER DEFAULT -1 NOT NULL zastanawia mnie jedno bo sporo pól tak dodałem. Tylko na tym się "wywala" i teraz czy powinienem przygotować update tabelaA set nowePolaA = -1 where nowePoleA is null dla każdego wcześniej dodanego pola żeby mieć czyste sumienie czy może szukać problemu co z tym konkretnym polem jest nie tak że backup się na nim wywalił. > > > W MSSQL działa ;-) > no to kupujemy FD i już wszystko przenosimy na MSSQLa. Przecież to dwa kliknięcia :-)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads