Kategoriler
ORACLE

Oracle Database 11g –SQL Temelleri II || Managing Schema Objects

Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.

2. Managing Schema Objects ( Şema Objelerini Yönetime)

ALTER TABLE STATEMENT

  • — Yeni kolon ekleme ( ADD)
  • — Kolonları update etme
  • — Kolon kaldırma (DROP)
  • — Yeni kolon için default değer belirleme

Kolon Ekleme

ALTER TABLE dept80
 ADD (job_id VARCHAR2(9));

dept80 adlı tabloyu daha önceki derslerde yapmıştık. eğer rollback yaptıysanız ya da böyle bir tabloya sahip değilseniz öncelikli olarak

CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM employees
WHERE department_id = 80;

diyerek dept80 adlı bir tablo oluşturuyoruz.

create dept80

ALTER TABLE dep
ADD (job_id VARCHAR2(9));

tabloyu gördükten sonra alter table işlemi yapalım. add işleminden sonra tekrar tabloya bakarsak

select * from dept80;

alter table add

son halini elde ederiz.

Kolon Düzenleme

ALTER TABLE dept80
MODIFY (last_name VARCHAR2(30));

Kolon Kaldırma

ALTER TABLE dept80
DROP COLUMN job_id;

SET UNUSED 

Çok büyük datalar olduğunda alter table dedikten sonra drop kullanarak kolonu kaldırmak istediğimizde işlem yapılana( verinin büyüklüğüne göre 1sa. – 2sa) kadar başka kimse erişim sağlayamaz.  Bunu beklemeyi engellemek amaçlı et unused kullanılarak o kolon görünmez hale getirilir. Saniyeler içinde yapılan bu işlem sonucunda sorunsuz olarak transaction işlemlerine devam edilebilir.  Ama bu kolon arka tarafta drop edilmemiştir. Veritabanı kullanıcı yoğunluğundan çıktığında tabloyu drop edebiliriz.

ALTER TABLE <table_name>
SET UNUSED(<column_name>);
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name>;

Managing constraints

Öncesinde test1 tablosunu oluşturalım.

create table test1 (id number(5),salary number(4));

Constraint Ekleme

alter table test1 add constraint test1_id_pk
primary key (id);

--id kolonuna primary key ekler
alter table test1 add (mid number(5)); 

-- mid kolonu ekledik.
alter table test1 add constraint test1_mid_fk
foreign key (mid) references test1(id);

--mid foreign key yapılır
on delete set null 

parent key(pk ve fk bağlantısı olan) silinirse child recordlarda bulunan kolonu null yapar. Çalışanları bulunan bir manager silinirse ona null verir.
on delete cascade

child recordları da siler.

Deferring constraints

not deferrable initially,immediate
Yazmasak bile default olarak  gelir
Bu constraint’in anlamı değiştirilebilir özelliği olmayan ve devreye hemen girecek olandır. Transaction başladığı anda constraint’e  uymuyorsa uyarı verir. Deferred oluyorsa transaction biterken constraint kontrolünü gerçekleştirecektir.

Eğer bunların sonucunda tutarsız data varsa otomatik olarak rollback işlemini gerçekleştirir.

create table sales (sales_info number(5) constraint sales_info_ch check(sales_info>10000) not deferrable initially immediate ,
bonus_info number(3) constraint sales_bonus_ch check(bonus_info>1) deferrable initially deferred);
insert into sales values(15000,3);

--sorunsuz ekler

insert

insert into sales values(5000,3);

--check(sales_info>10000) olduğundan eklemez

sales_info>10000 olduğundan eklemez

insert into sales values(15000,0);

-- sorunsuz olarak ekler

bonus check

ancak bunu commit et dediğimizde otomatik olarak rollback yapar. nedeni ise  check(bonus_info>1) kısmından dolayıdır. önce ekler ancak commit ettiğimizde tutarsız datadan dolayı otomatik rollback yapar.

alter table test1 drop constraint test1_id_pk;
alter table test1 drop primary key cascade;

/* primary key'i  ayrıca bağlı olan foreign keylerle beraber drop et demek istiyoruz. */
alter table test1 disable constraint test1_id_pk;

--gerekli kontrolü yapmasını istemiyorsak
alter table test1 enable constraint test1_id_pk;

-- tekrar eski haline getirip kontrol etmesini istiyorsak
alter table sales drop column sales_info;

--sales tablosundaki sales_info kolonunu drop et.
alter table sales drop column sales_info cascade constraints;

--bağlı olduğu constaints'leri de kaldır
alter table sales rename column bonus_info 
to bonus;

-- tablonun adını değiştirir bonus_info  yapar.

DROP İşlemleri

DROP oto commit bir işlemdir. Ama buna rağmen çöp kutusunda saklanır.
Flashback ile DROP edilenleri geri getirebiliriz.

drop table sales;

--sales tablosunu kaldırır
SELECT * FROM RECYCLEBIN;

-- drop edilen işlemleri görebiliriz

SELECT * FROM RECYCLEBIN;

flashback table sales to before drop;

ile drop edilen tabloyu geri alabiliriz.

Aynı isimli constraint yaratırken sıkıntı çıkmaması için Object_name “BIN$psK8w982QYuWOjpvgoGJUw==$0” şeklinde saklar.

Geri getirilen tablonun/objenin ismini değiştirmek için:

alter table sales rename constraint "BIN$psK8w982QYuWOjpvgoGJUw==$0" to sales_bonus_chk;
create table test2(id number(5), name varchar2(30));

--test2 tablosunu yarattık
insert into test2 values(1,'Ali');
insert into test2 values(2,'İsmail');
insert into test2 values(3,'Korkmaz');
insert into test2 values(4,'Fenerbahçe');
insert into test2 values(5,'Yıkılmaz');

-- dataları insert ettik.
select * from test2

insert

 select * from test2
 where name= 'Fenerbahçe';

-- sorgumuz için full gider

table access

create index test2_name_ix on test2(name);

/* indexi yaratıyoruz. ancak upper olarak tanımlamadığımız için full gidiyor. */
select * from test2 where upper(name)='FENERBAHÇE';

FULL

daha sonra drop edip tekrar index oluşturuyoruz.

drop index test2_name_ix;
create index test2_name_ix on test2(upper(name));

-- indexi tekrar oluşturuyoruz ancak upper name olarak
select * from test2 where upper(name)='FENERBAHÇE';

-- bu sefer index'ten gittiğini görüyoruz.

İNDEX

 

drop table test2 purge;

--geri dönüşü olmayacak şekilde siler.

 External Tables

create directory ext_dir as 'C:\deneme';

 -- veritabanında deneme adında klasör oluşturduk
grant read,write on directory ext_dir to hr;

-- zaten olduğu için gerek yoktur ama kullanıcıya özel yetkileri verebiliriz.

Burada yapacağımız işlem ile dışarıda yer alan datayı veritabanımıza alıyoruz.  ORACLE_LOADER

create table
ext_table(id number(5),name varchar2(30),surname varchar2(30),salary number(5))
organization external(type ORACLE_LOADER 
default directory ext_dir
access parameters(records delimited by newline
nobadfile
nologfile
fields terminated by ',')
location('test.txt')
)

test.txt isimli dosyamızı  aşağıdaki gibi oluşturduktan sonra tablo oluşturma işlemi ile bu dosyayı veritabanımıza tablo olarak ekliyoruz.

test.txttablomuzu oluşturduktan sonra

select * from ext_table

select * from ext_table

Gördüğümüz gibi tablomuz eklenmiştir.

ORACLE_DATAPUMP 

Bu işlem ise tam tersi olarak içerdeki bir tablonun verilerini dışarı aktarır.

CREATE TABLE emp_ext
(employee_id, first_name, last_name)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION
('emp1.exp','emp2.exp')
)
PARALLEL
AS
SELECT employee_id, first_name, last_name
FROM employees;

ORACLE_DATAPUMP

 

çalıştırdıktan sonra deneme klasörünün altında dosyaları görebiliriz.

Bir cevap yazın

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