SQL – Puzzle 10 – Nasıl Gideceğiz? – How Will We Go?

Geçen hafta iş yerindeki ekiple kahvaltıya gidelim dedik. Kimlerde araç olduğu ve kimlerin hangi araçlara dağılacağı görevi de bana düştü. Bu organizasyonu excel’de yaparken, aklıma bunu SQL – Puzzle’a çevirmek geldi.

Toplam 19 kişi var. 5’inin aracı var. Kalan 14 kişiyi araçlara rastgele dağıtmanızı bekliyorum. Her bir araçta 1 araç sahibi (şoför) 3 de yolcu olacak şekilde dağıtmanız gerekiyor. Tabi ki bi araca mecburen 2 yolcu kalıyor. Çünkü toplamda 20 değil, 19 yolcu var.

We planned having a breakfast last week. Organization of cars and passangers was assigned to me. Of course I opened new sheet in Excel and started arrangements. And I realized that it can be SQL – Puzzle!

There are 19 coworkers and 5 of them has their car. Rest of them is 14 passangers . Each car must have 1 driver(owner) and 3 random passengers. Of course one of the car will have 2 passengers. Because there are 19 passanger at total, not 20.

Continue reading

SQL – Puzzle 9 – Sonraki İş Gününü Bulma

Resmi tatilleri ve haftasonlarını da dikkate alarak, bir sonraki ve iki sonraki iş günlerini SQL ile bulmanızı bekliyorum. “tarihler” isimli 1. tabloda 2022 yılına ait tüm tarihler, “resmi_tatiller” isimli 2. tabloda ise tüm tatil günleri yer almaktadır. “sonuc” isimli 3. Tablo ise, minus yapabilmeniz için sizden beklenen final tablo bulunmaktadır.

Continue reading

SQL – Puzzle 8 – Çoklama

2 tabloda da 1 er kayıt var. Joinlenecek sütundaki datalar birebir aynı. Fakat full join yapıldığı zaman çoklama oluyor. Neden çokluyor, çözüm nedir ? ( group by min veya max la çözerim demeyin lütfen 🙂 )

There are 2 tables. Each of them have 1 record and their data of join columns same. But when I use full join, it duplicates recod. Why result looks duplicate, how can we fix it ? ( please don’t say that your solution is group by with min or max )

Continue reading

ORA-12899: value too large for column Hatası ve Çözümü

Veri Ambarında (DWH) bazen kaynak tablolardaki sütunların hassasiyeti (precision, duyarlık) artıyor. Örneğin VARCHAR2(20 BYTE)’den, VARCHAR2(30 BYTE)’ye çıkabiliyor. Bu durumda kaynaktan alınan data veri ambarındaki tablolara yazılmak istendiğinde ORA-12899 hatası ile karşılaşılıyor. Bu durumu simüle ettiğim kod aşağıdaki gibidir:

CREATE TABLE tbl_test AS
SELECT CAST(NULL AS VARCHAR2(20 BYTE)) AS clmn
  FROM sys.dual;

INSERT INTO tbl_test
SELECT '30 karakterlik string ifademiz' AS clmn
  FROM sys.dual; 
--ORA-12899: value too large for column "TBL_TEST"."CLMN" (actual: 30, maximum: 20)

2 farklı çözüm yöntemi var. 1 tanesi substr ile insert edilecek tablodaki sütunun maksimum değeri kadar değer alınıp insert edilebilir. Numerik için bu yöntemi önermiyorum. 2. yöntemi yani hedef tablonun ilgili sütununu modify etme yöntemi uygulanmalı.

Continue reading

Exchange Partition Hatası ORA-14097 ve Çözümü

Veri Ambarı (DWH) işlerinde son tablolar genelde Exchange Partition ile dolar. Eğer kod Exchange Partition adımında hata alıyorsa, genelde sorun data’dadır veya metadata’da farklılık vardır. Data kaynaklı sorunu daha önce BURADA paylaşmıştım. Bu başlıkta Metadata kaynaklı sorunu paylaşacağım. Hatta burada birden fazla olasılık var. Ben önce sütun veri tipi kaynaklı olanı, sonra drop column kaynaklı olan durumu paylaşacağım.

Öncelikle hatayı simüle etmek için kendim BU LINK‘teki kodları çalıştırıp, tbl_customer_hist ve tbl_customer_hist_exc tablolarını dummy data ile ürettim. Exchange olacak ara tabloya Sütun Tabloyu elimden geldiğince kapsamlı yaptım çünkü farklı konuları aktarmak için de bu tabloları kullanacağım.

BU LINK‘teki test kodlarını sırayla çalıştırınca en alttaki kodda şu hata ile karşılaşacaksınız:

ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
Continue reading

Exchange Partition Hatası ORA-14099 ve Çözümü

Veri Ambarı (DWH) işlerinde son tablolar genelde Exchange Partition ile dolar. Eğer kod Exchange Partition adımında hata alıyorsa, genelde sorun data’dadır veya metadata’da farklılık vardır. Bu başlık altında Data kaynaklı sorunu paylaşacağım. Metadata kaynaklı sorun için başka başlık açmayı planlıyorum.

Öncelikle hatayı simüle etmek için kendim BU LINK‘teki kodları çalıştırıp, tbl_customer_hist ve tbl_customer_hist_exc tablolarını dummy data ile ürettim. Tabloyu elimden geldiğince kapsamlı yaptım çünkü farklı konuları aktarmak için de bu tabloları kullanacağım.

BU LINK‘teki test kodlarını sırayla çalıştırınca en alttaki kodda şu hata ile karşılaşacaksınız:

ORA-14099: all rows in table do not qualify for specified partition
Continue reading

SQL – Puzzle 7 – Min Max

Aşağıdaki resimde görüldüğü gibi; elimizde STN1 ve STN2 bazlı unique(tekil) veri var. 3. sütunu siz oluşturup dolduracaksınız. STN1 bazlı, minimum STN2 değerini ilk satıra, maksimum STN2 değerini son satıra yazacaksınız, aradaki kısım NULL olacak.
As you see at the screenshot below, data is unique according to STN1 and STN2. You will calculate the STN3 column. STN3 will be filled with minimum STN2 and maximum STN2 but it must be according to STN1 and only first and last cell must be filled.

Continue reading

SQL – Puzzle 6

Database’deki bir tablosundan, SQL ile HTML tablo kodu üretiniz. Kaynak verisetini, istenen görüntüyü, istenen html kod blogunu compact ve açık halini aşağıda bulabilirsiniz. HTML kodunun formatında özgürsünüz. HTML kodunuzu test etmek için, HTML çıktı kodunuzu notepad’e yapıştırıp, uzantısını HTML olarak değiştirip, tarayıcıda görüntüleyin.
Generate HTML table code from database table. Dataset code, expected output, expected HTML code in compact and formatted way are given below. You are free in HTML output format. To test your HTML code You can copy-paste your code to your Notepad and change the extension and open the file in browser.

Continue reading

Oracle Database Proje Jaguar – Veritabanı Proje

Jaguar araçlarının yer aldığı bir veritabanı projesi yapmak istedim. Keyfi olarak yapmaya başladığım bu veritabanı projesinde şimdilik, yıl bazlı en az yakıt tüketen ve en performanslı Jaguar marka araçlar HTML tablosu olarak listeleniyor. Aklıma geldikçe, kullanımı kolay olmayan kod ve sorguları buraya eklemeye devam edeceğim. Sayfanın en sonunda, tüm kodları paylaştım. Fikir, öneri, eleştiri, istek vs için iletişim kısmından bana yazabilirsiniz.

Continue reading

Oracle Create Trigger Örneği – Before Insert

Oracle veritabanında fikir vermesi açısından örnek bir trigger paylaşmak istedim. Trigger’ın amacı; tabloya yeni kayıt insert edilmeden önce, karakter alanındaki string’in ilk harf’ini INITCAP fonksiyonu ile büyük harf yapmak. ( insert sonrası kontrol edilip, update de yapılabilir ama performans açısından hatalı bir yaklaşım olur.) Örnek kullanım için tbl_trigger_ornek isminde bir tablo oluşturdum. Insert edileceği değeri :NEW.ack ile elde edip, built-in INITCAP fonksiyonu kullanarak yeni bir değişkene attım. Devamında bu değişkeni :NEW.ack’ya yazdım.

Continue reading