30 Ekim 2013 Çarşamba

Toad Oracle’da Türkçe Karakter Sorunu ve Çözümü


Toad dan Oracle veritabanına bağlanıp dataları çektiğimde verilerdeki Türkçe karakterlirin yerine ''?'' işareti çıkması.


Çözümü şu şekilde;
Regeditten NLS_LANG değerini bulup değerini TURKISH_TURKEY.TR8MSWIN1254 olarak değiştirmek.( Aynı değer birden fazla olabilir. Eğer oracle'ı tek bi seferde kurmadıysanız ve kaldırma yapamadan yeniden üzerinde kurmak istediğimizde her yeni Oracle ürünü kurulumu ile farklı bir ORACLE_HOME altında değerler oluşturur.Toad bunlardan birini kullanıyordur.Bunun için doğru NLS_LANG değerini değiştirdiğinizden emin olun.)


Bunları yaptıktan sonra hala düzelmemiş ise son çare olarak Control Panel\Clock,Language, and Region (Denetim Masası\Saat, Dil ve Bölge) giderek Region and Language (Bölge ve Dil ) kısmına gelerek burdaki Formats,Location,Keybord (Biçim,Yer,Klavye ) vs.. bütün ayarları Turkish (Turkey) olarak ayarlamanız gerekebilir.

26 Eylül 2013 Perşembe

ROW_NUMBER Kulanımı Örnek, Bir fatura bazında, fatura detaylarına sıra numarası verilmesi



select (mod(emp_id,5)-emp_id)*-1 page, seq_no,tutar FROM (
SELECT seq_no, tutar, ROW_NUMBER()
   OVER (PARTITION BY seq_no ORDER BY seq_no) AS emp_id
   FROM ser_hiz_det
   where seq_no in ('680501','81127')
   )
   ORDER BY seq_no


SELECT department_id, last_name, employee_id, ROW_NUMBER()
   OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
   FROM employees;

DEPARTMENT_ID LAST_NAME                 EMPLOYEE_ID     EMP_ID
------------- ------------------------- ----------- ----------
           10 Whalen                            200          1
           20 Hartstein                         201          1
           20 Fay                               202          2
           30 Raphaely                          114          1
           30 Khoo                              115          2
           30 Baida                             116          3
           30 Tobias                            117          4
           30 Himuro                            118          5
           30 Colmenares                        119          6
           40 Mavris                            203          1
. . .
          100 Popp                              113          6
          110 Higgins                           205          1
          110 Gietz                             206          2

27 Temmuz 2013 Cumartesi

SQL - Pivot Table Nedir Nasıl Kullanılır

MS SQL Server;

Pivot table bir tablodaki verileri yatay olarak göstermemizi sağlar yani satırlarda bulunan bilgileri istediğimiz alanlara göre sutunlara çevirir.  Özellikle rapor hazırlarken verileri daha anlaşılır ve düzenli hale getirmemizi sağlar. Örneğin bir sipariş tablomuz var. Bir müşterinin verdiği her bir sipariş bir satırda gösteriliyor. Her müşteri için son 6 aylık sipariş bilgilerini görmek istiyoruz. Birinci yöntem her hareketi alt alta yazmak olabilir ama daha anlaşılır ve düzenli bir rapor için her müşteri bir satırda yer almalı ve bu satırda son altı aya ait tüm sipariş tutarlarının toplamı gösterilmelidir. Bu durumda pivot table kullanmak imdadımıza yetişir. Bu örneğin daha iyi anlaşılması için küçük bir çalışma yapalım.
İlk olarak basit bir tablo yapalım ve içine aşağıdaki örnek verileri atalım.
CREATE TABLE [dbo].[Siparis](
      [SiparisID] [int] IDENTITY(1,1) NOT NULL,
      [MusteriAdSoyad] [varchar](80) NULL,
      [UrunAdi] [varchar](50) NULL,
      [Tutar] [decimal](10, 2) NULL,
      [Donem] [int] NULL
) ON [PRIMARY]
SiparisIDMusteriAdSoyadUrunAdiTutarDonem
    Sabri KUNTApple IPAD1025201001
    Ali DEMİRLG Netbook950200912
    Metin TOSUNPacketBell Notbook1200200911
    Sabri KUNTNikon D50001480200912
    Sabri KUNTMicrosoft Mouse100200912
    Metin TOSUNHP Printer250200912
    Metin TOSUNHP Server2100200911
    Ali DEMİRHP Pavilion1600200912
   Ali DEMİRADSL Modem80200911
Şimdi müşteri başına aylık olarak ne kadar harcama yapıldığını görmek için bir sorgu yazalım.
SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar    
  FROM Siparis
  group by MusteriAdSoyad ,Donem
Yukarıdaki sorgu sonucu aşağıdaki gibi her donem için müşterilerin kaç liralık harcama yaptıklarını görürüz.

MusteriAdSoyadDonemToplamTutar
Ali DEMİR20091180
Metin TOSUN2009113300
Ali DEMİR2009122550
Metin TOSUN200912250
Sabri KUNT2009121580
Sabri KUNT2010011025
Peki, bizim binlerce müşterimiz olsa ve toplam 1 yıl boyunca her ay ne kadarlık harcamala yaptıklarını görmek istersek yukarıdaki gibi bir sorgunun sonucunda içinden çıkamayacağımız büyük bir tablomuz olurdu. Her müşteri için aylık harcama miktarlarını farklı satırlarda göstermek hiç de işimize gelmezdi.
Şimdi ise her müşteriyi tek bir satırda gösterelim ve sipariş verdikleri her ay içinde bir kolon açarak bunun altında toplam sipariş tutarlarını gösterelim. Pivot table için Siparis tablosunu gruplayarak kullanmamız gerekiyor. Çünkü sipariş tablosunda her ay için müşteri bazında birden fazla harcama var. Yukarıda yaptığımız gruplamayı yeni bir tablo olarak alıp bunu pivot yaparsak istediğimiz sonuca ulaşabiliriz.
SELECT *
FROM (
      SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar 
      FROM Siparis
      group by MusteriAdSoyad ,Donem
     ) as gTablo
PIVOT
(
  SUM(ToplamTutar)
  FOR Donem IN ([200911],[200912],[201001])
)
AS p
Yukarıdaki sorgu sonucu aşağıdaki gibi her ay bir kolon olacak şeklide bilgilerimiz yatayda dizildi
MusteriAdSoyad200911200912
Ali DEMİR802550
Metin TOSUN3300250
Sabri KUNTNULL1580

Gördüğünüz gibi bu şeklide bir tablo oluşturmak sonucun daha düzenli olmasını sağladığı gibi incelenmesini kolaylaştırır.

ORACLE;

SELECT ...
FROM   ...
PIVOT [XML]
   ( pivot_clause
     pivot_for_clause
     pivot_in_clause )
WHERE  ...

SQL> WITH pivot_data AS (
            SELECT deptno, job, sal
            FROM   emp
            )
    SELECT *
    FROM   pivot_data
    PIVOT (
               SUM(sal)        --<-- pivot_clause="" span="">
           FOR deptno          --<-- pivot_for_clause="" span="">
          IN  (10,20,30,40)   --<-- pivot_in_clause="" span="">
         );

JOB               10         20         30         40
--------- ---------- ---------- ---------- ----------
CLERK           1430       2090       1045
SALESMAN                              6160
PRESIDENT       5500
MANAGER         2695     3272.5       3135
ANALYST                    6600



16 Temmuz 2013 Salı

C# SQL Üzerinden XML Dosya yaratma

SqlConnection baglanti = new SqlConnection("Server=GENÇAY-GENÇAY;Database=Northwind;Trusted_Connection=True;");
SqlCommand cmd = new SqlCommand("Select * from Personeller",baglanti);

baglanti.Open();

SqlDataReader dr = cmd.ExecuteReader();

XmlTextWriter XMLDosyasi = new XmlTextWriter("Personeller.xml",Encoding.GetEncoding(1254));

//XmlTextWriter nesnesi ile "Personeller.xml" adındaki XML dosyasının nereye olusturulacağını belirledik.
//Encoding.GetEncoding(1254) = Türkçe karakter dil koduna göre XML dosyasını encode etmesini söyledik.

XMLDosyasi.Formatting = Formatting.Indented;

//Formatting özelliği, XML nodelarının girintili yazılacağını belirtir.

XMLDosyasi.WriteStartDocument();

//XML dosyasına yazılmasına başlayacağını bildirdik.

XMLDosyasi.WriteComment("Burada personellerimiz listelenmektedir.");

//Bu metod ile XML dosyamıza yorum(Comment) eklenmesi sağlanır.
//Bundan sonra elemanları yazdırmaya başlayalım...

XMLDosyasi.WriteStartElement("Personeller");

//Bu metod ile XML dosyasının root elemanı belirleniyor.

while (dr.Read())
{
    XMLDosyasi.WriteStartElement("Personel");

    //WriteStartElement() metodu ile yazılan ilk eleman root eleman olur.Daha sonrakiler root un içindeki ana nodelar olur.

    XMLDosyasi.WriteAttributeString("No", dr["PersonelID"].ToString());

    //WriteAttributeString() metodu ile herhangi bir node a Attribute yazılabilir.

    for (int i = 0; i < dr.FieldCount; i++)
    {
        XMLDosyasi.WriteElementString(dr.GetName(i), dr[i].ToString());
        //Node ları getirtiyoruz.
    }

    XMLDosyasi.WriteEndElement();

    //Oluşturulan ana node kapatılıyor.
}

XMLDosyasi.WriteEndElement();

//Root eleman kapatılıyor.

XMLDosyasi.WriteEndDocument();

//XML sayfasının yazma işlevi bitti.

XMLDosyasi.Close();

baglanti.Close();

MessageBox.Show("İşlem Tamamlandı.");

14 Temmuz 2013 Pazar

C# - DataGrid - Binding

private void frmDGV_Load(object sender, EventArgs e)
{
    //dummy data
    List lstStaff = new List();
    lstStaff.Add(new Staff()
    {
        ID = 1,
        Name = "XX"
    });
    lstStaff.Add(new Staff()
    {
        ID = 2,
        Name = "YY"
    });

    
    BindingSource binding = new BindingSource();
    binding.DataSource = lstStaff;

    dataGridView1.DataSource = binding;
}


12 Temmuz 2013 Cuma

ORA-12011 Hata mesajı

09:24:52 Info: Job #565 could not be executed.
ORA-12011: 1 anlık goruntulerini kendiliğinden yenilemeyi basaramadı
ORA-06512: konum "SYS.DBMS_IJOB", satır 651
ORA-06512: konum "SYS.DBMS_JOB", satır 284
ORA-06512: konum satır 1

 Alınan hatanın kaynağı, Job ile çalıştırılmak istenen prosedür veya uygulamanın tanımlı bulunduğu Kullanıcı üzerinden Job ın oluşturulması gerekir. Farklı kullanıcı ile oluşlturulan JOB larda bu hata mesajı alınmaktadır.

26 Haziran 2013 Çarşamba

Linux İşletim Sistemi/Linux Komutları/Disk komutları

< Linux İşletim Sistemi / Linux Komutları

Konu başlıkları

  [] 
  • 1 df

  • 2 du
  • 3 mount
  • 4 umount

  • df[]

    Salt olarak kullanıldığında sabit disk(ler)in ve bölüm(ler)in (partition) toplam boyutlarını, kullanılmış alanlarını, boş alanlarını, yüzde kaçının dolu olduğunu ve nereye bağlı olduğunu verir. Çıktısı şuna benzer bir şeydir:
    Dosyasistemi         1K-blok        Dolu Boş       Kull%Bağlanılan yer
    /dev/sda5             60743612  16382312  43744180  28% /
    tmpfs                   509664       608    509056   1% /dev/shm
    /dev/sda1             55505488  11465220  44040268  21% /mnt/sda1
    
    "1K-blok" yazan yer ilgili bölümün (veya sabit diskin) toplam boyutudur. Varsayılan durumda bu değerler KB cinsinden görüntülenir. Ancak istersek ekleyeceğimiz çeşitli seçeneklerle bu birimi değiştirebiliriz. m seçeneği ile sonuçların MB cinsinden olmasını k seçeneği ile de KB cinsinden olmasını sağlarız (varsayılan). Ancak bunlardan en kullanışlısı h'dir. h seçeneği ile sonuçların gösterilebilecek en büyük birimle gösterilmesini sağlarız. Örnek:
    df -h
    

    du[]

    Salt olarak kullanıldığında aktif klasörün ve aktif klasörün altındaki tüm klasörlerin (alt klasörler de dahil) isimlerini ve toplam boyutlarını verir. Burada boyuttan kastımız ilgili klasörün içindeki her şeyin boyutudur. Bu durumu kolay anlayabilmeniz için olayı şöyle somutlaştırayım: aktif klasörünüzün alt klasörleri şöyle olsun:
    Ana Klasör
    • dosya1.mpg
    Alt Klasör
    • dosya1.mpg
    • dosya2.mpg
    Alt-Alt klasör
    • dosya1.mpg
    Buradaki dosya1.mpg dosyasının birden fazla klasörde birer kopyası var. Alt Klasör klasöründe de bir dosya2.mpg dosyası var. dosya1.mpg dosyasının boyutu 10 MB, dosya2.mpg dosyasının ise 20 MB olsun. Biz Ana Klasör klasöründeyken du komutunu verirsek şöyle bir çıktı alırız (du komutunu h seçeneği ile verin ki boyut bilgilerini okumak kolay olsun):
    10M     ./Alt Klasör/Alt-Alt klasör
    40M     ./Alt Klasör
    50M     .
    
    Tahmin edebileceğiniz gibi du komutunun m, k (varsayılan) ve h seçenekleri vardır. Ayrıca istersek du komutuyla belirli bir klaasörün boyutunu da öğrenebiliriz. Ancak bunun için komuta s seçeneğini eklemeliyiz. Örnek:
    du -sh ../Klasör
    
    Bu komutla bir üst klasördeki Klasör klasörünün ismini ve boyut bilgisini en okunaklı şekilde alırız. Ancak bu durumda sadece belirttiğimiz klasörün bilgisi verilir. Alt klasörlerin bilgisi verilmez. Örneğin şu komutu verirsek:
    du -sh "Ana Klasör"
    
    şöyle bir çıktı alırız: (yukarıdaki klasör ağacımızdaki Ana Klasör klasörü)
    50M     Ana Klasör
    
    Bu yöntemle sadece klasör değil, dosya da belirtebiliriz. Örnek:
    du -sh *.mpg
    
    Bu komutla aktif klasördeki mpg uzantılı dosyaların boyutlarını bir liste şeklinde alırız.
    du -sh *.mpg *.flv
    
    Bu komutla aktif klasördeki mpg ve flv uzantılı dosyaların boyutlarını bir liste şeklinde alırız.
    du -sh *.mpg *.flv Klasor
    
    Bu komutla da aktif klasördeki mpg ve flv uzantılı dosyaların ve Klasor klasörünün boyutlarını bir liste halinde alırız.

    mount[]

    mount komutu ile herhangi bir aygıtı herhangi bir klasöre bağlayabiliriz. Bu sayede o klasörü açtığımızda o aygıtın içindekilere erişebiliriz. Aslına bakarsanız Ubuntu ve Pardus gibi modern dağıtımlarda bu işlem otomatik olarak gerçekleşir. Örneğin CD-ROM sürücüsüne bir CD taktığınızda CD'yle ne yapmak istediğinizi belirten bir ileti kutusu görüntülenir. Ancak modern dağıtımlarda mount komutunun kullanılması kısıtlanmamıştır. Şimdi CD-ROM sürücünüze bir CD yerleştirin ve şu komutu verin:
    mount /dev/cdrom "Yeni Klasör"
    
    Bu komutu verdikten sonra aktif dizininizdeki Yeni Klasör klasörünü açtığınızda taktığınız CD'deki dosya ve klasörleri görebileceksiniz.

    umount[]

    umount komutu mount komutunun yaptığının tersini yani "bağlantıyı kesme" işlemini yapar. Bu sayede CD-ROM'a bağlı klasörünüzün gerçek içeriğini tekrar görebilirsiniz. Az önceki bağlantıyı kesmek için şu komutu verin:
    umount /dev/cdrom
    
    NOT: mount ve umount komutlarını kullanabilmeniz için root modunda olmalısınız.
    NOT: Dosya yöneticinizde mount komutunu vermenize rağmen Yeni Klasör klasöründe CD'nin içeriği gözükmüyorsa, veya umount komutunu vermenize rağmen halen gözüküyorsa birkaç kez F5'e basmanız, dosya yöneticinizi kapatıp açmanız ve/veya biraz beklemeniz gerekebilir.
    NOT: Bağlantının yapılabilmesi veya sorunsuz kesilebilmesi için komut isteminde bağlanan klasörün içinde olmamanız tavsiye edilir.