Ana içeriğe geç
Kesit SQL
İleri · SQL Türlerine Özgü

Oracle'a özgü yazımlar

DUAL, NVL/NVL2/DECODE, ROWNUM, TO_CHAR, boş metin = NULL, MINUS, CONNECT BY.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Oracle'ın temel farkları

SELECT SYSDATE AS simdi,
       TO_CHAR(DATE '2024-05-17', 'DD.MM.YYYY') AS tr_tarih,
       NVL(NULL, 'yok') AS nvl_ornek,
       NVL2('x', 'dolu', 'bos') AS nvl2_ornek,
       DECODE('B', 'A', 'Elma', 'B', 'Armut', 'Diğer') AS decode_ornek
FROM dual;

Boş metin NULL'dır

SELECT CASE WHEN '' IS NULL THEN 'Boş metin NULL sayılır' ELSE 'Değil' END AS sonuc,
       'Ad' || NULL || 'Soyad' AS birlestirme
FROM dual;

Oracle'da '' ile NULL aynıdır ve || NULL'ı yok sayar. Diğer SQL türlerinden taşınan kodlarda sık hata kaynağıdır.

ROWNUM ve FETCH FIRST

-- Eski yöntem: önce sırala, sonra ROWNUM ile kes
SELECT * FROM (
  SELECT name, price FROM products ORDER BY price DESC
)
WHERE ROWNUM <= 3;

ROWNUM, ORDER BY'dan önce atanır; bu yüzden sıralı ilk N için alt sorgu gerekir. 12c ve sonrasında FETCH FIRST 3 ROWS ONLY kullan.

Hiyerarşik sorgu: CONNECT BY

SELECT LEVEL AS seviye, LPAD(' ', 2 * (LEVEL - 1)) || first_name AS calisan
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR emp_id = manager_id;

Oracle'ın özyinelemeli CTE'den önceki hiyerarşi sözdizimidir; hâlâ çok yaygındır. Bu taklitte çalıştırılamaz; aynı sonucu özyinelemeli WITH ile alabilirsin.

Alıştırmalara geç (3)