Oracle için Pratik Sql Komutları

Zaman zaman yazılım geliştiricileri olarak veritabanında işlem yapma gereksinimi duymaktayız. İngilizce Structured Query Language ifadesinin kısaltması olan sql dili ile veritabanında istediğimiz işleri yönetim ve tasarım olarak gerçekleştirebiliriz. Bu yazımızda özel olarak Oracle veritabanında çok sık kullanılan sql ifadelerini biraraya getirdim. Umarım birilerine faydası olur. Sizin de görmek istediğiniz sql cümleleri olursa yorum olarak belirtebilirsiniz.

Yeni Kullanıcı (Şema) Oluşturma ve Silme

Oracle veritabanında yeni kullanıcı açılması demek aynı zamanda yeni bir şema açılması anlamına gelmektedir. Yeni kullanıcı açmak için önce sistem kullanıcısı ile veritabanına bağlanmak gerekiyor. Bu işler için Sql *Plus kullanılabileceği gibi toad, pl/sql developer veya Oracle’ın kendi ürünü olan sql developer kullanılabilir. Örnekler için sql developer kullanıyorum.

create user myuser identified by mypassword;

myuser ve mypassword yerine kendi kullanıcı adı ve şifrenizi girmelisiniz.

Bu şekilde kullanıcı oluşturduktan sonra, bu kullanıcının işlem yapması için çeşitli yetkiler verilir.

grant connect, resource to myuser;

Bu yetkiler, kullanıcıya bağlanma ve resource rolünü atamaktadır. Böylece kullanıcımız pek çok işlem için yeterli yetkiye sahip olmuş olur.

Bu rollerin spesifik olarak hangi işleri yapabildiğini görmek için aşağıdaki komutu çalıştırabilirsiniz.

select privilege 
from dba_sys_privs 
where grantee = 'RESOURCE':

Resource için verilmiş olan yetkileri aşağıda görebilirsiniz:

CREATE TRIGGER
CREATE SEQUENCE
CREATE TYPE
CREATE PROCEDURE
CREATE CLUSTER
CREATE OPERATOR
CREATE INDEXTYPE
CREATE TABLE

Yeni kullanıcı oluşturduğumuz gibi silebiliriz de:

drop user myuser cascade;

Bu komut tabii ki riskli bir işlem. Kullanıcı şeması içerisinde bulunan tüm objeleri, verileri ne varsa silecektir. Veritabanı tüm bilgilerin saklandığı ortam. O yüzden dikkatli olmakta fayda var. Aksi durumda çok önemli veri kayıplarına sebebiyet veririz.

Kullanıcıyı bu şekilde sileriz. Fakat bu şemaya birileri bağlı ise, drop etmeye izin vermeyecek ve ORA-01940 hatası verecektir:

ORA-01940: Cannot drop a user that is currently connected

Bu durumda kullanıcının bağlı olduğu oturumu öldürmek gerekiyor.

Oturumu bulmak için, şu sql’i çalıştırın:

SELECT s.sid, s.serial#, s.status, p.spid
FROM v$session s, v$process p
WHERE s.username = 'MYUSER'
AND p.addr(+) = s.paddr;

sid ve serial değerlerini bulduktan sonra oturumu silebiliriz.

alter system kill session 'mysid,myserial';

Böyle yaptıktan sonra artık kullanıcıyı silebiliriz.

Aşağıda anlattığım işlemleri yapmak için yeni oluşturduğunuz kullanıcı ile login olunuz.

Yeni Tablo Oluşturma

Birincil anahtarı (PRIMARY KEY) olan products tablosu oluşturma:

CREATE TABLE products 
(
  product_id number(10) NOT NULL,
  product_name varchar2(50) NOT NULL,
  product_category varchar2(1) NOT NULL,
  product_date DATE,
  CONSTRAINT products_pk PRIMARY KEY (product_id)
);
Birincil Anahtar için Sequence Oluşturalım:
create sequence product_seq
Daha Ayrıntılı Sequence Tanımı
create sequence product_seq
minvalue 1
maxvalue 999999999999999999999
start with 20000
increment by 1
cache 20;
Kayıt Ekleme

Bazı sql sorgu yapılarını görmek için bir kaç kayıt ekleyelim:

insert into products (product_id, product_name, product_category, product_date)
values (product_seq.nextval, 'computer', 'A', '12/07/2018');

insert into products (product_id, product_name, product_category, product_date)
values (product_seq.nextval, 'mobil phone', 'A', '15/07/2018');

insert into products (product_id, product_name, product_category, product_date)
values (product_seq.nextval, 'refrigerator', 'B', '22/01/2018');
En Basit Sorgu İfadesi
select * 
from products

Verileri filtreleme için where ifadesi kullanıyoruz

select * 
from products
where product_category = 'A'

Sıralı gelmesi için:

select *
from products
order by product_name

Azalan sıra:

select *
from products
order by product_date desc;

Gruplama için:

select product_category
from products
group by product_category;

Hangi gruptan kaç kayıt olduğunu görmek için:

select product_category, count(1)
from products
group by product_category;

Sadece gruptaki eleman sayısı iki olanları getirmesi için:

select product_category, count(1)
from products
group by product_category
having count(1) = 2;
Tabloda Güncelleme
update products
set product_name = 'name changed'
where 
  product_id = 1
Mevcut Tabloya Yeni Kolon Ekleyelim/Silelim:
alter table products add newcolumn varchar2(90);

siliyoruz:

alter table products drop column newcolumn;
Tablo Silme (Drop)
drop table products;

Tetikleyici Etkisiz Hale Getirme (Disable Trigger)

alter trigger triggername disable;

 

 

 

Yorum Gönder

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

Scroll to Top