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

Birebir Çoklama – ORA-02437 ORA-02299 Validation Hatası

Veri Ambarı (DWH) işlerinde çoklama sorunu ile çok sık karşılaşmaktayız. Farklı farklı çoklama şekilleri olsa da ben en sık karşılaşılan örneklerden birini paylaşacağım. Veri Ambarı’nda çoklama olmaması için Primary Key (PK) veya Unique Constraint kullanılır. Hatta tabloya çok fazla data insert edileceği zaman, constraint’ler yavaşlığa sebep olmaması için öncesinde disable edilir veya drop edilir. İnsert veya exchange partition işlemi gerçekleştirildikten sonra, PK veya Unique Constraint valide edilir. Eğer çoklama varsa ve tablodaki PK valide edilmek istenir ise kod “ORA-02437: cannot validate (C##USER2.C_PK) – primary key violated” hatasını alacaktır. Eğer çoklama varsa ve tablodaki Unique Constraint valide edilmek istenirse kod “ORA-02299: cannot validate (C##USER2.C_U) – duplicate keys found” hatasını alacaktır. Çözüm, çoklamayı silip, validasyon adımını yapmaktı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