Diğer Şema Nesnelerinin Oluşturulması
Tablolardan ayrı olarak, diğer temel şema nesneleri görünümler, diziler, dizinler ve eşanlamlılardır. Eş anlamlılar, yalnızca veritabanı nesneleri için takma adlardır. Eşanlamlılar ayrıca, bir veritabanı nesnesinin gerçek adını gizleyerek sorgu yazmayı basitleştirir ve bir sistem güvenliği öğesi sağlar. Diziler, tamsayı değerlerinin otomatik olarak oluşturulmasını destekleyen özel veritabanı nesneleridir ve genellikle Tablolar için birincil anahtar değerleri oluşturur. Tablolardan bilgilerin hızlı bir şekilde alınmasını kolaylaştırmak için tablo sütunlarında dizinler oluşturulur.
Görüntüleme
Veritabanı görünümü, bir sorguya dayalı mantıksal veya sanal bir tablodur. Görünümler, tıpkı tablolar gibi sorgulanır.Bu, bir geliştirici olarak sizin bakış açınızdan veya bir veritabanı sistemi kullanıcısının bakış açısından, bir görünümün bir tabloya benzediği anlamına gelir. bir nesne bir veritabanının veri sözlüğünde depolandığı için; ancak, bir görünüm hiçbir veriyi depolamaz. Bir veritabanı ayrıca bir görünüm oluşturmak için yürütme planını da saklar - bu, bir görünümün SELECT sorgusu tarafından sunulan gerçek veriler depolanmasa bile verilerin bir görünüm kullanılarak hızlı bir şekilde alınabileceği anlamına gelir. Daha ziyade, bir görünümün tanımlandığı veritabanı tablolarından bir görünüm sorgulandığında veriler "bir araya toplanır" - bunlar temel tablolar olarak adlandırılır.
Genel sözdizimi aşağıda verilmiştir.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW [ViewName]
[(Column Alias Name...)]
AS [Query]
[WITH [CHECK OPTION] [READ ONLY] [CONSTRAINT]];
Sözdiziminden,
FORCE seçeneği, görünüm referanslarının halihazırda mevcut olmadığı bir temel tablo olsa bile bir görünümün oluşturulmasına izin verir. Bu seçenek, temel tabloların ve eşlik eden verilerin fiili olarak oluşturulmasından önce bir görünüm oluşturmak için kullanılır.
NOFORCE seçeneği, FORCE seçeneğinin tersidir ve bir sistem kullanıcısının bir görünüm oluşturmak için gerekli ayrıcalıklara sahip olması ve görünümün oluşturulduğu tablolar zaten mevcutsa bir görünüm oluşturmasına izin verir. Bu varsayılan seçenektir.
YALNIZCA OKUNAN seçeneği, salt okunur bir görünüm oluşturulmasına izin verir. SİL, EKLE veya GÜNCELLEME komutlarını, salt okunur bir görünüm için verileri değiştirmek için kullanamazsınız.
WITH CHECK OPTION yan tümcesi, görünüm aracılığıyla seçilebilen satırların güncellenmesine izin verir.Ayrıca, değerler üzerindeki kısıtlamaları belirlemenizi sağlar. CONSTRAINT yan tümcesi, bir veritabanı yöneticisinin benzersiz bir ad atamasını sağlamak için WITH CHECK OPTION yan tümcesi ile birlikte çalışır. Bir veritabanı yöneticisi CONSTRAINT yan tümcesini atlarsa, Oracle kısıtlamaya otomatik olarak sistem tarafından üretilen ve çok anlamlı olmayacak bir ad atayacaktır.
Görünüm Türleri
Basit bir görünüm yalnızca bir tablonun üstünde oluşturulur.Bu işlev veya grup cümlesine sahip olmayan basit bir SELECT sorgusudur, ancak herhangi bir dönüşüm olmadan tablodan sütunların seçilmesi Görünümde bir DML gerçekleştirilirse, hemen yansıtılır. taban tablosunda.
Birleşimler kullanılarak birden çok tabloda Karmaşık bir görünüm oluşturulur.SQL işlevlerini, İşlevlere göre gruplandırmayı içerebilir, ancak görünüm birden fazla veri üzerinde olduğu ve sütunların seçimi de basit olmadığı için üzerinde DML işlemine izin vermez.
İllüstrasyon
Simple View: Aşağıdaki basit görünüm, DEV olarak JOB ID'ye sahip çalışanlar için çalışan adını, departman kimliğini ve maaşını seçin.
CREATE OR REPLACE VIEW v_emp_dev
AS
SELECT first_name, department_id, salary
FROM employees
WHERE job_id = 'DEV';
Complex view: Aşağıdaki örnek, departman adını, departmanda alınan ortalama maaşı ve departmanda çalışan çalışan sayısını göstermektedir.
CREATE OR REPLACE VIEW EMP_VU
AS
SELECT department_name, AVG (salary) avg_sal, COUNT (first_name) count
FROM employees E, departments D
WHERE E.department_id = D.department_id
GROUP BY department_name;
DESCRIBE [view name]görünüm yapısını açıklar. Sütunlar, görünüm tanımında olduğu gibi aynı sırayla listelenir.
Bir Görünümde DML işlemleri
DML işlemleri basit görünümlerde kolaylıkla uygulanabilir. Daha önce belirtildiği gibi, ekleme, güncelleme ve silme işlemleri aslında temel tabloda gerçekleşir.
Bir görünümde UPDATE, DELETE veya INSERT DML ifadesini çalıştırdığınızda, aslında görünümün tanımlandığı temel tablo veya tablolar için veri satırlarını değiştirirsiniz. UPDATE, DELETE ve INSERT ifadelerinin kullanımıyla ilgili kısıtlamalar vardır. İlk olarak, UPDATE, DELETE veya INSERT deyimini bir görünümle kullanmak için, görünümün güncellenebilir olması gerekir. SELECT yan tümcesi SELECT listesinde herhangi bir toplama işlevi belirtmiyorsa, görünüm güncellenebilir. Ek olarak, görünüm GROUP BY, DISTINCT veya UNION yan tümcesi veya yan tümceleri kullanılarak oluşturulmuştur. Toplama işlevlerinin bir FROM yan tümcesinde bir SELECT alt sorgusunda kullanılmasına izin verilir. Ayrıca, görünümün SEÇİM listesinde türetilmiş sütunları olamaz. Daha sonra, bir JOIN işleminin (bir birleştirme görünümü) sonucu olarak bir görünüm oluşturulursa, UPDATE ve INSERT deyimleri bir seferde yalnızca temel tablolardan birine satırları değiştirebilir veya ekleyebilir. Tek bir veri işleme dili (DML) ifadesiyle iki veya daha fazla tablodaki satırları değiştiremezsiniz. Son olarak, bir DELETE ifadesi yalnızca bir tabloya FROM yan tümcesinde başvurulursa bir görünüme göre çalıştırılabilir. Bu basitçe, belirtilmemiş bir tablodan satırları silemeyeceğiniz anlamına gelir.
CHECK OPTION maddesi İLE
WITH CHECK OPTION, bir görünüm aracılığıyla veri eklerken veya güncellerken yapılacak kontrol düzeyini belirten isteğe bağlı bir cümledir. WITH CHECK OPTION cümlesi kullanılarak bir görünüm oluşturulursa, görünüm aracılığıyla temel tabloya eklenen veya güncellenen her satır görünüm tanımına uymalıdır. Görünüm salt okunur olarak oluşturulursa seçeneğin belirtilemeyeceğini unutmayın.
Örneğin, geliştirici olan çalışanlar için bir V_EMP_DEV görünümü oluşturulur (JOB_ID = DEV).
CREATE OR REPLACE VIEW v_emp_dev
AS
SELECT first_name, department_id, salary,
FROM employees
WHERE job_id = 'DEV'
WITH CHECK OPTION empvu_dev;
Bir kullanıcı, görünüm aracılığıyla bir İK çalışanının maaşını güncellemeye çalışır ancak bir istisna ile karşılaşır. Bunun nedeni, görünümün KONTROL SEÇENEĞİ İLE yaratılmış olmasıdır.
UPDATE v_emp_dev
SET salary = salary+500
WHERE JOB_ID = 'HR';
ORA-01402: view WITH CHECK OPTION where-clause violation
Basit bir görünüm olsaydı, UPDATE ifadesi herhangi bir istisna yaratmazdı.
Görünümü düşürmek
Bir veritabanı yöneticisi (DBA) veya görünüm sahibi, DROP VIEW deyimiyle bir görünümü bırakabilir. Bir görünümün tanımlanmış kısıtlamaları varsa, bir görünümü bırakırken CASCADE CONSTRAINTS yan tümcesini belirtmeniz gerekir; aksi takdirde, DROP VIEW deyimi işlenemez. Eşanlamlı veya somutlaşmış görünüm gibi başka bir görünüm veya başka bir veritabanı nesnesi (bu nesnelerin her ikisi de bu bölümde daha sonra tartışılacaktır) bırakılan bir görünüme başvurursa, Oracle bu veritabanı nesnelerini düşürmez; Oracle bunları geçersiz olarak işaretler. Bu geçersiz nesneleri kaldırabilir veya yeniden geçerli kılmak için yeniden tanımlayabilirsiniz.
Aşağıdaki DROP VIEW komutu veri tabanından EMP_VU görünümünü çıkarır.
DROP VIEW EMP_VU;
Diziler
Oracle, bu tür bir kullanım için benzersiz sayı dizileri oluşturma yeteneği sağlar ve bunlar diziler olarak adlandırılır.Genel olarak, sıralar, veritabanı tablolarında birincil anahtar değerleri olarak kullanılan benzersiz, sıralı tamsayı değerleri oluşturmak için kullanılır. artan veya azalan sırada oluşturulabilir. Sırayla oluşturulmuş bir sayının geri alınamayacağını unutmayın.
Sözdizimi
CREATE SEQUENCE <sequence name>
[INCREMENT BY < number >]
[START WITH < start value number>]
[MAXVALUE < MAXIMUM VLAUE NUMBER>]
[NOMAXVALUE]
[MINVALUE < minimum value number>]
[CYCLE | NOCYCLE]
[CACHE < number of sequence value to cache> | NOCACHE]
[ORDER | NOORDER];
Sözdiziminden,
CREATE SEQUENCE deyimi benzersiz bir sıra adı belirtmelidir. İfadede gerekli olan tek cümle budur. Diğer maddelerden herhangi birini belirtmezseniz, üretilen tüm sıra numaraları Oracle varsayılan ayarlarını takip edecektir.
INCREMENT BY yan tümcesi, her sayı üretilirken bir dizinin nasıl artacağını belirler. Varsayılan artış birdir; ancak, bir dizinin sayıları atlaması için iyi bir nedeniniz varsa, farklı bir artış belirtebilirsiniz. Pozitif sayısal bir artış, seçtiğiniz aralığa eşit bir aralıkla artan sıra numaraları üretir. Negatif bir sayısal artış, azalan sıra numaraları oluşturur.
START WITH yan tümcesi, dizi için başlangıç sayısal değerini belirtir - varsayılan başlangıç numarası birdir.Ek olarak, sütunda artık sıra değerlerini depolayacak veriler içeren bazı satırlarınız varsa, bir başlangıç değeri belirtmelisiniz.
MAXVALUE yan tümcesi, bir dizinin artırılabileceği maksimum değeri belirtir. Bir MAXVALUE yokluğunda, bir dizi için üretilebilecek izin verilen maksimum değer oldukça büyüktür, 10 üzeri 27. kuvvet - 1. Varsayılan NOMAXVALUE şeklindedir.
MINVALUE yan tümcesi, azalan bir dizi için bir dizinin minimum değerini belirtir (azalan sırada sayılar üreten bir dizi). Varsayılan NOMINVALUE değeridir.
CYCLE yan tümcesi, dizi belirtilen MAXVALUE değerine ulaştığında sıra değerlerinin yeniden kullanılabileceğini belirtir. Sıra döngüleri devam ederse, tekrar BAŞLAT değerinden başlayarak sayılar oluşturulur.
CACHE yan tümcesi, Oracle'ın önbellekte depolanmak üzere belirli bir dizi sıralı numara üretmesini sağlayarak sistem performansını iyileştirebilir.
Bir sayı belirtmeden CACHE belirtirseniz, varsayılan önbellek boyutu 20 sıra numarasıdır.İsteğe bağlı olarak, sıra numaralarının önbelleğini önlemek için NOCACHE belirtebilirsiniz.
ORDER yan tümcesi, sıra numaralarının istendikleri tam kronolojik sırayla tahsis edildiğini belirtir.
NEXTVAL ve CURRVAL
Sıra değerleri, currval ve nextval adlı iki sözde sütun kullanılarak oluşturulur. Sözde sütun bir tablo sütunu gibi davranır, ancak sözde sütunlar gerçekte bir tabloda depolanmaz. Bir sonraki sözde sütunu ilk seçtiğinizde, içindeki başlangıç değeri Sonraki değer sözde sütununun sonraki seçimleri, dizinin INCREMENT BY yan tümcesinde belirtildiği gibi artmasına ve yeni oluşturulan sıra değerini döndürmesine neden olur. currval sözde sütunu, dizinin şu anki değerini döndürür, bu değer tarafından döndürülür nextval için son referans.
Bir oturumda, dizideki ilk eylem CURRVAL değil NEXTVAL olmalıdır. Bunun nedeni, bir oturumda, NEXTVAL diziden oturumun ilk sayısını oluşturduğunda, Oracle'ın CURRVAL'deki mevcut değeri tutmasıdır.
Sözdizimi:
Sequence.NEXTVAL
Sequence.CURRVAL
Dikkat edilecek noktalar -
CURRVAL ve NEXTVAL yalnızca bir select deyiminin Dış SQLinde kullanılabilir.
CURRVAL ve NEXTVAL, bir sütun birincil anahtarını değiştirmek için INSERT deyiminde kullanılabilir. Hem alt sorgu cümlesi olarak hem de VALUES tümcesinde kullanılabilir.
Tablolardaki değerleri güncellemek için CURRVAL ve NEXTVAL kullanılabilir.
CURRVAL ve NEXTVAL, DISTINCT anahtar sözcüğüyle, GROUP BY, HAVING veya ORDER BY yan tümceleriyle ve CREATE TABLE veya ALTER TABLE ifadesindeki DEFAULT ifadesiyle, VIEW seçim listesinde olamaz.
Sırayı değiştirme
Sıra sahibi, yalnızca INCREMENT BY value, MINVALUE, MAXVALUE, CYCLE veya CACHE cümleleri gibi öznitelikleri değiştirmek için bir diziyi değiştirebilir. Yapılan değişikliklerin gelecek rakamlara yansıtılacağını unutmayın.
Sözdizimi:
ALTER SEQUENCE [sequence name]
INCREMENT BY n
MAXVALUE n
NOCACHE
NOCYCLE
Sırayı düşürmek
DROP SEQUENCE komutu, yeniden oluşturulması gereken veya artık gerekmeyen dizileri bırakır.
DROP SEQUENCE [sequence name]
Dizinler
Dizinler, SELECT sorgusunun performansını ayarlamak için kullanılan veritabanı nesneleridir. Birincil anahtar kısıtlamaları, benzersiz dizinler, benzersiz olmayan dizinler ve diğerlerinin yanı sıra birleştirilmiş dizinler zorlamak için kullanılanlar da dahil olmak üzere farklı dizin türleri vardır. sorgular, Oracle'ın sonuç tablosu için gerekli satırları döndürmek için bir tablodaki tüm satırları taramasını gerektirir. Tablo sütunlarında, daha sonra sütunun tüm değerlerini dizin segmenti altında saklayan bir dizin oluşturulur. Sıranın aksine, dizinler tablodur Tablo düşürüldüğünde otomatik olarak bırakılırlar.
Dizinler otomatik veya manuel olarak oluşturulabilir. Bir PRIMARY KEY kısıtlaması veya UNIQUE kısıtlaması belirlediğinizde, Oracle belirtilen tablo için hızlı veri alımını desteklemek için otomatik olarak benzersiz bir dizin oluşturacaktır.
Alternatif olarak, kullanıcı sorgu performansını optimize etmek için manuel olarak dizin oluşturabilir.Manuel olarak oluşturulan dizinler benzersiz olabilir veya benzersiz olmayabilir. Benzersiz olmayan dizinler B-Ağacı, Bitmap veya Fonksiyon tabanlı dizin olabilir.Varsayılan olarak Oracle, sütunlarda B-Ağacı dizinleri oluşturur İşte sözdizimi
Sözdizimi
CREATE [UNIQUE][BITMAP]INDEX index
ON table (column [, column]...);
UNIQUE ve BITMAP'in yalnızca benzersiz ve bitmap dizinleri için belirtilmesi gerektiğini unutmayın. Oracle, varsayılan olarak normal dizinler için B-Ağacı dizinleri oluşturur.
Bileşik bir dizin (birleştirilmiş dizin olarak da adlandırılır), bir tablonun birden çok sütununda oluşturulan bir dizindir. Bileşik dizindeki sütunlar herhangi bir sırada görünebilir ve tabloda bitişik sütunlar olmaları gerekmez. Bileşik dizinler, WHERE yan tümcesinin bileşik dizindeki sütunların tümüne veya baştaki kısmına başvurduğu sorgular için satır alma hızını artırır. Bir dizin maksimum 32 sütun içerebilir.
Örneğin, bir kullanıcı EMPLOYEES tablosunun HIRE_DATE sütununda IDX_EMP dizinini oluşturur. Dizin kullanımı, dizinli yol taramasını geçerek disk G / Ç'sini azaltır ve HIRE_DATE sütununda filtrelenen verileri bulur.
CREATE INDEX IDX_EMP ON employees(hire_date);
Dizini düşürmek
Dizinler değiştirilemez, ancak analiz, yeniden oluşturma veya istatistik hesaplama amacıyla değiştirilebilir. Dizin tanımının değiştirilmesi gerekiyorsa, kaldırılmalı ve yeniden oluşturulmalıdır. DROP INDEX komutunun sözdizimi basittir.
DROP INDEX index_name;
Eş anlamlı
Eşanlamlı, bir diğer addır, yani bir veritabanı nesnesine başvurma görevini basitleştirmek için kullanılan bir kısaltma biçimidir. Kavram, arkadaşlar ve tanıdıklar için takma adların kullanımına benzer. Başka bir kullanıcının sahip olduğu bir nesneye başvurmak, şema adını gerektirir. bununla ön eklenebilir. Bir eşanlamlılık yardımıyla, nesneye şema adıyla birlikte başvurma çabasını azaltırsınız.Bu şekilde, eşanlamlı isim gerçek nesne adını ve sahibini gizlediği için konum şeffaflığı sağlar.
Genel ve özel olmak üzere iki eşanlamlılık kategorisi vardır. Tüm sistem kullanıcıları için bir nesneye kolay erişim sağlamak için genel eşanlamlılar kullanılabilir. Aslında, genel eşanlamlıyı yaratan kişi eşanlamlıya sahip değildir - daha ziyade Oracle içinde var olan KAMU kullanıcı grubuna ait olacaktır.Özel eşanlamlılar ise onları oluşturan ve içinde bulunan sistem kullanıcısına aittir. kullanıcının şeması.
Sözdizimi
CREATE [PUBLIC] SYNONYM [synonym name]
FOR OBJECT;
Bir sistem kullanıcısı, diğer sistem kullanıcılarına sahip oldukları özel eşanlamlıları kullanma ayrıcalığını verebilir. Eşanlamlılar oluşturmak için CREATE SYNONYM ayrıcalığına sahip olmanız gerekir.Ayrıca, genel eş anlamlılar oluşturmak için CREATE PUBLIC SYNONYM ayrıcalığına sahip olmanız gerekir. Bir eşanlamlı genel olarak ilan edilirse, eşanlamlı isim halihazırda genel eşanlamlı olarak kullanımda olamaz. Zaten var olan bir genel eşanlamlı oluşturmaya çalışmak, CREATE PUBLIC SYNONYM komutunun başarısız olmasına neden olur ve Oracle ORA-00955'i döndürür: adı zaten mevcut bir nesne hata mesajı tarafından kullanılıyor.
İllüstrasyon
İki kullanıcının U1 ve U2.U1'in ÇALIŞANLAR tablosuna erişimi olduğunu düşünün. Dolayısıyla, EMPLOYEES tablosunda U2'ye erişimi de etkinleştirmek için, U2 şemasında bir eşanlamlı isim oluşturulabilir. Erişim U1'den U2'ye verilmelidir.
CONN U2/U2
SQL> CREATE SYNONYM EMP_SYN FOR U1.employees;
CONN U1/U1
SQL> GRANT ALL ON EMP_SYN TO U2;
CONN U2/U2
SQL> SELECT * FROM EMP_SYN;
Bir Eşanlamlıyı Kaldırmak
Bir kullanıcı, sahip olduğu eşanlamlıyı kaldırabilir. Genel eşanlamlıyı kaldırmak için DROP PUBLIC SYNONYM ayrıcalığına sahip olmalısınız.
DROP SYNONYM EMP_SYN;