Ana içeriğe geç
Kesit SQL
İleri · Bitirme Projeleri

Bitirme projesi (T-SQL): şube raporu için saklı yordam ve hata yönetimi

Değişkenler, geçici tablo, saklı yordam, TRY/CATCH ve işlem yönetimi.

Uygulamada aç, 8 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ç.

Senaryo

Ilgaz Bank şube müdürleri kendi şubelerinin aylık özetini bir düğmeyle almak istiyor. Raporu SQL Server'da bir saklı yordam olarak yazacaksın; yanlış parametrede anlaşılır hata vermeli.

Bu proje yalnızca SQL Server (T-SQL) yazımıyla çözülür. Varsayılan SQL türünün farklıysa adımlar yine SQL Server modunda açılır.

Kullanacağın tablolar

TabloSütunlarBağlantı
bank_branchesbranch_id, name, city, opened_year
bank_customerscustomer_id, full_name, city, segment, branch_id, …branch_id → bank_branches
bank_accountsaccount_id, customer_id, account_type, currency, status, …customer_id → bank_customers
bank_txnstxn_id, account_id, txn_time, amount, txn_type, channelaccount_id → bank_accounts

Bir şubenin hareketlerine ulaşmak için dört tablo zincirlenir: şube → müşteri → hesap → hareket. Ay filtresi için yarı açık aralık kullan: txn_time >= @bas AND txn_time < DATEADD(month, 1, @bas).

Adımlar

AdımT-SQL konusu
1. Değişkenlerle sorguDECLARE, tarih hesabı
2. Geçici tabloSELECT ... INTO #hareket
3. Saklı yordamCREATE OR ALTER PROCEDURE, parametreler, SET NOCOUNT ON
4. Hata yönetimiTHROW, BEGIN TRY ... END CATCH

Yordam iskeleti

CREATE OR ALTER PROCEDURE dbo.usp_ornek
  @sube INT,
  @ay   CHAR(7)          -- 'YYYY-AA'
AS
BEGIN
  SET NOCOUNT ON;
  IF NOT EXISTS (SELECT 1 FROM dbo.bank_branches WHERE branch_id = @sube)
    THROW 50001, N'Şube bulunamadı', 1;

  DECLARE @bas DATE = CAST(@ay + '-01' AS DATE);

  SELECT t.txn_type, COUNT(*) AS adet
  FROM dbo.bank_txns t
  JOIN dbo.bank_accounts a  ON a.account_id = t.account_id
  JOIN dbo.bank_customers c ON c.customer_id = a.customer_id
  WHERE c.branch_id = @sube
    AND t.txn_time >= @bas AND t.txn_time < DATEADD(month, 1, @bas)
  GROUP BY t.txn_type;
END;
Önce sorgu, sonra yordamYordamın gövdesini önce değişkenli bir sorgu olarak çalıştır ve sonucu doğrula (Adım 1–2). Doğru çalışan sorguyu yordama sarmak en az hatalı yoldur.

Karar ve teslim

Son üç adım projeyi rapordan karara taşır: Yordamın filtresini indekse uygun hâle getirirsin, şube toplamlarını doğrudan sayıyla sağlarsın, ardından kurula hangi şubelerin yükü taşıdığını gösterirsin. Teslim: yordam kodu, mutabakat sonucu ve ilk üç şube tablosu.

Alıştırmalara geç (8)