Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zmiana długości pola Varchar w isteniejącej tabeli (Firebird)

365 views
Skip to first unread message

mirekk36

unread,
May 14, 2009, 2:36:29 AM5/14/09
to
Witam,

borykam siďż˝ z problemem - jak sobie radziďż˝, gdy trzeba "updejtowaďż˝" bazďż˝
danych, ju� pracuj�c� u klienta?

- odno�nie procedur, wyzwalaczy itp ju� sobie radz� (generuj� sobie skrypt w
IBExpercie i odpalam go odpowiednim komponentem u klienta na kompie i to
dzia�a)

- ale np gdy muszďż˝ zmieniďż˝ nieco strukturďż˝ tabel to jak dotychczas mam
wielkiego ZONL'a :( ..... IBExpert generuje skrypt, kt�ry po prostu za
pomoc� CREATE tworzy od nowa tak� tabel� z nowymi warto�ciami je�li chodzi o
pola, ich d�ugo�ci itp... Oczywi�cie taki skrypt nie chce si� wykona� bo
tabela ju� istnieje. Czy wi�c trzeba jako� najpierw sobie robi� kopi� danych
z tej tabeli (je�li tak to jak to si� robi przy takich updejtach
zwyczajowo) , potem siďż˝ kasuje tďż˝ starďż˝ tabelďż˝ i odpala siďż˝ taki skrypt
tworz�cy now�-poprawion�, a nast�pnie znowu kopiuje do niej dane kt�re
wcze�niej by�y?

mo�e jest jaki� prostszy spos�b, kt�rego ja - jeszcze ��todzi�b firebirdowo-
sql-owy nie widzďż˝ ???

prosz� o jakie� porady i sugestie jak do takich temat�w updejtu bazy
najlepiej podchodziďż˝.

pozdr

--
Wys�ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Skomoroch

unread,
May 14, 2009, 3:43:40 AM5/14/09
to

U�ytkownik "mirekk36" <mire...@gazeta.SKASUJ-TO.pl> napisa� w wiadomo�ci
news:guge5d$1dk$1...@inews.gazeta.pl...
> Witam,
>
> borykam si� z problemem - jak sobie radzi�, gdy trzeba "updejtowa�" baz�
> danych, ju� pracuj�c� u klienta?
>
> - odno�nie procedur, wyzwalaczy itp ju� sobie radz� (generuj� sobie skrypt
> w
> IBExpercie i odpalam go odpowiednim komponentem u klienta na kompie i to
> dzia�a)
>
> - ale np gdy musz� zmieni� nieco struktur� tabel to jak dotychczas mam
> wielkiego ZONL'a :( ..... IBExpert generuje skrypt, kt�ry po prostu za
> pomoc� CREATE tworzy od nowa tak� tabel� z nowymi warto�ciami je�li chodzi
> o
> pola, ich d�ugo�ci itp... Oczywi�cie taki skrypt nie chce si� wykona� bo
> tabela ju� istnieje. Czy wi�c trzeba jako� najpierw sobie robi� kopi�
> danych
> z tej tabeli (je�li tak to jak to si� robi przy takich updejtach
> zwyczajowo) , potem si� kasuje t� star� tabel� i odpala si� taki skrypt
> tworz�cy now�-poprawion�, a nast�pnie znowu kopiuje do niej dane kt�re
> wcze�niej by�y?
>
> mo�e jest jaki� prostszy spos�b, kt�rego ja - jeszcze ��todzi�b
> firebirdowo-
> sql-owy nie widz� ???
>
> prosz� o jakie� porady i sugestie jak do takich temat�w updejtu bazy
> najlepiej podchodzi�.
>
> pozdr
>

1. za�o�y� kolumne varchar o potrzebny rozmiarze on nazwie np. tmpvarchar
2. skopiowac do niej wartosci ze zmienianej kolumny
3. skasowac kolumne ,ktorej zmieniamy rozmiar
4. zalozyc kolumne varchar o nowej dlugosci
5. skopiowac dane z tmpvarchar
6. usunac kolumne tmpvarchar

> --
> Wys�ano z serwisu Usenet w portalu Gazeta.pl ->
> http://www.gazeta.pl/usenet/


mirekk36

unread,
May 14, 2009, 4:27:49 AM5/14/09
to
Skomoroch <ab...@microsoft.pl> napisaďż˝(a):


> 1. za�o�y� kolumne varchar o potrzebny rozmiarze on nazwie np. tmpvarchar


> 2. skopiowac do niej wartosci ze zmienianej kolumny
> 3. skasowac kolumne ,ktorej zmieniamy rozmiar
> 4. zalozyc kolumne varchar o nowej dlugosci
> 5. skopiowac dane z tmpvarchar
> 6. usunac kolumne tmpvarchar
>

tak tylko dopytam jeszcze - rozumiem, �e w pkt.2 - musz� skopiowa� wszystkie
warto�ci ze wszystkich wierszy tej kolumny ca�ej tabeli ?

sorry za m�j laicyzm, ale jeszcze tylko jedno (je�li mo�na) - jak r�cznie w
kodzie SQL mam doda� t� temporalna kolumn� czy p�niej t� now�? pytam bo co�
mi to niezgrabnie che wyj�� :( IBExpert nie pokazuje skryptu, kt�rym robi
sobie tďż˝ operacjďż˝.

--
Wys�ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Arivald

unread,
May 14, 2009, 4:43:23 AM5/14/09
to
mirekk36 pisze:
> Skomoroch <ab...@microsoft.pl> napisał(a):

>> 1. założyć kolumne varchar o potrzebny rozmiarze on nazwie np. tmpvarchar
ALTER TABLE ... ADD (column definition

>> 2. skopiowac do niej wartosci ze zmienianej kolumny

UPDATE ... SET oldcol = newcol

>> 3. skasowac kolumne ,ktorej zmieniamy rozmiar

ALTER TABLE ... DROP columnName

>> 4. zalozyc kolumne varchar o nowej dlugosci
>> 5. skopiowac dane z tmpvarchar
>> 6. usunac kolumne tmpvarchar
>>

I nie podpieraj się IBExpert'em, jeśli nie znasz się na SQL'u. Tego typu
narzędzia są dobre do przyśpieszenia pracy jak już wiesz co i dlaczego
robisz. Albo dla lam kompletnych...

--
Arivald

wloochacz

unread,
May 14, 2009, 7:23:09 AM5/14/09
to
Arivald pisze:
/ciach/

> I nie podpieraj się IBExpert'em, jeśli nie znasz się na SQL'u. Tego typu
> narzędzia są dobre do przyśpieszenia pracy jak już wiesz co i dlaczego
> robisz. Albo dla lam kompletnych...
A super pro używa notepad'a - pier..ie...
Co do jednego się zgadzam - nic nie zwalnia od myślenia i czytania (ze
zrozumieniem) dokumentacji ;-)

--
wloochacz

JS

unread,
May 17, 2009, 7:44:00 AM5/17/09
to

U�ytkownik "Skomoroch" <ab...@microsoft.pl> napisa� w wiadomo�ci
news:gugi76$k4f$1...@atlantis.news.neostrada.pl...
>

> 3. skasowac kolumne ,ktorej zmieniamy rozmiar

ta ...skasuj kolumne jak masz na w jakims tigerze albo porocedurce odwo�anie
do tej kolumny :x

jasiek


zpk

unread,
May 17, 2009, 2:30:02 PM5/17/09
to
>
> 1. założyć kolumne varchar o potrzebny rozmiarze on nazwie np. tmpvarchar

> 2. skopiowac do niej wartosci ze zmienianej kolumny
> 3. skasowac kolumne ,ktorej zmieniamy rozmiar
> 4. zalozyc kolumne varchar o nowej dlugosci
> 5. skopiowac dane z tmpvarchar
> 6. usunac kolumne tmpvarchar
>
>
>
> - Pokaż cytowany tekst -

Po co aż tyle operacji?

Zwykle długość pola zmieniamy gdy ma mieć większy rozmiar. Nie
wystarczy

alter column ?

Poza tym należy najpierw pousuwać triggery, procedury itp odnoszące
się do tego pola, a następnie przywrócić je po tej operacji.


>IBExpert generuje skrypt, który po prostu za
>pomocą CREATE tworzy od nowa taką tabelę z nowymi wartościami jeśli chodzi >o pola, ich długości itp...


Do tak prostych manipulacji proponuję IBCommand mojej konstrukcji
(do pobrania ze strony www.zpksoft.ssk.pl)

Paweł Krzyżanowski

Adam Siwoń

unread,
May 17, 2009, 4:45:25 PM5/17/09
to
zpk pisze:

>> 1. założyć kolumne varchar o potrzebny rozmiarze on nazwie np. tmpvarchar
>> 2. skopiowac do niej wartosci ze zmienianej kolumny
>> 3. skasowac kolumne ,ktorej zmieniamy rozmiar
>> 4. zalozyc kolumne varchar o nowej dlugosci
>> 5. skopiowac dane z tmpvarchar
>> 6. usunac kolumne tmpvarchar
>>
>>
>>
>> - Pokaż cytowany tekst -
>
> Po co aż tyle operacji?
>
> Zwykle długość pola zmieniamy gdy ma mieć większy rozmiar. Nie
> wystarczy
>
> alter column ?
>
> Poza tym należy najpierw pousuwać triggery, procedury itp odnoszące
> się do tego pola, a następnie przywrócić je po tej operacji.

Lepiej je wykomentować a potem przywrócić - tak jak to robi IBExpert.
Dla wielu to nie ma znaczenia, ale jednak po usunięciu procedur trzeba
pamiętać o odtworzeniu przyznanych do nich uprawnień.

--
z pozdrowieniami
Adam Siwoń

zpk

unread,
May 19, 2009, 9:42:13 AM5/19/09
to
>
> > Poza tym należy najpierw pousuwać triggery, procedury itp odnoszące
> > się do tego pola, a następnie przywrócić je po tej operacji.
>
> Lepiej je wykomentować a potem przywrócić - tak jak to robi IBExpert.
> Dla wielu to nie ma znaczenia, ale jednak po usunięciu procedur trzeba
> pamiętać o odtworzeniu przyznanych do nich uprawnień.
>
> --
> z pozdrowieniami
> Adam Siwoń
>

Ale często zmieniają się również typy parametrów wejściowych do
procedur i nie da się uaktywnić starych procedur.


pozdrawiam- Paweł Krzyżanowski

Morff

unread,
May 19, 2009, 10:42:49 AM5/19/09
to

> - ale np gdy muszďż˝ zmieniďż˝ nieco strukturďż˝ tabel to jak dotychczas mam
> wielkiego ZONL'a :( ..... IBExpert generuje skrypt, kt�ry po prostu za
> pomoc� CREATE tworzy od nowa tak� tabel� z nowymi warto�ciami je�li
> chodzi o
> pola, ich d�ugo�ci itp... Oczywi�cie taki skrypt nie chce si� wykona� bo
> tabela juďż˝ istnieje.

jezeli chcesz rozszerzy� d�ugo�c kolumny typu varchar - nie trzeba sie martwi� . Np chcesz zmieni� d�ugo�c kolumny moje_dane z 20 do 30 znak�w wystarczy zrobi� ALTER TABLE ALTER COLUMN MOJE_DANE TYPE VARCHAR(30). Poniewa� wszystkie dane istniej�ce w tej kolumnie s� kr�tsze niz nowa d�ugo�c wszystkie dane zostan�.
Jezeli chcia�bys skr�ci� kolumne .. trzeba by obci�c dane , np
update moja_tablica
set moje_dane = SUBSTRING(moje_dane FROM 1 FOR 15)

a potem juz alter table alter column ..

--
Pozdrawiam
Morff
--------------------
AQQ : 141151 (mo...@aqq.eu)

Adam Siwoń

unread,
May 19, 2009, 4:33:55 PM5/19/09
to
zpk pisze:

>>> Poza tym należy najpierw pousuwać triggery, procedury itp odnoszące
>>> się do tego pola, a następnie przywrócić je po tej operacji.
>> Lepiej je wykomentować a potem przywrócić - tak jak to robi IBExpert.
>> Dla wielu to nie ma znaczenia, ale jednak po usunięciu procedur trzeba
>> pamiętać o odtworzeniu przyznanych do nich uprawnień.
>>
> Ale często zmieniają się również typy parametrów wejściowych do
> procedur i nie da się uaktywnić starych procedur.

Wtedy zaczyna się zabawa z odpowiednią kolejnością odtwarzania - a więc
trzeba sobie wybrać co komu bardziej pasuje w jego przypadku.

Skomoroch

unread,
May 20, 2009, 2:05:34 AM5/20/09
to

U�ytkownik "Morff" <mor...@wp.pl> napisa� w wiadomo�ci
news:op.ut6ltnyaq0kutt@xp_januszk.wag54gs...

>
>> - ale np gdy musz� zmieni� nieco struktur� tabel to jak dotychczas mam
>> wielkiego ZONL'a :( ..... IBExpert generuje skrypt, kt�ry po prostu za
>> pomoc� CREATE tworzy od nowa tak� tabel� z nowymi warto�ciami je�li
>> chodzi o

>> pola, ich d�ugo�ci itp... Oczywi�cie taki skrypt nie chce si� wykona� bo
>> tabela ju� istnieje.
>
> jezeli chcesz rozszerzy� d�ugo�c kolumny typu varchar - nie trzeba sie
> martwi� . Np chcesz zmieni� d�ugo�c kolumny moje_dane z 20 do 30 znak�w
> wystarczy zrobi� ALTER TABLE ALTER COLUMN MOJE_DANE TYPE VARCHAR(30).
> Poniewa� wszystkie dane istniej�ce w tej kolumnie s� kr�tsze niz nowa
> d�ugo�c wszystkie dane zostan�.
> Jezeli chcia�bys skr�ci� kolumne .. trzeba by obci�c dane , np

> update moja_tablica
> set moje_dane = SUBSTRING(moje_dane FROM 1 FOR 15)
>
> a potem juz alter table alter column ..
>
> --
> Pozdrawiam
> Morff
> --------------------
> AQQ : 141151 (mo...@aqq.eu)

No a gdy kolumna jest zdefiniowana jako zdefiniowana domena ? alter nie
pomo�e


zpk

unread,
May 20, 2009, 4:10:13 AM5/20/09
to
>
> > Ale często zmieniają się również typy parametrów wejściowych do
> > procedur i nie da się uaktywnić starych procedur.
>
> Wtedy zaczyna się zabawa z odpowiednią kolejnością odtwarzania - a więc
> trzeba sobie wybrać co komu bardziej pasuje w jego przypadku.
>
> --
> z pozdrowieniami
> Adam Siwoń

Racja. Jednak nie stosowałem remowania - czy wyremowanie nie wymaga
również zabawy w kolejność ?

Pozdrawiam- PAweł Krzyżanowski

Morff

unread,
May 20, 2009, 5:39:32 AM5/20/09
to
Dnia 20-05-2009 o 08:05:34 Skomoroch <ab...@microsoft.pl> napisał:


>
> No a gdy kolumna jest zdefiniowana jako zdefiniowana domena ? alter nie

> pomoże

Pomoże.

ALTER DOMAIN

Adam Siwoń

unread,
May 20, 2009, 7:33:26 AM5/20/09
to
zpk pisze:

Jak komentarze obejmują wyłącznie ciała procedur i nie ma większych
zmian w parametrach to raczej nie. Piszę raczej bo obecnie pracuję
zdecydowanie częściej pracuję na Oraclu niż FB, a tam ten problem jest
rozwiązany zupełnie inaczej.

0 new messages