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.

oracle_ders7_1

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));


oracle_ders7_2

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);


oracle_ders7_3

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.

oracle_ders7_4


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…

oracle_ders7_5jpg

insert into acctbonus (amid,amsal,region)
select amid,amsal,region from acctmanager;

oracle_ders7_6

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';


oracle_ders7_7

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..

oracle_ders7_8

Daha sonra AMID icin deger isteyecek.

oracle_ders7_9


oracle_ders7_10

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.

oracle_ders7_11

delete from acctmanager where amid='L100';
amid='L100' olan kaydi sildik..


oracle_ders7_12

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

Print Friendly, PDF & Email

Leave a Reply

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