SQL PROCEDURE MACERASI -6
Şu ana kadar anlatılanlarda hep DCL (Data Control Language) ile bir şeyleri kontrol edip, ilgili veritabanı üzerinde çeşitli işlemler yaptık.
Bu yapılan işlemler sonucunda da olumsuz durum oluşmuş ise hata mesajı döndürdük.
Peki ya tek adımlık işlemler yerine bir takım recordset yapıları üzerinden veri okumaya yönelik çalışmak isteseydik?
Aslına bakarsanız bu konu, önceden anlattıklarımızdan çok daha basit bir yapıya sahiptir ve her şey sizin HAYAL GÜCÜNÜZE bağlıdır.
SQL konusuna ilk başladığım günlerde daha VIEW nedir? Bilmezken. Yazmış olduğum programlarda uzun uzun SELECT cümleciklerini
sıralardım.
Sonrasında VIEW yaratmayı ve yaratılan sorguların yükünün sunucu tarafına bindirilmesini gördüm. Evet, sorgularım hızlanmıştı.
Demek ki bu VIEW dedikleri güzel bir şeydi 🙂
Ama zaman içersinde benim sorgular gittikçe büyüdü, tablolarımdaki veriler 100 binlerce satır halini almaya başladı ve hep daha
hızlısını istedikçe VIEW konusu da bana yetmemeye başladı.
Çünkü VIEW üzerinden bir veriyi alabilmek için öncelikle tüm ilgili verileri kapsayacak şekilde bir recordset alanı oluşturulmalı
ve yaratılan bu recordset üzerinden de WHERE cümlecikleri ile istenilen şartlar seçilmeliydi.
Gözden kaçan ise VIEW ilk yaratıldığında ya da çağrıldığında veritabanı üzerinde ilgili ne varsa önce çantasına dolduruyor,
ardından da sizden ilgili şartlar ile bu çantadakileri seçmenizi istiyordu.
Durum böyle olunca da program ciddi ölçüde yavaşlıyordu.
Daha sonra bu işi Stored Procedure ile nasıl yaparım? Konusuna geldim. Prosedür mantık olarak dışarıdan gelen parametreler
doğrultusunda bir sorgu yapacak ve çıktısını programa ulaştıracaktı.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
— =============================================
— Author: Burak SEKERCIOGLU
— Create date: 12/05/2011
— Description: SP TEST-6
— =============================================
CREATE PROCEDURE [sp_test] (@tip int)
AS
BEGIN
SET NOCOUNT ON;
if @tip=1
begin
SELECT TOP (100) PERCENT
webadresi,
epostaadresi,
kurumunvani,
sicilno,
grupkodu,
durumbilgisi,
istihdam,
marka,
urunler,
sektor,
adres
FROM
kurumex LEFT OUTER JOIN sektorler ON kurumex.sektor = sektor.id
RIGHT OUTER JOIN kurumlar ON kurumex.kno = kurum.kno
WHERE (kurumex.sanayi = 1)
end
if @tip=2
begin
SELECT TOP (100) PERCENT
webadresi,
epostaadresi,
kurumunvani,
sicilno,
grupkodu,
durumbilgisi,
istihdam,
marka,
urunler,
sektor,
adres
FROM
kurumex LEFT OUTER JOIN sektorler ON kurumex.sektor = sektor.id
RIGHT OUTER JOIN kurumlar ON kurumex.kno = kurum.kno
WHERE (kurumex.ithalat = 1)
end
if @tip=3
begin
SELECT TOP (100) PERCENT
webadresi,
epostaadresi,
kurumunvani,
sicilno,
grupkodu,
durumbilgisi,
istihdam,
marka,
urunler,
sektor,
adres
FROM
kurumex LEFT OUTER JOIN sektorler ON kurumex.sektor = sektor.id
RIGHT OUTER JOIN kurumlar ON kurumex.kno = kurum.kno
WHERE (kurumex.ihracat = 1)
end
END
Yukarıdaki kodlardan da görebileceğiniz gibi prosedürümüze dışarıdan sadece @tip bilgisi gönderiliyor ve o da bu veriye göre
Sanayici, İthalatçı, İhracatçı ayrımı yaparak sadece ilgili verileri listeden çekiyor.
Diğer türlü ya ayrı ayrı view tasarımı yapılacaktı ya da tek view üzerinden WHERE ile sorgulama yapılacaktı.
Devamı SQL Procedure Macerası – 7