Oracle Ders 3 – Create Table(Tablo Olusturma) ve Yonetme

Merhaba Arkadaslar,
Bu dersimizde Oracle 11 G , DDL (Data Definition Language)  komutlarini isleyecegiz. DDL tablo olusturma ve modifiye etme islemlerine denir.

Create Table( Tablo Olusturma )

create table employee (
emp_id number,
emp_name varchar2(20),
emp_surnam varchar2(20),
emp_department varchar2(20)
);

Burada Oracle in Data Type’larindan varchar2(n) ve number i kullandik.
varchar2 ( variable-length character data) 4000 karaktere kadar kapasitesi vardir. Harf, rakam, sembol iceren verileri alabilir. number in da sayisal degerlerimizi tuttugunu bilelim.

select column_name, data_type
from user_tab_columns
where table_name= 'EMPLOYEE';

sorgusu ile olusturdugumuz EMPLOYEE tablomuzun column_name  ve data_type alanlarinin listesini gorebiliriz.

SubQuery ile Tablo olusturma

SubQuery bir Select sorgusunun , SQL sorgusunun icerisinde kullanilmasidir.

create table employee_2 as (select emp_id, emp_name from employee);

Bu sekilde bir create table sonucunda employee tablomuzdan yararlanarak employee_2 tablomuzu olusturabiliriz. employee tablomuzda emp_id ve emp_name alanlarini aldik.

Desc employee_2;

ile gorebiliriz. Suan tablomuzda veri olmadigi icin employee_2 tablomuz bos. employee tablomuzda veriler olsaydi o verilerde gelecekti.
Veri olan bir tablodan , create table as ile tablo olusturdugumuzda

create table employee_2 as  (select  emp_id, emp_name from employee where 1=0);

gibi bir sorgu ile sadece tablo alanlarini alabiliriz.

Tablo Modifiye Etmek

Tablomuzda cesitli degisiklikler yapabilir, ornegin yeni bir alan ekleyebilir , silebilir veya guncelleyebiliriz.

ALTER TABLE tablename
ADD | MODIFY | DROP COLUMN | columname [definition] ;


Alter Table … ADD komutu 

Add  cumlecigi ile yeni bir column ekleyebiliriz.

ALTER TABLE tablename
ADD (columname datatype, ...);
alter table employee add (salary number);


01 oracle ders 3 alter add

employee tablomuza salary alani ekledik.

ALTER TABLE  … MODIFY

Tablomuzdaki kolonlari modifiye edebiliriz.
Column Size ini degistirebiliriz.
Data tipini degistirebiliriz.
Bir onceki dersimizden olusturdugumuz BOOKS tablomuz uzerinden devam edelim.

alter table books 
modify (title varchar2(10));

Bu sorgumuzu calistirdigimizda soyle bir hata aliriz :

Error report:
SQL Error: ORA-01441: cannot decrease column length because some value is too big
01441. 00000 – “cannot decrease column length because some value is too big”
*Cause:
*Action

Bunun nedeni mevcut kayitlardan title alani 10 karakterden fazla olan bir kaydin olmasidir.
Ayni durum number icinde gecerlidir.

number(p,s)
p–> precision yani  toplam digit(basamak) sayisidir.
s–>scale     yani ondalikli basamak sayisidir.

alter table books modify (retail number (5,1));

Error report:
SQL Error: ORA-01440: column to be modified must be empty to decrease precision or scale
01440. 00000 – “column to be modified must be empty to decrease precision or scale”
*Cause:
*Action:

Burada da benzer hata ile karsilastik, tablomuzda veri oldugu icin ve (5,2) olan degerleri (5,1) yapmamiza izin vermez.

01 oracle ders 3 alter modify

Employee tablomuzda emp_name alanini varchar2(20) den varchar2(30) yapalim. Sorunsuzca alter islemimiz gerceklesecektir.

alter table employee modify emp_name varchar2(30);

ALTER TABLE  … DROP COLUMN

Var olan bir kolonu silmek icin ;

alter table tablename drop column columname;

Bir kolonu sildigimizde bunun geri donusu yoktur. ( en azindan bildigim kadariyla 🙂 )
Tablomuzda son kalan kolonu silmemize Oracle izin vermez.
Primary key alanini silmemize Oracle izin vermez.

Daha once olusturdugumuz employee tablomuzda yer alan salary alanini silelim…

alter table employee drop column salary;


ALTER TABLE … SET UNUSED/DROP UNUSED COLUMNS

Buyukce bir tablodan bir kolonu sildigimizi dusunelim, bu islem gecikmeye neden olabilir. Bu problemden kacinmak icin kolonu SET UNUSED cumlecigi ile isaretleyip daha sonra silme islemini gerceklestirebiliriz.
Eger bir kolon SET UNUSED ile isaretlenmisse SQL sorgusunda gozukmez,
Genel format ;

ALTER TABLE tablename
SET UNUSED (columname);

veya

ALTER TABLE tablename
SET UNUSED column columname;

Employee tablomuzdaki emp_name ve emp_departmen kolonu uzerinde ornegimizi yapalim.

alter table employee set unused (emp_name);
alter table employee set unused (emp_department);

Sonra da DESC employee; sorgusunu calistirdigimizda  bu alanlarin olmadigini gorebiliriz.
Su sorgu ile unused durumundaki kolonlari gorebiliriz.

select * from user_unused_col_tabs;


01 oracle setunused

Goruldugu gibi 2 adet unused column a karsilik count degeri 2 dondu ve tablo adi da dondu. Unused durumundaki alanlari silmek icin;

alter table employee drop unused columns;

Tablo Adini degistirme

Rename eski_tablo_ismi to yeni_tablo_ismi;
Rename employee to engineer;

Kolon Adini degistirme

alter table tablename rename column columname_old to columname_new;

yukaridaki islemde ismini degistirdigimiz engineer tablomuzun emp_surname alaini eng_surname yapmak icin;

alter table engineer rename column emp_surname to eng_surname;

TRUNCATE Islemi

TRUNCATE TABLE tablename;

Bu islem tablomuzdaki verilerin silinmesini saglar. Tablomuz aynen yerinde kalir veriler ucar gider 🙂

Tabloyu Silmek

Hayatimizda istemedigimiz tablolari su sekilde ucuruyoruz.. 🙂

DROP TABLE tabloadi [PURGE];

Drop table engineer;

Diyip engineer tablomuzu  hayatimizdan cikartalim.
Drop ile tablomuzu sildigimizda oracle bu tablolari saklar. 

Su komut ile silinen tablolari gorebiliriz.

select object_name,original_name from recyclebin;

Evet neyseki bu sekilde tabloyu drop ettigimizde geri getirebiliriz.

FLASHBACK TABLE engineer TO BEFORE DROP;

Eger tabloyu su sekilde silersek geri donusumu olmaz..

drop table engineer purge;

Bu dersimiz de burada son buluyor..

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *