Oracle Ders 7 – Data Manipulation & Transaction Control – part 1
Merhaba Arkadaslar,
Daha onceki derslerimizde create,alter,drop tables gibi komutlari kullanmistik, bu komutlar Data Definition Language (DDL) konusuna girmektedir. Bu dersimizin konusu Data Manipulation Language ve Transcaction Control komutlari olacaktir ;
- insert
- update
- delete
- commit
- rollback
- savepoint
- lock table
Oncelikle Oracle SQL Developerimizda su komutlari calistiriyoruz. oracle_ders7
Daha sonrasinda su komut ile yeni bir tablo olusturalim.
CREATE TABLE acctmanager (amid CHAR(4), amfirst VARCHAR2(12) NOT NULL, amlast VARCHAR2(12) NOT NULL, amedate DATE DEFAULT SYSDATE, amsal NUMBER(8,2), amcomm NUMBER(7,2) DEFAULT 0, region CHAR(2), CONSTRAINT acctmanager2_amid_pk PRIMARY KEY (amid), CONSTRAINT acctmanager2_region_ck CHECK (region IN ('N', 'NW', 'NE', 'S', 'SE', 'SW', 'W', 'E')));
Tablomuzu basariyla olusturduktan sonra artik yeni kayit ekleyebiliriz.
Insert Komutu
Aslinda bu dersimize kadar bir cok defa insert komutunu kullandik burada daha detayli olarak basli basina bir bolum olarak isleyecegiz.
INSERT INTO tablename [(columnname,…)]
VALUES (datavalue,…);
- Anahtar kelime olan INSERT INTO dan sonra tablomuzun adini yazariz. Daha sonra kolon adlarini yazariz, burada koseli parantez bunun opsiyonel oldugunu belirtmektedir
- VALUES anahtar kelimesinden sonra her bir kolon icin degerler girilir
- Eger sadece belirli kolonlar icin deger girilecekse veya kolon adlarinin sirasi farkli sekilde yazilmissa , bu siraya uygun ve belirtilen kolon kadar deger VALUES tan sonra girilmelidir.
insert into acctmanager values ('L100','Levent','Erguder','18-JUN-09',1000,350,'NE');
Ilk kaydimizi ekledik, burada kolon adlarini listelemedik , eger tum degerleri values de verirsek kolon adlarini listelememize gerek yok.Eger bir kolon icin deger vermeyip atlatsak not enough values hatasi aliriz.
Kayit eklenirken karsilasilan hatalardan birisi, number alan icin ‘ ‘ tirnak isaretleri arasinda deger vermektir, tirnak isaretleri bu degerin string oldugunu belirtir. Bu nedenle String alanlar icin tek tirnak icerisinde deger verilmelidir.
Region kolonumuzda bir kisit bulunmaktadir, daha onceki derslerimizde bu konuyu islemistik.Burada bizden N’, ‘NW’, ‘NE’, ‘S’, ‘SE’, ‘SW’, ‘W’, ‘E’ degerlerinden birini bekliyor.Ya da NULL deger verecegiz bunun icin su uc komuttan birini kullanabiliriz.
Burada dikkat ederseniz tirnaklar arasinda bosluk bulunmuyor.Bu sekilde kaydettigimizde null olarak kayit dusecektir.
Ya da direkt olarak null deger verebiliriz.
Son olarak son kolon haric hepsini listeleyip degerler verebiliriz.
insert into acctmanager values ('C100','Cagri','Cetin','30-JUN-09',1500,500,''); insert into acctmanager values ('C100','Cagri','Cetin','30-JUN-09',1500,500,null); insert into acctmanager (amid, amfirst, amlast, amedate, amsal, amcomm) values ('C100', 'Cagri', 'Cetin', '01-OCT-09', 1500, 500);
Virtual Column ( Sanal Kolon)
Bir kolon diger kolonlarin degerlerinden olusturuluyorsa , virtual column olarak isimlendirilir. ornek olarak;
alter table acctmanager add (amearn as( amsal+amcomm));
Gordugunuz gibi tablomuza amearn kolonu eklendi ve alter table komutumuzda belirttigimiz gibi amsal+amcomm toplami olarak sonuclari gosterdi.
Peki Virtual Column lara insert islemi uyar mi ? 🙂
insert into acctmanager (amid,amfirst,amlast,amsal,amcomm,region,amearn) values ('O200','Ozkan','Ozbas',2000,'500','NW',2500);
gordugunuz gibi SQL Error: ORA-54013: INSERT operation disallowed on virtual columns hatasi aldik 🙁
insert into acctmanager (amid,amfirst,amlast,amsal,amcomm,region) values ('O200','Ozkan','Ozbas',2000,'500','NW');
virtual column alanini ve degeri kaldirdigimizda basariyla kayit eklenecektir.
Ozel Karakter Iceren Kayitlar
String alanlar tek tirnak icerisinde eklendigini gormustuk. peki ya ekleyecegimiz string icerisinde tek tirnak varsa bu durumda nasil ekleyecegiz ?
insert into acctmanager (amid,amfirst,amlast,amsal,amcomm,region) values ('B200','Burak's','Okumus',3000,'700','NW');
SQL Error: ORA-00917: missing comma hatasi verecektir. Basitce tek tirnagi 2 kere yazdigimizda kayit basariyla eklenecektir,
insert into acctmanager (amid,amfirst,amlast,amsal,amcomm,region) values ('B200','Burak''s','Okumus',3000,'700','NW');
Var olan tablodan Insert islemi
INSERT INTO tablename [(columname,...)] subquery;
acctbonus tablomuz…
insert into acctbonus (amid,amsal,region) select amid,amsal,region from acctmanager;
Gordugunuz gibi acctmanager tablomuzdaki kayitlarin amid,amsal,region alanlarini acctbonus tablomuza insert ettik.
not: subquery konusuna ilerleyen derslerde gelecegiz.
Update Islemi
UPDATE tablename
SET columnname = new_datavalue, …
[where condition];
- Update islemi kayit uzerinde degisiklik yapmamizi saglar
- Set anahtar kelimesi ile degistirmek istedigimiz kolonlari belirtiriz.
- where opsiyoneldir, eger sart belirlemezsek kotu sonucla dogurabilir ve tum kayitlari gunceller 🙂
update acctmanager set amedate = '01-AUG-09' where amid='L100';
amid= ‘L100’ olan kayitlarin amedate alanini guncelledik. (18-JUN-09 du daha once )
Birden fazla kolonu da guncelleyebiliriz, araya virgul koymayi unutmayalim 🙂
update acctmanager set amedate = '02-Feb-13', region='S' where amid='C100';
Substitution Variable
& (ampersand) ile disaridan deger alinabilir ve kullanilabilir, ornek olarak.
update acctmanager set region= '$region', where amid='$amid';
komutu calistirdigimizda bizden Region icin deger isteyecek..
Daha sonra AMID icin deger isteyecek.
Gordugunuz gibi islem basariyla gerceklesti.
Delete Islemi
Tablomuzdan kayit silmek icin Delete komutunu kullaniriz.
delete from tablename [where condition]
Genel formda goruldugu gibi, where durumu opsiyoneldir fakat where sarti ile bir durum belirlemezsek tum kayitlari sileriz.
delete from acctmanager where amid='L100'; amid='L100' olan kaydi sildik..
Bu dersimiz burada son bulmakta, bir sonraki bolumde Transcation Control Statement konusundan bahsedecegim.
Herkese Bol Javali Gunler.
Be an oracle man, import java.*;
Levent Erguder
Leave a Reply