25 Nisan 2013 Perşembe

PL/SQL YAPISI ve PROCEDURE

Merhaba,
Bir sunum hazırlarken yapılanları buraya da eklemek iyi olur. Yoksa bu gidişle hiçbirşey eklemeden duracak bu blog :) Sırayı geçtim artık ne yaparsak o :))
Neyse gelelim bugün yaptıklarımıza ve tanımlara;

PL/SQL nedir :
SQL dilinin daha da gelişmiş halidir. Bünyesinde SQL cümlelerinin, döngülerin, kontrol ifadelerinin, ve diğer yapıların kullanıldığı blok yapısında olan bir dildir. Fonksiyon, prosedür, trigger tanımlamaları gibi bir çok özelliğiyle uygulamalarda kullanabileceğimiz bir yapısı vardır.


Temel bir PL-SQL yapısı:

IS
Burada değişkenler, tipler, diğer tanımlamalar yapılır

BEGIN
Asıl işin yapıldığı kısımdır. Kontrol yapıları, SQL cümleleri, döngüler...

EXCEPTION 
İşleyiş anında oluşan hataların yakalandığı yerdir. İsteğe bağlıdır

END;
İşlemin bitirilmesidir 

PL/SQL 'de bir procedure örneği (Bu benim kurstan kalan bir örneği tekrar yapışım:) en akılda kalıcı örnek benim için buydu )
İki tane bir biri ile ilişkili tablo oluşturmuş olalım.
Ve biz kursiyer tablosuna bu şekilde veri eklemiş olalım.

       Taksit tablosuna bir taksilendirmeyi eklemek istiyorum .Karşımda  kursiyer ile ilişkili bir tablo bunu yapmanın en güzel yolu SP olacaktır.

      1. Stored Procedure Oluştururken öncelikle CREATE PROCEDURE deyimi kullanılır. Ve ardından Procedure için bir isim tanımlanır. Parantez açılır ve ilgili parametreler tanımlanır. Sonra Parantez kapatılır ve IS deyiminden sonra eğer hesaplamam gereken değerler varsa onlar tanımlanır.

CREATE  PROCEDURE  taksitlendir (KURSIYER_REFNO INT ,TAKSIT_ADET INT ,TUTAR FLOAT ,ILK_TARIH DATE ,VADE_GUN INT )
IS
TAKSIT_TUTAR FLOAT;
BAS_TARIH DATE;
TAKSIT_NO INT:=0;

2.  IS ile hesaplanması gereken parametreler tanımlanırsa. Hesaplamaya başlamayı BEGIN             ile yapıyoruz. Ben burada hesaplama diyorum ancak yapılması gereken işlem demek daha uygun olur. Eğer herhangi bir şartla değişecek parametremiz varsa o da WHILE (-olduğu sürece) LOOP(döngümüz) ile ifade edilir.

BEGIN

TAKSIT_TUTAR:=TUTAR/TAKSIT_ADET;
BAS_TARIH:=ILK_TARIH;

WHILE (TAKSIT_NO<TAKSIT_ADET)
LOOP
  TAKSIT_NO:=TAKSIT_NO+1;


3. WHILE koşulundan sonra( ki eğer bir koşulumuz varsa uyguluyoruz) SQL sorgumuzu yazabiliriz. Biz burada taksit tablosuna uygun koşullar sağlanırsa veriyi eklemeyi yaptık. Daha sonra da LOOP döngüsünü END ile sonlandırdık


INSERT INTO TAKSIT(TAKSIT_REFNO,KURSIYER_REFNO,TAKSIT_NO,TARIH,BORC,ODENEN)
  VALUES(SQ_TAKSIT.NEXTVAL,KURSIYER_REFNO,TAKSIT_NO,BAS_TARIH,TAKSIT_TUTAR,0);
  BAS_TARIH:=BAS_TARIH+VADE_GUN;
END LOOP;
END;
Ve yukarıdaki ekran görüntümüzdeki gibi çalıştırdığımızda
Taksit tablosuna istediğimiz işlemler sonucu 21 referans numaralı kursiyerin bilgilerinin eklendiğini görebiliriz.

:) Şimdilik bu kadar olsun geniş anlatımları geniş zamanlara bırakalım. 



18 Nisan 2013 Perşembe

Bir oracle database'i Sql developer içine aktarıp bağlamak

Bugün oracle ile oluşturduğumuz bir veritabanını tabloları ile birlikte sql developer'a nasıl bağlarız ona bakalım. Bir iki resim (eskilerden hatırlatma) bir de sessiz bir filmimiz :) var.

Öncelikle SQL Plus ile veritabanımıza bağlanalım.,
Kullanıcı adı ve şifre olayına daha önce değinmiştik. Host string kısmına gelince. Bu system kullanıcısı adı altında oluşturulan database'lerimiz sadece bir tane olmayacağından hangisine bağlanmak istiyorsak onu yazıyoruz. Burada önceden oluşturduğum "ybs" isimli olanına bağlandım. Daha önce database üzerinde sınırlı yetkiler verebileceğimiz kullanıcılar oluşturabileceğimizi anlatmıştık. O işlemi atlayarak sadece "z1" adında bir kullanıcı tanımladığımı belirterek devam edelim .

Yukarıda göründüğü gibi bu örnek için temel özellikleri olan kısa bir tablo oluştuşturduk ve içine bir satırlık bilgi girdik.




Ve yukarıdaki şekilde grant ile başlayan komutumuzla z1 kullanıcısına sadece "select" komutu yetkisi verelim. Böylece bir kullanıcıya nasıl yetki veririz görmüş olduk. Onun aşağısındaki tabloda diğer yetkilerin de verilmiş hali var. Ancak belirttiğim gibi kullanıcılara genelde sınırlı yetki verilir çünki database administrator yane system yetkileri elinde olan kişi haricindekilerin full yetkiye sahip olması kalıcı hasarlara neden olabilir.


Ve system kullanıcısından çıkarak daha önce oluşturmuş olduğumuz z1 kullanıcısı ile giriş yapalım.



Yetki verdiğimiz için yukarıda görüldüğü gibi tabloya veri ekleyebildi.


System ile giriş yaptıktan sonra görüldüğü gibi " revoke" komutu ile istediğimiz herhangi bir yetkiyi geri alabiliriz. Ve z1 kullanıcısı ile girdiğinizde geri aldığınız bir yetki ile işlem yaptığından size yetkiniz yok olarak uyarı verecektir.

Neyse ;
Aslında bu örneğimizin temeli SQL Developer'a database'i aktarmak bağlamak, kullanıcı oluşturup yeni tablo oluşturmadan da system üzerindekini de aktarabilirdik. Ancak iki konuyu birden geçmek iyi olur diye ve örnek için zaten yeni bir tablo oluşturacağım için böyle yaptım :)
Şimdi aktarımı sessiz videomuzda izleyebiliriz.





17 Nisan 2013 Çarşamba

SQL komutları devamı

Herzamanki gibi blog sayfamıza ara verdik biliyorum :) Madem öyle dedik gündelik yaptıklarımızı ekleyelim.
Bir ERP genel anlamda ayrıntısız veritabanını oluştururken. Bir kısmı ile anlatım yapmak iyi olur. Aşağıda gördüğünüz diyagram veritabanı diyagramının bir parçası. Bu eer diyagramını bir yazılım mühendisi veya veritabanı uzmanı kolaylıkla okuyabilir. Ve hem veritabanını çıkarır hem de yazılımı nasıl yazılması gerekiyorsa bağlantıları kurarken rahatlık oluşur. Bu diyagramı önce oluşturursunuz veya veritabanı kodları yazdıktan sonra benim gibi MySql Workbench ile diyagramı SQL kodlarından oluştur diyebilirsiniz :) Hatta diyagram oluştuktan sonra yazdığınız kodlardaki hataları ve eksikleri bulmanız daha da kolaylaşıyor. O yüzden bu tarz diyagramları en baştan oluşturarak yola çıkmanızı tavsiye ederim.
Diyagrama gelecek olursak. Herbir kare bize herbir tablomuzu ifade etmekte, tablolardaki anahtarlar ise primary key, pembe işaretli olanlar ise foreign key olarak belirlenmiş demek oluyor.
Primary key : Bir sütunu eşsiz bir değer yapar. Ben genelde bunu otomatik atamaya ayarlarım. Bunu da auto_increment ile yapabilirsiniz.
Foreign key: Bir tablonun belli yada belirli sutünlarına girilecek değerleri, ilişkilenen başka bir tablonun bir sütunundaki değerine eş olması için kullanılır. 
Oluşturma kodlarımız ise şöyle :Tabi sizin yazılar rengarenk olmayacak :) sadece daha net anlaşılsın diye renklerini ayırdım.

create table calisan
(calisan_id int not null auto_increment,
calisan_adi varchar(50),
calisan_tc int not null unique,
meslek_kod int not null,
calisan_aciklama varchar(50),
primary key (calisan_id) );

create table meslek
(meslekid int not null auto_increment,
meslek_adi varchar(50),
primary key (meslekid) );

create table meslekdurumu
(meslek_id int not null,
calisan_id int not null,
foreign key (meslek_id) references meslek(meslekid),
foreign key (calisan_id) references calisan(calisan_id) )

Buradan yolla çıkarsak eğer diyelim ki bağlantı kurmayı unuttunuz ve diyagramı oluşturdunuz sonra farkettiniz ki olması gereken bir bağlantı yok:)Benim başıma geldiği gibi , o zaman şu kodlarla hemen foreign'lerimizi ekleyebiliriz. Aslında sadece foreign key için değil başka değişiklikler için de kodlar var ama şimdilik bunu yapalım. Eğer yukarıdaki koyu mavi satırlı yeri unutursak, aşağıdaki kodlarla bunu ekleyebiliriz.

ALTER TABLE meslekdurumu
ADD FOREIGN KEY (meslekid)
REFERENCES meslek(meslekid);

Şimdilik hoşçakalın. Bir dahaki sefere daha ayrıntılı yazmak üzere diyelim öyle olsun :)