28 Temmuz 2018 Cumartesi

Sqlite sütun(column) veri tipi(data type) değişikliği

Merhaba,
bu yazımda sizlere SQLITE üzerindeki bir tabloya ait olan sütunun(column) veri tipinin nasıl değiştirileceğini anlatacağım. Bu işlemi diğer database lerde ALTER table ... şeklinde bir SQL cümlesiyle yapabilirsiniz. Ancak SQLITE'ın bu noktada ALTER TABLE desteği olmadığı için  aşağıdaki adımları uygulayarak tip dönüşümüne çözüm bulabilirsiniz.

Bu senaryoda müşteri(customer) tablosundaki Integer olan telefon(Phone) sütununu String'e dönüştürelim.
PHONE INTEGER --> PHONE TEXT şeklinde güncellenecek.

aşağıdaki komutlarla mevcut tablodaki verileri başka bir tabloya alıp ilgili tip dönüşümünü yaptıktan sonra verileri tekrar geri alacağız.

ilk olarak senaryomuz gereği PHONE sütunu  INTEGER olacak şekilde tablo oluşturun
CREATE TABLE IF NOT EXISTS customer(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,LASTNAME TEXT,PHONE INTEGER,CREATE_DATE DATE DEFAULT (datetime('now','localtime'))) 

Oluşturduğumuz bu tabloya birkaç kayıt atmak için aşağıdaki SQL cümlelerini çalıştırın
INSERT INTO customer('NAME','LASTNAME') VALUES  ('levent','YILDIZ');
INSERT INTO customer('NAME','LASTNAME') VALUES  ('ali','ALIOĞLU');
INSERT INTO customer('NAME','LASTNAME') VALUES  ('veli','VELIOĞLU'); 

İçinde kayıtlar bulunan tablonun yapısı ve içindeki verileri alarak yeni bir temp tablo oluşturun
 CREATE TABLE customer_tmp_table AS SELECT * FROM customer;

Temp tablo oluşturduktan sonra içinde veriler olan eski tabloyu silin
 DROP TABLE customer;

Tabloyu yeni yapısıyla PHONE sütunu TEXT olacak şekilde yeniden oluşturun
 CREATE TABLE IF NOT EXISTS customer(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,LASTNAME TEXT,PHONE TEXT,CREATE_DATE DATE DEFAULT (datetime('now','localtime')))

Temp tabloya attığımız değerleri çekerek yeni ve güncel tabloya insert edin
 INSERT INTO customer SELECT * FROM customer_tmp_table;

Son olarak artık ihtiyacınız kalmadığı için temp tabloyu silin
DROP TABLE customer_tmp_table;