2011-12-06 11 views
8

Tabloda varchar2, 4000 baytlık bir alanım var. 50000'den fazla satır var. Tüm satırların bu alanda verileri yoktur. Birkaç veri alanı 255 bayttan fazladır, ancak bazıları 4000'dir. Tabloyu yeni bir uygulamaya yerleştirmek için alanı 255 bayta kısaltmam gerekir.Oracle'da varchar2 alanı nasıl kısaltılır?

Uzunluğu 255'e düşürecek bir SQL deyimi var mı? Verilerin kaybedileceğini biliyorum, bu yeni uygulamanın maliyetinin bir parçası. Kesim keyfi olmalı, durumu 255'te durduracaktır.

+0

güncelleme ve alt dize – xQbert

cevap

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

sonra alter table255 için sütunun uzunluğunu ayarlamak için:

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

çok teşekkür ederiz! – user761758

+8

sadece birkaç satır olduğu için, sadece çok büyük olan kayıtları güncellerdim ... 'WHERE LENGTH (text2)> 255' –

+1

TEORİ SORU: Bunun nasıl yardımcı olacağını merak ediyorum. İlk bakışta buna katılıyorum. Ama düşünmeye başladığımda merak etmeye başladım. nerede ile, önce bir uzunluk yapmak zorunda olurdu (performans hit) Uzunluğunda bir dizin olduğundan şüphelendiğim gibi HER kayıtta. o zaman alt dizgeye sahiptir. Yani bana göre daha yavaş olabilir. Sadece str kullanarak, her kayıt için bir kez sayıyor ve her seferinde 255 veya dizenin sonunda durur. uzunluğunda ise herşeyi saymak zorundadır. sonra alt dizini yapın. Sadece düşünce için yiyecek. – xQbert

İlgili konular