17 Ekim 2015 Cumartesi

Javascript ile Querytask Örneği

Bugün katmanlarda sorgu işlemi nasıl yapılıyor bakalım. Javascript ArcGis  kütüphanesi kullanarak katmanlarda sorguyu yapabiliriz

sorgu: function () {

       var urli = "Sorgulamak istediğimiz katmanın url uzantısını buraya yazıyorsunuz";
       var qParams = new esri.tasks.Query();
       qParams.returnGeometry = false;//geometrik bir sorgu yaptığımızda burası true olacak
         //yukarısı true olursa; 
        //qParams.geometry=geometrisiz alınan değeri buraya işleyebilirsiniz. Mesela haritaya tıklayınca aldığınız koordinatı yazarsanız tıkladığınız yerdeki sorguyu çeker.
       qParams.outFields = ["BOLGE_ADI", "ISLETME_ADI"];//katmandan herşey gelsin derseniz buraya "*" şeklinde yazın.
       qParams.where = '1=1'; //Şartımız ISLETME_ADI =="Bilecik"...gibi istediğiniz şarta göre yazabilirsiniz
       qParams.outSpatialReference = this.map.spatialReference; //Burda haritada varsaydığımız spatialReference verdik
       var task = new esri.tasks.QueryTask(urli);
       task.execute(qParams, dojo.hitch(this, this.onIsletmeAra)) //dojo üzerinden gittiğim için bu şekilde oldu. normalde task.execute(qParams, gidilecekmetod) yeterli olacaktır.
   },

 onIsletmeAra: function (featureSeti) {

        var fi;
       var valuesi = [];
       var valuesii = [];

       for (var i = 0; i < featureSeti.features.length; i++) { //sorguda feature sayısı kadar yani katmandaki veri sayısı kadar dönecek
           fi = featureSeti.features[i];  
             valuesi.push({ iname: fi.attributes.ISLETME_ADI }); // İşletme adlarını alıp valuesi diye tanımladığımız diziye yazacak
             valuesii.push({ bname: fi.attributes.BOLGE_ADI })
       
            ......artık dizideki verileri nerde göstermek isterseniz kodlamanıza ona göre devam edebilirsiniz.Ben hepsini comboxa işlediğim için şu şekilde devam ettim:

         var dataItemsi = {
        identifier: 'iname',
        items: valuesi

           };
         var storei = new dojo.data.ItemFileReadStore({
        data: dataItemsi

       });
       this.widgets.cbos.store = storei;//cbos combomuza oluştururken verdiğimiz isim.
       this.widgets.cbos.searchAttr = "iname";
   },


   },

15 Ekim 2015 Perşembe

Ortaya Karışık Ajax

Bugün çok önceleri ajax kullanarak gis yazılımımda yaptığım bir post geti yazacağız.

Haritaya tıklayınca katmandan çektiği veriyi, eşsiz bir veri(Örn:GlobalId) ile tablosal veride eşleştirerek, tablosal verileri ile birleştirip istenilen bilgileri getirmesi ve değişiklikleri kaydetmesini sağlayan güzel bir işlem ; ortaya karışık herşeyin kullanıldığı bir işlem diyebiliriz:

Servis açtık , Sql Connection sağladık. Serviste oluşturulan sınıflarda Veritabanından verileri çektik ve kaydettik.

Katman ekledik. Katmanlardan haritaya tıklanınca istenilen verileri çektik

Tablosal veriden çekilen ile katmandan çekilen arasında var olan ortak veriyi sorguladık ve tablosal veritabanındaki verileri böylece haritayı tıklayınca getirmiş olduk.
Aşağıdaki resimde haritaya tıklayınca pencereye bu verilerin geldiğini görebiliyoruz. Ekle ve Güncelle tuşları altında ajax nasıl işliyor ona bakalım.


Güzel bir yemek tarifi verir gibi de olur:)
Malzemeler:
Bir adet tablosal veritabanı(MySql üzerinde olacak)
Bir adet coğrafik veritabanı (GeoDatabase üzerinde olacak)
Bir adet iki veritabanı arasında ortak bir veri, biz globalid kullanacağız
Bir adet  arada servis etmek ve yemek için ajax

İki veri tabanını ortak attribute ile bağlıyoruz. Ajax ile karıştırarak çekiyourz ve servis ediyoruz.

Hadi bakalım başlayalım;

Visual Studio üzerinden File>New Web Site diyerek oluşturduğum proje üzerinde yaptığım bir kısım olduğu için onun üzerinden gideceğiz.
Tablosal veritabanımıza bağlantıyı servis yazarak yapıyoruz ;
Aşağıdaki resimde olduğu gibi yeni servis açtım ismini isteğinize göre verirsiniz ben Servis dedim geçtim .



//Tablosal veritabanına bağlantı 
//Aşağıdaki satırları web.config içine yazıyoruz. Ve SqlConnection yani bağlantımızı sağlamış //oluyoruz.

 <connectionStrings>

 <add name="Bağlantınıza koyacağınız isim" connectionString="Data Source=veritabanın bulunduğu makinanın adı-adresi; Persist Security Info=True; Initial Catalog=Veritabanınızın ismi; UserID=Veritabanına bağlanabilen ve yazılımda neler yapılması gerekiyorsa yetkisi olan kullanıcı bağlantı ismi; Password=Şifre" />

  </connectionStrings>

Servisimizdeki sınıflarda get post metodlarını aynı sınıfta da tutabilirsiniz ayrı sınıfta da ben iki ayrı sınıfta tuttum. 



get metodumuz - verileri getirmek için




post metodumuz-verileri kaydetme ve güncelleme için


Özetlersek: Yukarıda tablosal verilerimize erişim için AJAX enabled WCF servis oluşturarak , bağlantıyı sağladık get ve post metodlarında select, insert, update sql komutlarını kullanarak verilerimizi listelere atadık ki ajax ile servis isminden ulaşabilelim.


Şimdi gelelim haritamızı oluşturduğumuz sınıfta katmanı ekleyip o katmandaki verileri çekip tablosal verilerle kesiştirerek istediğimize ulaşmaya...

//Haritamızı oluşturuyoruz. Altlık olarak topo seçtim siz farklı bir altlık haritası seçebilirsiniz

initialExtent = new esri.geometry.Extent({ "xmin": 2927447, "ymin": 4259478, "xmax": 5018471, "ymax": 5196834, "spatialReference": { "wkid": 102100 } });

        map = new Map("map", {
            extent: initialExtent,
            basemap: "topo",
            zoom: 6
        });

//Katmanı oluşturuyoruz

 var layer = new  FeatureLayer("ArcGis veya bunun benzeri programlar ile oluşturduğunuz harita servisinizde katmana erişim urlsini buraya yazıyoruz", {
  mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
  outFields: ["*"],
   });

 //haritaya katmanı ekliyoruz
 map.addLayers([layer]);

  //haritaya tıklayınca olacak olanlar :)
  dojo.connect(layer, "onClick", function (evt) { //haritayı tıkla
            var globalids = evt.graphic.attributes.BLG_GLBLID); //eventı grafikten attribut olarak al ve adını globalids yap. Yani haritayı tıklayınca katmana git ordaki coğrafi verilerden bölgeglobalidyi çek ismini globalids koy.
            var bolgeadi = evt.graphic.attributes.BLGADI; //Yukarıdaki mantık
            $.ajax({
                type: 'GET', //verileri getirmek için GET
                contentType: 'application/json; charset=utf-8',
                url: 'Service.svc/Getobje', //Oluşturduğumuz serviste get metodumuzun(yukarıdaki resimde olan metod) ismine erişimi sağlıyoruz
                data: '{#globalids}', //get metodumuzdaki parametremiz
                proccessData: false,
                dataType: 'json',
                success: function (data) {
                    var d = eval(data.d);
                    var i = 0;
                    for (i; i < d.length; i++) {
                    sqlglobal.push(d[i].globalid); //Getobje metodunda select komutu ile çektiğimiz verileri burda yazmasam da oluşturduğumuz dizilere ekliyoruz.  Herbir veri için ayrı dizi oluşturdum bunun sebebi herbirine ayrı karşılaştırmaya ihtiyaç duymamdı. Siz tek bir diziye ekleyebilirsiniz. Yani sqlglobal ve diğerleri birer dizidir.
                        sqltelefon.push(d[i].telefon);
                        sqleposta.push(d[i].eposta);
                        sqlvergino.push(d[i].vergino);
                        sqlvergidairesi.push(d[i].vergidairesi);
                        sqlkepadresi.push(d[i].kepadresi);
                        sqlx.push(d[i].x);
                        sqly.push(d[i].y);
                        sqlfax.push(d[i].fax);
                        sqladres.push(d[i].adres);

                    }

  for (i; i < sqlglobal.length; i++) {
  if (sqlglobal[i] === globalids) { //Tablosal veriden çektiğim globalid ile geodatabase(haritayı tıklayınca katmandan gelen globalid eşit mi şartını burda yazıyoruz. Asıl amacımız buydu o yüzden kırmızııı :))).

map.infoWindow.setTitle("İLETİŞİM");//Ekrana verileri getirince çıkacak olan penceremiz ve başlığı

var contentString = '<div class="block"><label><b>Adres:</b></label><input type="text" value="' + sqladres[i] + '" id="adres_id" runat="server" /></div>' +
                                                '<div class="block"><label><b>Telefon:</b></label> <input type="text" value="' + sqltelefon[i] + '" id="telefon_id" runat="server" /></div> ' +
                                                '<div class="block"><label><b>Fax    :</b></label> <input type="text" value="' + sqlfax[i] + '" id="fax_id"/></div> ' +
                                                '<div class="block"><label><b>Kep Adresi:</b></label> <input type="text" value="' + sqlkepadresi[i] + '"id="kepadresi_id"/></div>' +
                                                '<div class="block"><label><b>Vergi Dairesi:</b></label> <input type="text" value="' + sqlvergidairesi[i] + '" readonly/></div>' +
                                                '<div class="block"><label><b>Vergi No:</b></label> <input type="text" value="' + sqlvergino[i] + '" readonly/></div>' +
                                                '<div class="block"><label><b>e-posta:</b></label> <input type="text" value="' + sqleposta[i] + '" id="eposta_id" /></div>' +
                                                '<div class="block"><label><b>X Koordinatı:</b></label> <input type="text" value="' + sqlx[i] + '" readonly /></div>' +
                                                '<div class="block"><label><b>Y Koordinatı:</b></label> <input type="text" value="' + sqly[i] + '" readonly /></div>' +
                                                '<button id="gncClick" value="Submit" onClick="guncelle_click()" runat="server">GUNCELLE</button>' + '<b><button id="btnekleClick" value="Ekle" onClick="ekle_click()" runat="server">EKLE</button>';
                            
map.infoWindow.setContent(contentString); //yukarıda belirlediğimiz stringleri pencerese set ediyoruz.
map.infoWindow.resize(350, 240);//pencerenin büyüklüğünü belirliyoruz.
map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint)); //pencereyi gösteriyoruz

                            $('#gncClick').click(function () {//güncelle butonuna tıklanınca işleme başla//ekle tuşuna basılınca olayında sadece tuş ismini değiştiriyoruz
                                var arrData = {};
                                arrData.Adres = document.getElementById('adres_id').value;
                                arrData.Telefon = document.getElementById('telefon_id').value;
                                arrData.GlobalId = globalids;
                                $.ajax({
                                    type: 'POST',
                                    url: 'Service.svc/PostObjectId', //yukarıdaki resimlerdeki sonuncusunda güncellemek için yazdığımız metoda erişim urlsini yazıyoruz //ekle tuşuna basılırsa burda o metodun ismi yazılacak.
                                    data: JSON.stringify(arrData),
                                    contentType: 'application/json; charset=utf-8',
                                    dataType: 'json',
                                    async: false,
                                    success: function (data) {//değiştirilen değerleri veritabanına işlemesini sağlayan success//ekle tuşuna basıldığında bu succes içerisine şartlar koymanız gerekecek varsa ekleme yoksa ekle gibi...
                                        var obj = eval(data.d);
                                        if (obj == 'true') {
                                            $('#adres_id').val('');
                                            $('#telefon_id').val('');
                                        }
                                        alert("Güncelleme işlemi başarılı şekilde gerçekleştirilmiştir.");
                                        window.location.reload();
                                    },
                                    error: function () {
                                    alert("error");
                                    }
                                });
                            });
                        }
                    }

                }

            });
        });

1 Ekim 2015 Perşembe

Linux'ta ( Ubuntu ) Eclipse yükleme

Aslında ubuntuyu en baştan sırayla anlatmayı planlıyordum ancak benim bugün yaptıklarımı yazıp baştan alınacak yazıları hazırladıktan sonra eklemenin sorun olmayacağını düşünüyorum..
Bugün ubuntu'da ecplipse ve diğer yazılım araçları nasıl yüklenir bir görelim basit ve anlaşılır.
Öncelikle Applications'tan Ubunt Software Center'ı açalım:



Daha sonra ecplipse aynı zamanda temel olarak java editörü olarak bilindiğinden search kısmına java  yazmamız yeterli olacaktır:) arama yaptıkğınızda orada netbeans ve diğer araçları da bulabilir ve istediğinizi yükleyebilirsiniz. İstediğiniz yazılımın üzerine gelin ve yanda çıkan install'ı tıklayın gerisi çorap söküğü gibi gelecektir.
linux  yazılım merkezi

Applications 'ı açınca iconunu görebilirsiniz

Eclipse Üzerinde Processing Çalıştırma

Bugün blog'ta yazmak istediklerimden biraz farklı konulara değineceğim...Ancak bu tamamen bugün bir çalışmayı anlama ve üzerinde değişiklikler yapmak için uğraşmamla alakalı...Türkçe kaynakların fazla bulunmadığı bir durum olsa gerek ki araştırmalarımda hep yabancı sitelere bakmam gerekti...
Neyse gelelim konuya;Eclipse'yi yüklemiştik , şimdi processing nasıl çalıştırılır ki aslında processing çalışmıyor eclipse'te ..Şöyle oluyor bir processing'te yazılmış olanı java programlamaya dönüştürüyor ve o şekilde derliyor. Gelelim sadede;

Eclipse'yi çalıştırdığımızda (ben ingilizce kullanıyorum size de türkçe karşılığı tam olarak nasıl bilmiyorum ama anlamlarını yazabilirim) Help (Yardım) menüsünden Install New Software (Yeni yazılımı yükle) 'yi tıklıyoruz , orda çıkan menüden Add tuşuna basıyoruz ve karşımıza bir diyalog kutusu çıkacak orda

Name (isim) yerine "Processing Plug-in" yazıyoruz
Location(Lokasyon) yerine " http://eclipse.processing.org/plugin/site.xml"

ve Ok tuşuna basıyoruz.Daha sonra karşımıza çıkan ekranda Next(İleri) diyoruz. Lisans sözleşmesi çıkacak onu da onaylıyor ve ilerliyoruz, eğer karşınıza pop-up bloklanmış şeklinde izin isterse izin vermeniz gerekir.
Daha sonra eclipse yeniden başlatıyoruz

Yeni bir processing oluşturmak için File(Dosya)-> New(Yeni) -> 'Processing Sketch' dediğimizde bizden bir isim isteyecek ve processing .pde uzantılı dosyamız boş olarak açılacak...Biz kodları yazdıktan sonra Run as->Processing Sketch (Applet) diyerek programınızı derleyebilirsiniz.Eğer küçük bir örnek yapmak hazır ve açık kodlardan derlemek istiyorum derseniz : www.processing.org sitesinden learning 'e bir göz atabilirsiniz.
Not:Yalnız burda benim bilgisayarda şöyle bir durum oluştu, ben Run as kısmından Processing Sketch kısmını aktifleştiremedim bu yüzden sağ üst köşedeki Java yazan yeri tıkladım ve Java'da derle dedim.Programı java kodlarına dönüştürdü ve çalıştırdı.

Kaynak : wiki.processing.org

29 Eylül 2015 Salı

ABD'ye adım attın çok değiştin :)

Hayır yok öyle birşey. Sadece blog sayfama yazı yazmayalı zamanım ile gidiş zamanlarım aynı olmuş.
Bir gitmişim ve her sene gider olmuşum.
Bu kadar zaman blog sayfama neden yazmadım ben de bilmiyordum ama bugün cevabı buldum. Kendimi ertelemişim. Şu anda iş alanımın yeni bir yere taşınması ile birazcık ta olsun kendime zaman ayırırken blog sayfalarına denk geldim ve kendi sayfama yazmadığım zamanı görünce neden sorusunda, kendimi erteledim, evet zeyntuni kendini erteledi.
Neler oldu bu zamana kadar part 1
*Abd planları start verdi (şimdi ingilizce kelimeyi cümlelerin arasına katmak gerek moda bu sonuçta :) )
İlk çıkışımın fotoğraflarına bakarken biri dikkatimi çekti. Ve acayip dalga geçmiştim neden mi ?
O fotoğrafı çekerken sadece sürü psikolojisi ile hareket ettim ve bunu bilerek yaptım. Anlamı var mı ? Sadece bir bina(elbetteki white house olduğunu biliyoruz:) ). OOOVVVV Amerikadayıımmmm arkadaşlarrrrr ; burayı yamuk ağızla söylemeniz gerekiyor :)))

Suratımdaki o anlam veremediğim herkes yapıyorsa vardır bir nane diye çektirdiğim fotoğraf daha ne olsun:)
Yalnız benim o zamanlardaki favori fotoğrafım ise New York Times Square Meydanında çektirdiğim idi ; işte o bir anlam ifade ediyordu; farklı bir ton insanın enerjisi, birbirinden farklı enerjiler milyarları geçecek çeşitte farklı kar taneleri gibi. Birbirine benzemeyen kar taneleri...Tek farkla kar tanelerinin hepsinde güzellik var ama insanlarda telaş, endişe, korku, yalnızlık, bitmişlik, sevgi, hüzün, mutluluk ... ortaya karışık salata gibi. Ama en çok ta yalnızlık vardı. Evet oraya gittiğim ilk anda gözlemlediğim şey şuydu; İnsanlar kalabalıklar içinde yalnızlar. Aslında bu Türkiye'de de aynı. Nerdeyse herkes artık depresyon ilacı kullanıyor. Yoldan geçen on kişiye sorun 9 kişi evet cevabını verecektir. Hemi de koca aileleri varken. Yani yalnız değillerken. Türkiye'deki eczanelerimizin küreselleşmiş şekli diye tanımladığım cvs ve benzeri ezcanelerinde reçetesiz uyku hapları bile bunun bir kanıtı. Yaşam standartları evet yüksek ama herkes bireysel yaşama itilmiş yalnızlar. Ben yalnızlığı severim sanırım o yüzden burası tam bana göre :D Yalnızlıktan korkmayın, kalitesiz insanlardansa yalnız kalmak sizin için daha iyi olacaktır.

Orası gerçekten refah düzeyi yüksek bir ülke ve eğer bir aileniz varsa orda yaşamanız size güzellikler sunacaktır. Yalnızları oynamanızı tavsiye etmem:) Ama yalnızlığı seviyor ve alışıksanız gayet güzel yaşarsınız. Orada yaşam süremi uzattıkça o uzunlukta neler oldu yazmayı başarırsam burda yazarım...Çünki çalışma hayatımda sanki orası benim ütopyam. Bakalım zaman haklı mıyım haksız mıyım gösterecek.

Bu fotoğrafta aynen şunu diyorum: Ya Rabbi, altı ay öncesine kadar elimde kumanda işten akşam eve gelmişim Rtl (almancam gitmesin bacım) izleyen ben sana sitem ediyordum. Küçükken dünya çocuğu olmak istedim. Uçakta doğunca olunuyor, dendiğinde hayal kırıklığı yaşadım. Nasıl olacam dünya çocuğu(din,dil,ırk ayrımı yapılmayan bir ütopya hayal et)? Bari göreyim bileyim, nasıl olacak o, iş varken zaman yok zaman varken para yok yaşlanınca mıııı...Ve sen şimdi beni gezdiriyorsun hatta ütopyan orası yaşa orda diyorsun. Sitemim için affet.

Dipnot: Evlat !( Varolacak mısın bilmiyorum ama :)  ) birgün bu yazıyı okuyor olursan senin dünya çocuğu olman için elimden geleni yapacağım. Soy anneden geçer ne de olsa dimi. Senin baban değişir annen hep aynı kalır. Bunu sen dememiş miydin? :) 
Olur ki varoldun,bu yazıyı okuyor olursan annenin başaramadığı birşey yokmuş dersin...
Bu cümleyi yazınca anne ve babamın da kendi şartlarına binaeren başaramadığı şey olmamış diye aklımdan geçmedi değil ;) Çünki biz çocukların yaptıkları aslında onların başarısı, bence tabi. Başarısızlıklarımızın arkasında ise kesin bizim tembelliğimiz vardır :D

Neler oldu bu zamana kadar part2
*CBS- GIS artık ne dersen onun yazılım alanına yöneldim. Yönelmem iyimiydi değil miydi bilmiyoruz. ama yöneldik işte...
Önce C# ile bir yazılım geliştirdim(yarım kaldı çünki javascriptte karar verdik) sonra javascript ile(javascriptte yeni olunca biraz uğraştırdı) ve şimdi tamamlanan üzerinden  yeniliklerle geliştirme aşamasında.
Bu zaman içerisinde şunu anladım; çoğu insan öğretmekten kaçarmış. Ben birçok şeyi bilmiyormuş havasında gezinirken arkamdan neler olduğunu hem gördüm hem tanıdım hem de işimi öğrendim ve öğrenceğim çok şey karşımda duruyor. İnanın birşeyleri öğrenmeniz ve yapmanız için insanlar size yardımcı olmaz beklentileriniz o  yönde olmasın. 

Umarım ilerki zamanlarda öğrendiklerim ve yaptıklarımla ilgili yazarım. Zaten javascriptin gis alanında türkçe kaynağı yokmuş. Artık onu da biz oluşturalım öyle değil mi ...
ArcGIS kullanımı, javascript'in ArcGIS kütüphanesinin kullanımı, C# 'ta ArcGIS kütüphanesinin kullanımı, Oracle veritabanında yaşayabileceğiniz sorunlar ArcSDE kullanacağız sonuçta değil mi ;)...Ben ve Coğrafi Bilgi Sistemleri (Geographical Information System); haritalar, katmanlar ...deniz derya bla bla...:)
Ve hazır templatelerin kullanımı...
Onlardan bir tanesini kullandım ve zamanla onlarla ilgili yazıları buraya yazmayı umutla bekliyorum, kimden kendimden :)
Ama şimdilik hoşçakalın...

Neler oldu part3 ?

Hafizam geri geldi :) Şimdi kolları sıvama zamanı






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 :)




12 Aralık 2012 Çarşamba

Oracle Database Oluşturma

Şimdi biz bu kodları tam olarak nerde yazacaz database nerde nasıl oluşturdun der gibisiniz ya da bilenleriniz neden anlatmadı der gibi :D
Hemen konuya girelim başta aslında oluşturduğumda ya video olarak ya da resimli anlatmam gerekeni şu an anlatıyorum.

Yukardaki şekilde Oracle yükledikten sonra program files bölümümüzde oluşacak olan programın içindeyiz.
SQL Plus diye işaretlediğim yer komutlarınızı geliştireceğiniz platformunuz. Database Configuration Assistant ise database oluşturmak için başlatacağımız database oluşturma asistanımız :P Şimdi orayı tıklıyoruz ve aşağıdaki gibi bir pencere çıkıyor.

Biz bir database oluşturacağımız için en üstteki yeni bir database oluşturu tıklayıp next diyoruz.


Yukarıdaki çıkan ekrana(bu arada aslında sıra başka pencerede ama ben orayı atladım direk next deyin sonra istersek ayrıntılara gireriz) database ismimizi yazıyoruz.
                                           
                                                        
 Şimdi Aşağıda gördüğünüz giriş isimlerine ayrı ayrı veya hepsine aynı şifreyi verebilirsiniz. Ben hepsine aynı şifreyi veriyorum.

                                              
Database dosyaları için dosya sistemini seçiyoruz.


Database için saklama alanımızı seçiyoruz.

Burada geri yükleme seçeneklerini belirliyoruz. Burası veri yedekleme ve veriyi kurtarma kısımlarında ayrıntılı işlenir.

Samples Shemas kutucuğunu işaretliyoruz.

Buraları değiştirmesek daha iyi ama özel database alanları karakter uzunlukları..vs gibi durumları buradan ayarlıyorsunuz.
Burada size oluşturduğunuz ve üzerinde değişiklik yapabileceğiniz dosyaların bilgilerini veriyor. Madde madde gösterdiği dosyaları herhangi bir yazımda tekrar detaylı anlatırız. Başlangıç derslerinde biraz bahsettik ama daha sonra bahsetmekte de fayda var.
Database oluştur diyoruz.

Ve oluşturdu.

Oracle Sql Plus 'ımızı programlar bölümünden açıyoruz. Kullanıcı adı ve şifremizle girişimizi yapıyoruz.
Yukarda yazdığımız kod ile oluşturduğumuz database 'imizin ismini bulabiliriz.

Bir hoşçakalın demeden önce. Oracle yüklememizde yükleme dosyamızı nereden aldığımızı söylememiştik. Yukarıdaki resimde de görüldüğü gibi oracle sitesinden downloads bölümünden kendi sisteminize uygun olanını yükleyebilirsiniz.







11 Aralık 2012 Salı

SQL Komutları Örnek

Bir yüklemeyi beklerken neler yapabilirim derken blog sayfama girmek aklıma geldi. Şimdi ilk SQL öğrenme zamanlarımda verilen küçük ödevlerimden birini buraya direk yapıştırmaya karar verdim. Çünki sorulu cevaplı bazen bazı şeyler daha anlaşılır oluyor. Ve bundan sonra  foreing key , tablo birleştirme, SQL Developer yüklenmesi,...vs olaylarına gireriz(yazıyorum ki unutmayayım :)birçok şeyi unutuyorum ne yapmıştım ne olmuştu-benim pc gene yedi formatı :S tekrar yükle tekrar database oluştur felanları ben video olarak yükleyeyim fırsat bu fırsat :D ) daha sonra da PLSql de birkaç örnek yaparız :) İyi iyi uzun bir aradan sonra canlandık galiba ...



ARAC_TAKIP_REFNO sayı üreteci oluşturun


  • Tabloyu oluşturun
  • 5 adet farklı tarih,plaka ve şöför 'e ait giriş çıkış yapın
  • Son girilen kaydı silin
  • İlk girilen kaydın Plaka nosunu 06 HB 634 yapın
  • İki tarih arasında giriş çıkış listesi alın
  • Sadece bir plakaya ait listeyi getirin




CREATE TABLE ARAC_TAKIP
(
  ARAC_TAKIP_REFNO INT NOT NULL,
  SIRANO INT NOT NULL,
  TARIH DATE DEFAULT SYSDATE,
  GIRIS_SAATI NUMBER(4,2) NOT NULL,
  CIKIS_SAATI NUMBER(4,2),
  SOFOR_ADI VARCHAR(30) NOT NULL,
  PLAKA_NO VARCHAR(10) NOT NULL
)
/
CREATE SEQUENCE SQ_ARAC_TAKIP START WITH 1 INCREMENT BY 1
/
INSERT INTO ARAC_TAKIP VALUES(SQ_ARAC_TAKIP.NEXTVAL,&SIRANO,TO_DATE('&TARIH','dd/mm/yyyy'),&GIRIS_SAATI,&CIKIS_SAATI,'&SOFOR_ADI','&PLAKA_NO')
/
DELETE FROM ARAC_TAKIP WHERE ARAC_TAKIP_REFNO=(SELECT MAX(ARAC_TAKIP_REFNO) FROM ARAC_TAKIP)
/
UPDATE ARAC_TAKIP SET PLAKA_NO='06HB634' WHERE ARAC_TAKIP_REFNO=(SELECT MIN(ARAC_TAKIP_REFNO) FROM ARAC_TAKIP)
/
SELECT * FROM ARAC_TAKIP WHERE TARIH BETWEEN TO_DATE('&T1','dd/mm/yyyy') AND TO_DATE('&T2','dd/mm/yyyy')
/
SELECT * FROM ARAC_TAKIP WHERE PLAKA_NO='&P1'
/