6 Aralık 2016 Salı

Tablodaki tekrar eden aynı kayıtları bulma işlemi ( Finding duplicates rows in a table via sql )

Merhaba Arkadaşlar,

Bazen bir tabloda aynı kaydın farklı id ile birden fazla kaydedildiğine şahit olabilirsiniz.
Bunun sebebi yanlış tasarlanan veritabanı olabilir, unique constraintler doğru tasarlanmamış olabilir veya başka problemler olabilir. Böyle durumlarda mükerrer ( kendini tekrar eden )  kayıtları bulabilmek için aşağıdaki şekilde sorgunuzu düzenleyebilirsiniz.

  SELECT tablo_alani_1, count(tablo_alani_1)
  FROM tablo_adi
  GROUP BY  tablo_alani_1
  HAVING count(tablo_alani_1) > 1


Yukarıda yapılmak istenen nedir ? Ne yaptık biz şimdi burada derseniz ?

Tablomuz bir personel tablosu olsun diyelim. Aynı sicil numarası ile fakat farklı bir id ile aynı personelden birden fazla kayıt olduğunu düşündüğümüz de, tablodaki sonuçları sicil numarasına göre çekmeliyiz sicil numarasına göre gruplayarak sicil numarasını grup olarak sayarsak tek olan kayıtların count değeri 1 olacak kendini tekrar eden satırın count değeri 2 veya daha fazla olacaktır.
O yüzden having count(*) > 1 diyerek, count değeri 1'den büyük olan kayıt yani mükerrer kaydı tespit etmiş oluruz.
Senaryomuzu aşağıdaki gibi gerçekleyebiliriz.


 SELECT t.sicilNo, count(t.sicilNo)
  FROM personel t
  GROUP BY  t.sicilNo
  HAVING count(t.sicilNo) > 1


Umarım faydalı olur.

</Happy Coding>

6 Şubat 2016 Cumartesi

Hello Spring MVC

Merhaba,

Spring MVC ile ilk projemizi nasıl oluşturacağız ? sorusunu bu yazıda birlikte cevaplayacağız.

Bilgisayarınızda Eclipse ve Java yüklü olması gerekiyor.  Ayrıca Eclipse geliştirme ortamına Spring eklentisini eklemiş olmanız da Spring ve Spring MVC projesi oluştururken işlerimizi hayli kolaylaştıracaktır. Bu yüzden öncelikle Eclipse geliştirme ortamımıza Spring eklentilerini nasıl ekleyeceğimize bir bakalım daha sonra HELLO SPRING MVC diyeceğiz :)

1-) Öncelikle Eclipse geliştirme ortamımıza "Spring Tool Suite" eklentisini kurmalıyız ki Eclipse üzerinden rahatlıkla Spring projesi oluşturabilelim.
Eclipse içerisinde "Eclipse Marketplace"  i açmalıyız.
Bunun için Yardım[HELP]>Eclipse Market[Eclipse Marketplace] yolunu kullanıyoruz.

2-) Açılan market ekranında arama alanına Spring Tool Suite yazıyoruz ve Go tuşu ile aramayı başlatıyoruz.



3-) Arama sonuçları olarak gelen Spring Tool Suite for Eclipse araçlarını seçip kuruyoruz.
Benim cihazımda daha önceden kurulu olduğu için diğer resimleri http://www.codejava.net/ides/eclipse/install-spring-tool-suite-for-existing-eclipse-ide adresinden kullanıyorum. Dilerseniz de ilgili adresten kurulumu devam ettirebilirsiniz tabi ki.



4-) Spring ile ilgili bütün seçenekleri seçerek bir sonraki aşamaya geçiyoruz. Burada bizden lisansı kabul etmemizi bekliyor olacak. Biz de tabiki lisans dosyasını okumadan hemen kabul deyip işlemi tamamlıyoruz. :)



5-) Eclipse geliştirme ortamını yeniden başlattıktan sonra yeni proje oluşturma alanında Spring Project alanının geldiğini görebilirsiniz.

Buraya kadar Spring MVC projemizi oluşturmak için gerekli temel gereksinimleri gerçekleştirdik.

Artık her şey hazır olduğuna göre projemizi oluşturmaya başlayalım.

1-) Yeni[New]>Spring Projesi[Spring Project] yolu ile yeni bir Spring Projesini oluşturmaya niyetlendiğimizi belirtiyoruz. :)



2-) Açılan pencerede bize ne tür bir Spring projesi istediğimizi soruyor aslında. Biz de burada Spring MVC Projesi oluşturacağımızı tekrar söyleceyeceğiz. Fakat dikkat ederseniz Spring MVC Project yazısı yanında aşağı doğru yeşil bir ok var. Yani diyor ki; Bu seçenek seçildiğinde ek dosyalar indirebilir haberin olsun.
Bunun sebebi Spring temel projesi haricinde Spring MVC için farklı kütüphaneleri indirmesi gerektiğidir. Biz yine de Spring MVC Project seçeneğini seçiyoruz ve projemizin adına da FirstMvcProject diyerek sonraki aşamaya geçiyoruz.



3-) Bir sonraki aşamaya geçmeden bize indireceği dosyalar için tekrar hatırlatmada bulunuyor ve bizden onay bekliyor. Biz de onaylıyoruz ve kısa bir indirme işleminin gerçekleşmesine izin veriyoruz.


İndirme işlemi tamamlandıktan sonra bizden temel paket ismini istiyor. İstediğiniz ismi verebilirsiniz tabi ki ama genelde web adreslerinin tersten yazımı şeklinde verilir. Ben bu proje için com.ouz.springmvc olarak belirledim.


4-) İlk projemiz Eclipse ve Spring Tool Suite ortaklığı ile oluşturulmuş durumda. Eğer sol taraftan proje dizin ağacına göz atarsanız pom.xml şeklinde bir dosya göreceksiniz. Bu dosya bize bu projenin bir Maven Projesi olduğunu söylüyor. Maven, proje içerisinde birbirine bağımlı kütüphaneleri bizi yormadan yöneten bir araçtır. pom.xml içerisinde Maven Repository üzerinden alınan kütüphanelerin xml ayarları bulunur. Aynı zamanda projenin deploy(dağıtım) ve build(inşaa) aşamasındaki gerekli ayarlar da belirtilebilir.
src/main/webapp/WEB-INF/spring dizini altında spring configuration file (spring ayar dosyaları) bulunur.
src/main/webapp/WEB-INF/ dizini altında ise bir web projesinde olması gereken web.xml dosyası bulunur.
src/main/webapp/WEB-INF/views dizini altında ise projemizin View katmanını oluşturan .jsp sayfaları bulunur.
Java Resources> src/main/java/com.ouz.springmvc  paketi altında ise Controller katmanını oluşturan Controller sınıfı yer alır. Controller sinifimiz olan HomeController.java sınıfımız içerisine göz atarsanız.

@RequestMapping(value = "/", method = RequestMethod.GET)

public String home(Locale locale, Model model) {

şeklinde tanımlanan method, proje dizinine yapılan isteklere cevap vermek için yazılan methoddur.
ve dönüş değeri olarak InternalResourceViewResolver e home.jsp 'i çalıştırmasını söylemektedir.






Şimdilik daha fazla detaya girmeden projemizi sağ tıklayıp Run deyip Tomcat serveri seçtiğimizde ilk projemizi yazmış çalıştırmış oluruz :)

 


Karşımıza çıkacak olan src/main/webapp/WEB-INF/views altında yer alan home.jsp sayfayı olacaktır.



home.jsp içeriğini aşağıdaki şekilde değiştirerek baştaki sözümüzü yerine getirmiş olalım :)



Böylece ilk Spring MVC projemizi oluşturmuş ve çalıştırmış olduk.
Başka yazılarda görüşmek üzere.

</HappyCoding>

Apache Tomcat 7.0 Kurulumu - Mac OSX El Capitan

Merhaba,

Bu yazımızda Mac bilgisayarımıza Tomcat 7.0 serverini nasıl kuracağımızı anlatmaya çalışacağım.
Gerekli olan tek şey bilgisayarımızda Java'nın yüklü olmasıdır.
Bunu test etmek için [Cmd]+[Space]  tuş kombinasyonu ile Terminal'i açıyoruz.

>> java -version

komutu ile bilgisayarımızda hangi java versiyonunun yüklü olduğunu görebiliriz. Mac OSX ve Linux cihazlarda Java default olarak yüklü gelir genellikle.

1-) Öncelikle şuradaki adresten Tomcat 7 için .zip veya .tar.gz arşivlenmiş dosyalarından herhangi birini indiriyoruz. Masaüstüne veya İndirilenler klasörü içerisine indirebilirsiniz.
Ben İndirilenler klasörü içerisine indirdim ve aç diyerek arşivden klasörün çıkarılmasını sağlıyoruz.

~/İndirilenler/apache-tomcat-7.0.67

2-) Şimdi indirilenler klasöründe yer alan klasörleri /usr/local dizini altına taşımamız gerekiyor.
Bunun için Terminal'i tekrar açıyoruz. Ve aşağıdaki komutları yazıyoruz. sudo komutundan sonra şifre sorabilir. Şifreniz bilgisayarınız için tanımlanmış şifrenizdir. Ekran da herhangi bir karakter göstermeksizin sizden şifrenizi girmenizi ister.

sudo mkdir -p /usr/local
sudo mv ~/Downloads/apache-tomcat-7.0.67 /usr/local

*3-) 2.adım sonunda tomcat çevresel dizinlere eklenmiş oluyor. Fakat kitaplık üzerinden kısayol ile erişilebilir hale getirmemiz bizim için kolaylık sağlayacaktır. Terminal üzerinden aşağıdaki komut ile gerçekleştiriyoruz.

sudo rm -f /Library/Tomcat7
sudo ln -s /usr/local/apache-tomcat-7.0.47 /Library/Tomcat7


*4-)  Tomcat kurulumunu belirli bir kullanıcı için erişilebilir yapmak isteyebilirsiniz. Bunun için ilgili klasörün sahipliğini değiştirmelisiniz. Bunu da aşağıdaki komutla yapabilirsiniz.

sudo chown -R kullanici_adiniz /Library/Tomcat7


*5-) Tomcat dizini altındaki bütün scriptleri çalıştırılabilir hale getirmek için ise aşağıdaki komut çalıştırmalısınız.

sudo chmod +x /Library/Tomcat7/bin/*.sh

İşlem tamam :)

(*) ile işaretlenmiş maddeler Tomcat serverin çalışması için olsa da olur olmasa da olur durumlardır.


BONUS :)
-> Tomcat 7 Server'i Terminal üzerinden manuel olarak açmak ve kapatmak için ise aşağıdaki komutları kullanabilirsiniz.

Tomcat Manuel Baslat : /Library/Tomcat7/bin/startup.sh

Tomcat Manuel Kapat : /Library/Tomcat7/bin/shutdown.sh


</HappyCoding>

23 Ocak 2016 Cumartesi

PLSQL - DECODE KULLANIMI

Merhaba,

Bazı durumlar olur ki veri çekmek istediğinizde, gelmesi istenen veri koşullara göre değişken davransın. Yani kod içerisinde yazdığımız if-else gibi davransın.
Ya da binlerce kayıt bulunan tablo dökümünde tabloda kayıtlara göre farklılık gösteren kayıtları ayrıştırma işlemini yapıyım isterseniz.
Ya da işte benim bahsedemediğim ama sizin " tam burada (sql içerisinde) bir if-else yazsam " dediğiniz anda işinizi görecek bir komut DECODE komutu.

if-else işlemini sql procedure veya sql fonksiyon içerisinde yazabiliriz elbette ama decode komutunu select işleminde veya where koşulu içerisinde her yerde kullanabiliriz.

Kısaca tanımı;

DECODE( [kontrolIfadesi] , [birinciKosul] , [birinciKosulDOGRUYSADonecekDeger] ,  [ikinciKosul] , [ikinciKosulDOGRUYSADonecekDeger] , [hicbirKosulDOGRUDEGILSEDonecekDeger] )


Yukarıdaki ifadenin türkçe meali şöyle ki;
Decode içerisine ilk parametre olarak kontrol edeceğin ifadeyi koy. Ardından ikinci parametre kontrol ifadesine "eşitse" kontrolünü yapacağın birinci koşul ifadesi, üçüncü parametre ise birinci koşul ifadesi ile kontrol ettiğin ifade eşitse dönecek olan değer. Sıralı şekilde önce koşul hemen ardından koşul sağlanıyorsa döndürülecek değer şeklinde eklenebilir. En sona öncesinde bir koşul konmadan yazılan ifade ise, eğer hiçbir koşul sağlanmazsa gösterilecek değer olacaktır.

Şöyle bir örnek üzerinden daha yakından inceleyelim;

SELECT
p.adi as ADI,
p.soyadi as SOYADI,
p.kimlik_numarasi as KIMLIK_NUMARASI,
DECODE( p.statu,  'M' , 'MEMUR' , 'I' , 'İŞÇİ' , 'S' , 'STAJYER' , 'E' , 'EMEKLİ' , 'TANIMLANMAMIŞ' ) as STATU
FROM personel p ;

Personel tablomuz olsun ve bu tabloda personellerin kayıtları tutulsun. Herbir personel için ise personelin statüsünü tuttuğumuzu varsaydığımız sütunumuz (alanımız) olsun. Bu alanda personellerin statü bilgileri için VARCHAR2(1) tipinde (şeklinde) tanımlanmış verileri tuttuğumuzu varsayalım. Böyle bir senaryo için çalıştırılacak yukarıdaki gibi bir sorguda decode işlemi yaptığımızda, herbir personelin statü alanında yer alan karaktere göre ilgili açıklamayı yazacaktır.

Veritabanında ;
OĞUZ HAN TURAN 11112222324 I
şeklinde olan bir kayıt

yukarıdaki sorgu çalıştırıldığında şöyle gelecektir.
 OĞUZ HAN TURAN 11112222324 İŞÇİ

veya veritabanında;
OĞUZ HAN TURAN 11112222324 T
şeklinde olan bir kayıt

yukarıdaki gibi bir sorgu çalıştırıldığında
OĞUZ HAN TURAN 11112222324 TANIMLANMAMIŞ
şeklinde gelecektir. Çünkü decode ifadesi içerisinde p.statu alanının 'T' ifadesine eşit olduğunda gösterilecek ifadeye yönelik bir  kontrol işlemi gerçekleştirilmemiştir. Bu yüzden en sonra hiçbir koşul ifadesi olmayan değer yazılmıştır.

Başka bir deyişle yukarıdaki SQL ifadesinin basitçe koda çevrilmiş hali şöyledir.

if( p.statu == 'M' )
        System.out.println("MEMUR");
else if( p.statu == 'I' )
        System.out.println("İŞÇİ");
else if( p.statu == 'S' )
        System.out.println("STAJYER");
else if( p.statu == 'E' )
        System.out.println("EMEKLİ");
else
        System.out.println("TANIMLANMAMIŞ");

Umarım açıklayıcı olmuştur.

 </HappyCoding>

PLSQL - Silinen Kayıtları Geri Getirme

Merhaba,

PLSQL ile işlem sırasında bir delete komutu çalıştırırken where koşulu belirtmeyi unuttunuz ve farkında olmadan "commit" işlemi yaptınız. Veya update işleminde yanlış verileri güncellediniz.
Gibi gibi benzer durumlarda commit işlemi yaptığınız tablolardan verileri geri eski haline getirmek istediğiniz olabilir.

Bu gibi işlemler için aşağıdaki komutu kullanabilirsiniz.
Öncelikle komutu veriyorum ardından açıklama yapalım.

insert into [eklenecekTablo] (SELECT * FROM [veriCekilecekTablo] AS OF         TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE)   WHERE [kosulSütunu] = '[kosul]');


[eklenecekTablo]: Burada geri getirdiğimiz verileri ekleyeceğimiz tablo ismi veriyoruz.
Bu tablo silme işlemini gerçekleştirdiğimiz tablonun kendisi de olabilir.
Yani  
[eklenecekTablo] ile  [veriCekilecekTablo] aynı tablo olabilir.

[veriCekilecekTablo]: Yanlış silme işlemi gerçekleştirilmiş veya yanlış güncelleme işlemi yapılmış olan tablo.


AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE : Tablo içerisinde 
60 dakika  içerisinde yer alan veriler içerisinden select işlemi yapacağımızı belirtiyoruz.

[kosulSütunu] = '[kosul]' : Burada son 60 dakika içerisinde silinmiş başka veriler de olabilir  o yüzden koşul belirterek doğru verilerin geri getirilmesini sağlıyoruz.



!!! Eğer son 60 dakika içerisinde tablo üzerinde önce veri ekleme sonra veri silme işlemi yapılmışsa yukarı belirttiğimiz çalışacak bir sorgu, tablonun veri eklenmeden önceki hali üzerinden işlem yapacaktır. O yüzden zaman aralığı ne kadar kısıtlayıcı olursa doğru verinin geri getirilmesi daha kolay ve efektif olacaktır. Bu konuda dikkatli olmak faydalı olur.

</HappyCoding>