select Etiketine sahip yazılar.
May
13
2011

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

Şub
23
2011

İki farklı veritabanına ait tabloları aynı sorguda nasıl kullanabiliriz?

Ortak VERİTABANI sunucularımızda zaman zaman farklı amaçlarla, farklı programlar için kurulmuş olan tablolarımızın bazen ortak bir sorguda birlikte kullanılması gerekebilir.

Bu tür durumlarda yazılımcılar sorunu veritabanlarına farklı farklı bağlanarak yazılımsal olarak çözme yoluna gidebilirler 🙂 Ancak sorguların CLIENT üzerinde çevrilmesinin SERVER üzerinde çevrilerek sadece sonuçların CLIENT sisteme gönderilmesinin daha hızlı olacağını savunanlardan olduğumdan bana göre bu tür işlemler sunucunun tek olduğu zamanlarda basit SQL yazım teknikleri ile rahatça çözülebilir.

Örnek olarak elimizde Veritabani1 ve Veritabani2 adında iki farklı veritabanımız olsun ve TB1 ile TB2 adında da iki farklı tablomuz olsun.

“Genelde MSSQL üzerindeki yapılara baktığımızda tablo isimlerinin solunda dbo. gibi o tabloyu açan kullanıcının bilgisini görebilirsiniz. Biz şimdi bu bilgiyi kullanacağız”

Select db1.*,db2.* from veritabani1.dbo.tb1 db1, veritabani2.dbo.tb2 db2

evet gördüğünüz gibi çok basit olarak veritabani1.dbo.tb1 tanımı için db1 adında ALIAS oluşturduk ve bunu select cümlemizde kısaltma amaçlı olarak kullandık.

Şimdi düşünelim bunu yazılımsal yapmak mı daha kolay yoksa sorgu cümlesinde mi?

Karar sizin.

Mar
24
2009

MySQL ile TOP 5 gibi sorgular nasıl yapılır?

Uzun bir aradan sonra yeniden merhaba,

Yine bir sorun yaşandı ve pratik olarak sorun giderildi. Şu MYSQL sorguları da bir standart haline gelebilse daha çok sevineceğim ama elde değil.

Farklı farklı VTYS ile çalışırken SQL sorgu dönüşümlerini de beraberinde yapmak sanırım kaçınılmaz olmaya başladı, bu günde daha önceden yapmış olduğum bir MYSQL bağlantısı üzerinde “Select TOP 10 from vtsamsun”  gibi bir sorguyu çalıştırmak istedim ama o da ne? MYSQL TOP 10 komutumu kabul etmedi.

Bunun üzerine biraz araştırma yapınca MYSQL ve ORACLE sistemlerinde bu sorgunun farklı şekillerde kullanılması gerektiğini gördüm ve belki işinize yarayabilir diye aşağıdaki dönüşüm cümleciklerini oluşturdum.

Örnek olarak ilk 10 kaydı sorgulamak istersek;

MSSQL üzerinde

SELECT TOP 10 ad, soyad, email FROM vtsamsun

MYSQL üzerinde

SELECT  ad, soyad, email FROM vtsamsun LIMIT 10

ORACLE üzerinde

SELECT  ad, soyad, email FROM vtsamsun WHERE ROWNUM <= 10

şeklinde cümlecikler yazmamız gerekiyor.



TeamViewer ile İnternet üzerinden Uzaktan Erişim ve Destek Sekercioglu.eu Uzaktan Yardım
Ammyy Uzaktan Yardım
WinRAR
WEBMAIL Google PageRank Checker
Twitterda Takip Edin! Twitterda Takip Edin!
Twitter

Üye Paneli

Son Yazılar

Kategoriler

Son Yorumlar