Data Dictionary
Database ile ilgili her türlü bilgiyi buraya atar. Buradan verilere ulaşabiliriz. Kullanıcılar, tablolar, indexler, constraintsler vb. birçok açıklayıcı bilgiler tutulur. Bütün tablo ve viewerların adlarını ve açıklamalarını görnek için ;
SELECT * FROM Dictionary;
Dictionary’nin yapısını görmek için;
DESC dictionary
İsim Tip
——————– ————————–
TABLE_NAME VARCHAR2(30)
COMMENTS VARCHAR2(2000)
Dictionary’de bulunan objelerden bazıları;
User_tables Hangi kullanıcı ile login olundu ise o kullanıcıya ait tabloları listeler.
All_tables Bütün kullanıcıların yarattığı tabloları listeler.
Dba_tables Database ile ilgili her türlü tablolar listelenir.
V$_tables Systemin performansını ölçmek için tutulan bilgilerdir.
V$_librarycache Cache’in yeterli olup olmadığını anlamak için bakılır.
V$_rollstat Rollback segmentinin yeterli olup olmadığını anlamak için bakılır.
Örnek : Login sifresiyle giren kullanıcının yarattığı tabloların listesini alalım;
SELECT table_name FROM user_tables
Örnek: Tüm obje isimlerinin listesini alalım;
SELECT object_name FROM user_objects
Database Üzerinde Transaction Kontrol Komutları
Transaction, datanın tutarlı şekilde korunmasını sağlayan yöntemdir. Database üzerinde kayıt yapma , silme, düzeltme vb. işlemlerin yapılabilmesi için aşağıdaki komutlara ihtiyaç vardır;
INSERT INTO : Tabloya yeni bir kayıt eklenmesini sağlar.
Yazılımı;
INSERT INTO table [(kolon1, kolon2, …)] VALUES (değer1, değer2, …)
Kolon Tablonun kayıt yapılacağı kolon adlarını belirler. Bir tablodaki kolon sayısı 1-254 arasında ve o tabloda var olmalıdır.
Değer O kolon için alacağı değer verilir. Kolon tipiyle aynı olmalıdır. Eğer kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır. Değerlere sysdate, user vb. hazır fonksiyonlar aktarılabilir. Eğer bir alana değer verilmesi istenmiyorsa, yani boş değer verilmesi isteniyorsa NULL değeri verilir.
Örnek: Personel tablosuna yeni bir personel giriti yapalım;
INSERT INTO personel (ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES (‘Kazım’,’Sarıkaya’,400000000,NULL,SYSDATE)
Aynı örnek için kolon sırasını bildiğimiz düsünülürse şu şekildede yazılabilir;
INSERT INTO personel
VALUES (‘Kazım’,’Sarıkaya’,400000000,NULL,SYSDATE)
Sadece tek kayıt girişi yapılıyorsa, rahat veri girişi yapılması için değerlere değişken tanımlayarak veri girişi sağlayabiliriz. Böylece table her çalıştığında yeni veri girişi yapılır.
Örnek: Personel tablosuna her çalıştırdığımızda yeni bir personel girişi yapalım;
INSERT INTO personel (ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES (‘&Adi’,’&Soyadi’,&maas,NULL,SYSDATE)
Örnek: Daha güvenli ve rahat giriş yapılacak şekilde kayıt yapılacak script yazalim;
SET ECHO OFF
ACCEPT ad PROMPT ‘Adını giriniz:’
ACCEPT soyad PROMPT ‘Soyadı giriniz:’
ACCEPT maas PROMPT ‘Maaşını giriniz:’
INSERT INTO personel(ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES (‘&ad’,’&soyad’,&maas,NULL,SYSDATE)
/
SET ECHO OFF
Kayıt yapılacak kolonların değerleri bilinmiyorsa veya başka bir tablodan değer alınması gerekiyorsa aşağıdaki yapı kullanılır;
Yazılımı;
INSERT INTO table [(kolon1, kolon2, …)] Altsorgu
Örnek: Personel tablosuna departman tablosundan departman kodu 38 olan personellerin değerlerini aktaralım;
INSERT INTO personel(ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
SELECT adi,soyadi,maasi,ayrilma,kayit_giris
FROM departman
WHERE dept_id=38
UPDATE : Tablodaki kolonların değerlerini değiştirmek için kullanılır.
Yazılımı;
UPDATE table
SET kolon1=değer1, kolon2=değer2, …
[WHERE kotul]
Kolon Tabloda değişiklik yapılacak kolon adıdır. Bir tablodaki kolon sayısı 1-254 arasında ve o tabloda var olmalıdır.
Değer O kolon için alacağı değer verilir. Kolon tipiyle aynı olmalıdır. Eğer kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır. Değerlere sysdate, user vb. hazır fonksiyonlar aktarılabilir. Eğer bir alana değer verilmesi istenmiyorsa, yani boş değer verilmesi isteniyorsa NULL değeri verilir.
Örnek: 41 nolu departmanın maaşını %13 artıralım;
UPDATE Personel
SET maas=maas+maas*13/100
WHERE dept_id=41
Örnek: 649 nolu personelin departman kodu 10 olsun;
UPDATE Personel
SET dept_id=10
WHERE personel_id=649
Eğer WHERE koşulu konulmazsa tüm tablo için kolon değerini değiştirir. Koşulu SET ile değiştirdiğimiz kolona veremeyiz.
DELETE : Tabloda belirtilen kayıdı siler.
Yazılımı;
DELETE FROM table
[WHERE kotul]
Örnek : Personelin maaşları 100.000.000 ‘dan küçük olan kayıtları silelim;
DELETE FROM Personel
WHERE maas<100000000
Bir tablodaki tüm kayıtları silmek istersek koşul konmaz. Tablo silinmez, sadece kayıtları silinir.
Örneğin DELETE FROM Personel
Foreign key veya primary key silinecek kayıtda varsa silinme hatası verir. Çünkü başka tablo ile ilişki kurulduğundan(join), diğer tablonun kullandığı kayıt vardır. O yüzden bu kaydı silebilmek için, ilişkide bulunduğu tüm kayıtları önce silmek gerekir. Aynı zamanda tablo üzerinde çalışan kullanıcı varsa kayıtlar silinemez. ROLLBACK komutu ile silinen kayıtları kurtarabiliriz(Tabi ki en son COMMIT komutu kullanılana kadar).
COMMIT : Bütün yapılan işlemleri kesin olarak kalıcı olmasını sağlar. Böylece yapılan değişiklikleri varsa diğer kullanıcılarda görür.
SAVEPOINT x : İşlemi belirli bir yere yönlendirmek için kullanılır. X ile belirtilen alan için işaret konularak istenildiğinde bu işarete kadar işlemler yapılabilir.
ROLLBACK x : Bütün yapılan işlemleri kesin olarak iptal eder. SAVEPOINT komutu ile belirlenen x kodlu alana kadar olan tüm itleri iptal eder.
Yazılımı;
ROLLBACK [TO SAVEPOINT x]
Örnek:
UPDATE personel …..
SAVEPOINT dön
DELETE FROM Personel
INSERT INTO …..
ROLLBACK dön teklindeki bir itlemle personel kaydının silinmesi ve yeni kayıt eklenmesi işlemi iptal edildi. Ama ilk yapılan değişiklik kaldı.
Read uncommitted Commit olmadan görünmez. O halde böyle level yoktur.
Read committed Oracle’ın varsayılan değeridir. Committen sonra işlem görür.
Serializable Yapılan insert işlemleri gözükmez. Eski datalar gözükür.
Read only Transaction itleminde sadece okuma var demektir.
ALTER TABLE : Yeni bir kolon eklemek, kolonun tipini veya uzunluğunu değiştirmek vb. yapısal değişiklikler yapılması için kullanılır. Eğer kolon üzerinde değişiklikler yapılacaksa dikkat edilmesi gereken koşullar vardır. Örneğin kayıt uzunluğu 15 iken uzunluğunu 10’a indirirsek kayıt içindeki bilgiler kesilir. Kolonlar ekleyebilir ve yapısal değişiklikler yapabiliriz. Constraint yapısını ekler, silebilir, enable ve disable yapabiliriz.
Yazılımı;
ALTER TABLE table
[ADD (kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[ADD [CONSTRAINT açıklama] tipi (kolon)]
[MODIFY (kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[DROP [CONSTRAINT açıklama] tipi (kolon)]
[ENABLE | DISABLE CONSTRAINT açıklama]
ADD Yeni bir kolon ekler.
MODIFY Kolonun içeriğini, uzunluğunu ve tipini değiştirir. Bunun için kayıtların değeri null olmalıdır.
DROP Kolonu siler.
Kolon Tabloda itlem yapılacak kolon adıdır.
Datatipi Kolonun alacağı tipi belirler.
DEFAULT değer Kolonun ilk alacağı değerdir. Kolon hiç değer atanmaz ise burada değer ile ifade edilen sabit veri aktarılır.
ENABLE Unique veya primary key indexlerin otomatik yaratılmasını sağlar. Bütün kayıtların tanımlanan unique veya primary key tanımına uyması gerekir.
DISABLE Unique veya primary key tanımını kaldırır.
Örnek : Personel tablosuna ek maas isminde 15 uzunluğunda bir kolon yaratalım. İlk değer 0 olsun.
ALTER TABLE Personel
ADD (ekmaas number(15) DEFAULT 15)
Örnek : Personel tablosundaki pers_id ile departman tablosundaki dept_id arasında FOREIGN KEY kuralım.
ALTER TABLE Personel
ADD CONSTRAINT personel_dept_id_fk
FOREIGN KEY (dept_id)
REFERENCES personel(pers_id)
Örnek : Personel tablosundaki maas kolonundaki alan uzunluğunu 15’e çıkaralım.
ALTER TABLE Personel
MODIFY (maas number(15))
Örnek : Personel tablosundaki maas kolonu silinsin.
ALTER TABLE Personel
DROP (maas number(15))
Örnek: Personel tablosundaki personel_id primary key için index yaratılması otomatikleştirelim;
ALTER TABLE Personel
ENABLE CONSTRAINT Personel_id_pk
DROP TABLE : Tabloyu fiziksel olarak siler. Rollback komutu ile silinen tablo geri getirilemez. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
DROP TABLE table
[CASCADE CONSTRAINTS]
Örnek: Personel tablosunu silelim;
DROP TABLE Personel
RENAME ..TO.. : Objelerin ismini değiştirmek için kullanılır. Otomatik olarak commit olur. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
RENAME eski_isim TO yeni_isim
Örnek: Personel tablosunun adını pers olarak değiştirelim;
RENAME personel TO pers
TRUNCATE TABLE : Tablodaki tüm kayıtları siler. Delete komutu gibi olmasına karşın o komuttan çok daha hızlı silme işlemi yapar. Rollback komutu ile silinen kayıtlar geri getirilemez. Otomatik olarak commit olur. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
TRUNCATE TABLE table
Delete komutu ile Truncate arasındaki en önemli fark; Delete komutu kayıtları silmek için kayıtlarda boşluk bırakır. Truncate ise tamamen kayıtları temizler, yani başa sarar.
Örnek: Personel tablosundaki tüm kayıtları silelim;
TRUNCATE TABLE Personel
COMMENT ON TABLE : Tablo veya kolonların içeriği hakkında açıklayıcı bilgi verilir. 2000 byte açıklama alanı girilebilir.
Yazılımı;
COMMENT ON TABLE table | COLUMN table.kolon
IS ‘açıklama’
Örnek : Personel tablosu açıklaması ‘Başak Sigorta’da çalışan kişiler’ olarak not düşelim;
COMMENT ON TABLE personel
IS ‘Başak Sigorta’da çalışan kişiler’
Örnek : Personel tablosundaki pers_id kolonun açıklaması ‘Personel numarası’ olarak not düşelim;
COMMENT ON COLUMN personel.pers_id
IS ‘Personel numarası’
ALL_COL_COMMENTS Yetkili olan kullanıcının kolonlarının açıklayıcı notları listelenir.
USER_COL_COMMENTS Tüm kullanıcıların kolonlarının açıklayıcı notları listelenir.
ALL_TAB_COMMENTS Tüm kullanıcıların tablolarının açıklayıcı notları listelenir.
USER_TAB_COMMENTS Yetkili olan kullanıcının tabloları için açıklayıcı notları listelenir.


