Kategoriler
ORACLE

Oracle Database 11g – SQL Temelleri I ||Creating Other Schema Objects

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)

complex and simple view

create view empvu80
as select employee_id, last_name, salary
from employees
where department_id=80;
describe empvu80;

--yapisini gösterir

describe empvu80;

select from empvu80;

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

select * from salvu50;

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

create replace

 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;

komplex view örneği

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;

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.

view olduğunu nasıl anlarız?

SELECT * FROM employees where employee_id=208;

-- insert buraya yapılır

insert buraya yapilir

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.

with check option constraint yirmi_olsun;

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

insert into seq values(seq_seq.nextval);

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.

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir