Sezgiler WP Theme

Koyu Açık
Delphi’de SQL Kullanımı – 12 – Delphi ADO Veritabanı Bağlantısı

Otomatik Numara Üretimi(Sequence)

Yaptığı iş unique sayılar üretmektir. Belli oranlarda arttırmalar yapılmakta kullanılır. Her çağrıldığında yeni bir sayı üretir. Extra bir hesaplama yapılmadan, seri olarak tanımlandığı şekilde rakamlar üretir. Sayıları cacheden okuduğu için çok hızlı sonuç üretir.

Yazılımı;

CREATE SEQUENCE kolon

[INCREMENT BY n]

[START WITH n]

[MAXVALUE n | NOMAXVALUE]

[MINVALUE n | NOMINVALUE]

[CYCLE | NOCYCLE]

[CACHE n | NOCACHE]

INCREMENT BY n  Sayının artış miktarı belirtilir. Varsayılan değer 1’dir. Birer birer sayı arttırılır.

START WITH n  Numaranın üretileceği başlangıç numarasıdır. Varsayılan değer 1’dir.

MAXVALUE n  Numaranın alabileceği maksimum rakam yazılır. NOMAXVALUE ile bitiş numarası verilmez. Max = 1027

MINVALUE n  Numaranın alabileceği minimum rakam yazılır. NOMINVALUE ile başlangıç numarası verilmez. Min = 1

CYCLE | NOCYCLE  Maxvalue değeri kadar işlem yapıldıktan sonra işlemi tekrardan başlatır.Varsayılan değer NOCYCLE’dır.

CACHE  Cache sayısı kadar sayıyı hafızaya gönderir. Varsayılan değer NOCACHE=20’dir.

Örnek: Personel departmanının pers_id kolonunu 10’dan 50’ye kadar 2’şer 2’şer arttıralım;

CREATE SEQUENCE pers_id

INCREMENT BY 2

START WITH 10

MAXVALUE 50

NOCYCLE

NOCACHE

Örnek: Personel departmanının pers_id kolonunu birer birer arttıralım;

CREATE SEQUENCE pers_id

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOCYCLE

NOCACHE

USER_SEQUENCES : Sequences’in en son durumu gösterir.

Yazılımı;

SELECT sequence_name, min_value, max_value, increment by, last_number

FROM user_ sequences

Sequence_name  İşlemlerin tanımlandığı isimdir.

Min_value  Sayının aldığı min değerdir.

Max_value  Sayının aldığı max değerdir.

Increment_by  Sayının aldığı artış miktarının gösterir.

Cycle_flag  İşlemin tekrar yapılması isteniyorsa Y, istenmiyorsa N değerini alır.

Cache_size  Hazıfazadaki cache sayısıdır.

Last_number  Numaranın alacağı değerdir

NEXTVAL : En son aldığı sayının bir sonra alacağı değeri gösterir.

Örnek: Personel tablosuna pers_id kolonuna otomatik değerler tayarak kayıt edelim;

INSERT INTO personel

VALUES (pers_id.NEXTVAL,’Kazım’,’Sarıkaya’)

CURRVAL : O anki sayısal değeri gösterir. Eğer hiç nextval fonksiyonu kullanılmamışsa değeri boş değer gelir.

Örnek: pers_id kolonunun o anki alacağı değeri seçelim;

SELECT pers_id.CURRVAL

FROM DUAL

ALTER_SEQUENCE : Değişiklik bir yerden başlanacaksa önce drop edilir, sequence işlemini değiştirir.

Yazılımı;

ALTER SEQUENCE kolon

[INCREMENT BY n]

[MAXVALUE n | NOMAXVALUE]

[MINVALUE n | NOMINVALUE]

[CYCLE | NOCYCLE]

[CACHE n | NOCACHE]

DROP_SEQUENCE : Kolon için yaratılan işlemleri siler.

Yazılımı;

DROP SEQUENCE kolon

View

Bir tablo üzerinde sorgulama yapılması için kullanılan nesnedir. Fiziksel olarak herhangi bir yerde saklanmaz. Avantajları;

  • Database erişimini kısıtlar. Böylece sadece sorgulanan verileri gözükür.
  • Sorgulamaları kolaylaştırabilir.
  • Datayı bağımsız olarak gösterebiliriz.

Yazılımı;

CREATE [OR REPLACE] [FORCE | NOFORCE]

VIEW view_adi [alias]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY]

FORCE  Hata durumu oluşursa gözardı ettirilir. NOFORCE ise gözardı edilmez.

View_adi  Yaratılan view sorgu adıdır..

Alias  Yaratılan işlemin adıdır.

WITH CHECK OPTION [CONSTRAINT  View objesine hatalı işleme yapılmasını engeller.

Örnek: Departman numarası 41 olan peroneller için perview isminde bir view olşturalım;

    CREATE VIEW persview

AS SELECT *

FROM personel

WHERE dept_id=41

WITH CHECK OPTION CONSTRAINT empview_ck;

Departman id’si 16 olan personellerin departman numarasını 38 yapalım;

UPDATE persview

SET dept_id=38

WHERE;

Bu durumda bu değişiklik tabiki yapılamaz.

WITH READ ONLY  View objesinin sadece okuma amaçlı olduğu belirtilir. Farklı bir işlem yapıldığında bunu engeller. Aslında kayıtlar üzerinde değişiklik yapılmasını engeller.

Örnek: Departman numarası 45 olan peroneller için perview isminde bir view olşturalım;

    CREATE VIEW persview

AS SELECT *

FROM personel

WHERE dept_id=41

WITH READ ONLY;

Departman id’si 10 olan personellerin silinmesini sağlayalım;

DELETE FROM persview

WHERE;

Bu durumda işlemi keser ve uyarı verir.

USER_VIEWS : Data dictionary tablosunda view tanımları bulunur. View adı, text uzunluğu ve text’I saklar.

VİEW_NAME  Kullanıcıya ait view adlarının tutar.

TEXT_LENGTH  Sql ifadenin uzunluğudur.

TEXT  Sql ifadedir.

DROP VİEW : Yaratılan view objesini siler.

Yazılımı;

DROP VIEW view_adı

INDEX YARATMA

Indexler, bir tablonun istenilen kolonlarına daha hızlı erişim olanağı sağlamak için kullanılır. Tablodaki kayıtlar üzerinde giriş/çıkış işlemleri yapılırken dataya daha hızlı ulaşılması sağlanır. Primary key tanımlanan kolonlar için otomatik olarak index yaratılır. Index en fazla 16 kolondan oluşur. Bir kolon tipi long veya long raw olamaz.

Yazılımı;

CREATE INDEX index_adi

ON tablo_adı(kolonlar)

Örnek: Personelin adına ve soyadına göre index oluşturalım;

CREATE INDEX personel_inx

ON personel(ad,soyad);

Böylece ad kolonu öncelikli olmak kaydıyla birlikte soyadına göre sıralama yapar, yani index oluşturur. Önce ada göre sıralar, eğer aynı isimden birden fazla kayıt oluşursa bu sefer soyad kolonundaki değerlere göre sıralama oluşturur.

Index yaratabilmek için;

  • Index yaratılacak tablonun var olması gereklidir,
  • Index yaratma hakkına sahip olmalıdır,
  • Limitsiz tablespace hakkına sahip olmalıdır.

Index yaratılma ihtiyacı aşağıdaki koşullar oluştuğunda belirir;

  • Where ifadesi ile sık sık kullanılan kolonlar kullanılıyorsa,
  • Join ile birleştirme işlemi yapıldığında,
  • Kolon değerleri geniş aralıkta ise,
  • Büyük rakamlı kolonların içinde null değerler bulunuyorsa.

Index yaratılmama ihtiyacı aşağıdaki koşullar oluştuğunda belirir;

  • Tablo küçük ise,
  • Tablodaki bazı kolonlara sık sık ihtiyaç duyulmadığında,
  • Tabloda sık sık değişiklikler yapılıyorsa.

USER_INDEXES  İndex isimlerini ve unique olup olmadığı bilgilerini saklar.

Örnek: Personel tablosuna ait index dosyalarını listeleyelim;

SELECT ic.index_name,ic.column_name,ic.colum_position,ix.uniqueness

FROM user_indexes ix, user_ind_columns ic

WHERE ic.index_name=ix.index_name

AND table_name=’Personel’;

DROP INDEX  Yaratılan indexleri veri tabanından yok etmek için kullanılır.

DATABASE GÜVENLİĞİ

Database güvenliği için kullanıcılar tanımlanır. Her kullanıcının bir şifresi bulunur. Kullanıcılara belirli yetkiler verilir.

Sistem ve data güvenliği olmak üzere iki kısımda incelenir. Sistem güvenliği içinde kullanıcıya yaratma, değiştirme, silme vb. yetkiler tanımlanır. Data güvenliği için ise datalar başka bir ortama yedekleme(backup) yapılarak sağlanır.

Database level aşamaları ile güvenlik sınırlanır. Eğer yüksel level yetkisi varsa yeni kullanıcı(veya tablolar) yaratabilir veya silinebilir. Tabloların yedekleri alınabilir.

CREATE USER  Database üzerinde işlemler yapılabilmesi için kulanıcı yaratılır.

Yazılımı;

CREATE USER user_adı

IDENTIFIED BY tifre

DROP USER  Databaseden kullanıcıyı siler.

Yazılımı;

DROP USER user_adı

GRANT (Yetki)  Kullanıcıya yetki verilmesi için kullanılır.

Yazılımı;

GRANT yetkiler_roller

TO kullanıcı [PUBLIC]

[WITH GRANT OPTION]

[PUBLIC]

WITH GRANT OPTION  Sistem haklarını veya rollerini diğer kullanıcılara vermeyi sağlar. Bir rolü bu şekilde belirlersek kullanıcı rolleri değiştirebilir veya silebilir.

PUBLIC  Sistem haklarını veya rollerini tüm kullanıcılara vermeyi sağlar.

Örnek: Personel tablosunun pers_id,ad kolonlarına webserver kullanıcısı için düzeltme yetkisi verelim;

GRANT select(pers_id,ad)

ON Personel

TO webserver

Örnek: Personel tablosuna webserver kullanıcısı için seçme yetkisi verelim;

GRANT select

ON Personel

TO webserver

Örnek: Kazım kullanıcısı, webserver kullanıcısının personel tablosu için kayıt etme ve sorgulama yetkilerini verelim;

GRANT select,insert

ON personel

TO webserver

WITH GRANT OPTION

Örnek: Kazım kullanıcısının personel tablosunu tüm kullanıcılara sorugulama yapabilmesini sağlayalım;

GRANT select

ON kazim.personel

TO PUBLIC

Grant yetkisi ile kullanıcılara aşağıdaki tablodaki yetkiler verilebilir

Objeler Table View Sequences Procedure
ALTER ? ?
DELETE ? ?
EXECUTE ?
INDEX ?
INSERT ? ?
REFERENCES ?
SELECT ? ? ?
UPDATE ? ?

CREATE ROLE  Kullanıcıya yetki olarak verilen rollerdir.

Yazılımı;

CREATE ROLE rol;

Örnek:

CREATE ROLE Manager;

GRANT create table, create view TO Manager;

GRANT Manager TO webserver;

Manager isminde rol tanımlandı. Tablo ve view yaratma yetkisi verildi. Bu yetkiler Webserver isminde kullanıcıya aktarıldı.

Kullanıcının şifresini değiştirmek için;

ALTER USER user_adı IDENTIFIED BY şifre

REVOKE  Verilen rolleri geri alır.

Yazılımı;

REVOKE rol

ON tablo

FROM kullanıcı

Örnek: webserver kullanıcısının şifre tablosuna kayıt etme,düzeltme ve sorgulama yetkilerini kaldıralım,

REVOKE select,insert,update

ON tifre

FROM webserver

CREATE SYNONYM  Bir objenin aynısının kopyasının alarak kendi userında yaratır.

Yazılımı;

CREATE [PUBLIC ] SYNONYM obje_adı

FOR kullanıcı.obje

PUBLIC  Tüm kullanıcıların yetkilerini alır.

Örnek: Webserver’ın personel tablosunun aynısını kendi alanımızda yaratalım

CREATE SYNONYM personel

FOR webserver.personel

DROP SYNONYM  Bir objenin aynısının kopyasının alarak yaratılan objeyi siler.

Yazılımı;

DROP [PUBLIC ] SYNONYM obje_adı

ADVANCED SQL

IN  Liste içinde belirlenen değerlerdir.

NOT IN  Liste içinde olmayan tüm değerlerdir.

ANY  Alt sorgulamadan seçilen değerlerden en az biri karşılaştırılır.

ALL  Alt sorgulamadan seçilen değerlerden hepsi karşılaştırılır.

İçerik için yorum bulunamadı.
Cevap yaz: