Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.
11.Creating Other Schema Objects ( Diğer Şema Objeleri)
VIEW Objesi
— user’a belirli seylere erişme ve belirli şeyler yapma
— dataya erişim sınırı
— sürekli kullandığımız query’ler için yazarız ( Aynıı kodu defalarca yazmamak için)
— kompleks sorgulari basite indirme
— view’ın amacı select çekmektir
— iki tip view var. join varsa, grup varsa koplex view yoksa simple view.
— sorguları tekrar tekrar yazmamak için kullanırız
— create or replace: yoksa yarat varsa degiştir demektir
— force da tablo yokken view yaratırız, noforce tablo varken view yaratırız ( default)
create view empvu80 as select employee_id, last_name, salary from employees where department_id=80;
describe empvu80; --yapisini gösterir
select from empvu80;
create view salvu50 as select employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALL from employees where department_id=50;
select * from salvu50; -- yazmış olduklarımız kadar görüntüleme var
CREATE OR REPLACE
CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;
select * from empvu80; --değişimi aşağıda görürüz
Komplex View Örneği
CREATE OR REPLACE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e JOIN departments d ON (e.department_id = d.department_id) GROUP BY d.department_name;
select from dept_sum_vu;
View’de ama select yapmaktır. Insert, delete, update gibi işlemler yapılmaz.
Eğer aşağıdakiler varsa delete yapamayız.
- grup fonk
- distinct
- group by
- rownum
Eğer aşağıdakiler varsa update yapamayız.
- grup fonk
- distinct
- group by
- rownum
- Mesela tabloda salary, view de salary*12 tutuyorsan
Eğer aşağıdakiler varsa insert yapamayız.
- grup fonk
- distinct
- group by
- rownum
- Mesela tabloda salary view de salary12 tutuyorsan
- Not null ifadeler view’de yer almıyorsa
Simple View Örneği
create or replace view emp_20 as select employee_id, last_name, hire_date, job_id, email, department_id from employees where department_id=20 -- not null ifadeler yer alır
select * from emp_20;
insert into emp_20 values ( 208, 'karatas', sysdate, 'IT_PROG', 'seka',20 ); -- view olduğunu nasıl anlarız? -- view sadece görüntüler. data tutmaz.
SELECT * FROM employees where employee_id=208; -- insert buraya yapılır
insert into emp_20 values ( 209, 'kaaratas', sysdate, 'IT_PROG', 'seeka',80 ); --biz deparment_id=20 için view yapmıştık ama department_id=80 --yaparsak view bunu göstermez
with check option constraint yirmi_olsun; with read only;
ifadelerinden birini kullanırsak data tutarlılığını sağlar ve farklı department_id girdiğimizde aşağıdaki hata ile karşılaşırız.
DROP VIEW
drop view emp_20; -- işimiz bitince view'ı kaldırabiliriz
SEQUENCES
- kurallar neticesinde unique numaralar üretir.
- üretilen numaralar ile primary key alanlari hedefleniyor
- üretecegi sayilarini memory atarak daha hizli aksiyon alabilmesini sağlayabilirsin
- increment by artis
- cycle geri dönüsü yoksa min value gereksiz. geri dönüs varsa oraya döner
- cache üret dedigimiz numaralari cache at diyebiliriz. daha performansli çalismak için
create sequence dept_deptid_swq increment by 10 start with 120 max value 9999 nocache nocycle; --10'ar 10'ar artar -- 120'den basla
SEQUENCE Örneği
create table seq (id number(5) constraint seq_id_pk primary key); --seq isimli ve data tiplerini belirttiğimiz tablo oluştururuz
create sequence seq_seq start with 100 increment by 1 maxvalue 10000 cache 10; --seq_seq isimli sequence oluşturduk
insert into seq values(seq_seq.nextval); -- her çalıştırdığımızda yeni satı ekler
max value’ya ulaşınca alter yapabiliriz. Değeri daha da arttırabiliriz. Alter daha sonra detaylı olarak incelenecektir.
select seq_seq.currval from dual; -- CURRVALL kaçta kaldigini gösterir
rollback , veritabanının tutarsız kapanması ,sequence başka yer kullanılması kaldığı yerden devam eder.
drop sequence seq_seq -- seq_seq sequence kaldırılır
Indexler
Kitabın içindekiler kısmı gibi düşünebiliriz.
- primary key ve unique alan varsa otomatik indekslenir.
- manuel kısımda paketlemeyi yapacak olan işi oluştururken
- create index
- indexleneğimiz tablonun kolonlarında bulunur
- where cond. da kolonun ismini yazmamız lazım
- b-tree default tipinde olusturur. dallara rowid’leri bölecek ve balans edecek şekilde dağıtacak.
- foreign keyler index koyulması gereken yerlerdir.
- index’in sıkıntısı ve sürekli oluşturulmama nedeni tablodan büyük yer kaplayabilir olmasıdır.
- index çok sık aranan yerlerde kullanılır.
- %2 ile %4 arasında gelirse teoride vardır ancak pratikte yoktur.
- istatistiklerin tutarlı ve sağlam olması gerekir. bu ilerleyen aşamaların konusudur.
- datayı tabloya insert et sonra index yap.
CREATE INDEX emp_last_name_idx ON employees(last_name);
drop INDEX indexadi -- işlem sonunda kaldırılır
SYNONYMS
— alternatif isimler oluşturma objeleri. başka user’a ait dosyayı direkt isim yazarak ulaşabiliyoruz.
CREATE SYNONYM d_sum FOR dept_sum_vu;
select * from d_sum;
drop synonym d_sum; -- alternatif ismi kaldırıyoruz.