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
| Tablo | Sütunlar | Bağlantı |
|---|---|---|
bank_branches | branch_id, name, city, opened_year | |
bank_customers | customer_id, full_name, city, segment, branch_id, … | branch_id → bank_branches |
bank_accounts | account_id, customer_id, account_type, currency, status, … | customer_id → bank_customers |
bank_txns | txn_id, account_id, txn_time, amount, txn_type, channel | account_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ım | T-SQL konusu |
|---|---|
| 1. Değişkenlerle sorgu | DECLARE, tarih hesabı |
| 2. Geçici tablo | SELECT ... INTO #hareket |
| 3. Saklı yordam | CREATE OR ALTER PROCEDURE, parametreler, SET NOCOUNT ON |
| 4. Hata yönetimi | THROW, 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;
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.