2011-12-06 8 views
8

Mam pole w tabeli, która jest varchar2, 4000 bajtów. Istnieje ponad 50000 wierszy. Nie wszystkie wiersze mają dane w tym polu. Kilka pól danych ma ponad 255 bajtów, ale niektóre z nich to 4000. Aby umieścić tabelę w nowej aplikacji, muszę skrócić pole do 255 bajtów.Jak sprawić, by pole varchar2 było krótsze w Oracle?

Czy istnieje instrukcja SQL, która zmniejszy długość do 255? Rozumiem, że dane zostaną utracone, co jest częścią kosztu nowej aplikacji. Cięcie powinno być arbitralne, wystarczy zatrzymać dane w 255 bez względu na okoliczności.

+0

aktualizacja i podciąg – xQbert

Odpowiedz

28
update b set text2 = substr(text2,1,255); 

następnie alter table ustawić długość kolumny 255:

alter table b MODIFY "TEXT2" varchar2(255 byte); 
+0

Dziękuję bardzo! – user761758

+8

ponieważ istnieje tylko kilka wierszy, zaktualizowałbym tylko rekordy, które są zbyt duże ... dodaj "GDZIE DŁUGOŚĆ (text2)> 255' –

+1

PYTANIE TEORII: Ciekawi mnie, jak to mogłoby pomóc. na pierwszy rzut oka zgadzam się, że powinien. Ale gdy zacząłem o tym myśleć, zacząłem się zastanawiać. z tym, gdzie, najpierw musiałoby to zrobić długość (trafienie wydajnościowe) na KAŻDY rekord, ponieważ wątpię, żeby był indeks na długości. to musi do podłańcucha. Wydaje mi się więc, że może być wolniej. po prostu używając the str, robi liczenie raz dla każdego rekordu i zatrzymuje się na 255 lub końcu string za każdym razem. mając na uwadze, że z długością musi liczyć wszystko. następnie wykonaj podciąg. Po prostu jedzenie do myślenia. – xQbert

Powiązane problemy