Üye Ol | Bağlan
ANASAYFA | VERİTABANI | PROGRAMLAMA | HAKKIMIZDA | BLOG | ETKİNLİKLER | KAYNAKLAR
Yazı Hakkında
  Seviye:
Yazar:Abdullah ÇATAKLI
Okunma: 4244
Oylanma:13 kişi (10/10)
 
 
Tavsiye Et
Yazıcı Dostu
Evrak Çantama Al
 
KATEGORİLER
  VERİTABANI
    ORACLE
    HIZLI SQL KURSU-1
    SQL SERVER 2005
    SQL SERVER 2000
PROGRAMLAMA
    JAVA
    ADO.NET
    MOBİL PROGRAMLAMA
    ASP.NET
    VB.NET
    C# ve C#.NET
İŞARETLEME DİLLERİ
    HIZLI WEB PR. KURSU
    XML
HABERLER
EĞİTİM & SERTİFİKA
KİTAP
SÖYLEŞİ
HAKKIMIZDA
BLOG
ETKİNLİKLER
 
  XHTML,CSS,VBScript,ASP SQL Lab 2.0 Beta
Hızlı SQL Kursu(Yeni)
 
 
Son Eklenenler
 
SQL SERVER 2005
COALESCE Fonksiyonu ile Dinamik Where Şartları Hazırlamak

Transact SQL’de SQL Server 2008 Yenilikleri-1

SQL Server’da verileri Türkçe Karaktere Dönüştürmek

StrToCursor Prosedürü ile Hızlı ve Kolay Cursor Açmak

Triggerı Hangi Olayın Tetiklediğini Tespit Etmek

İleri Cursor Açma Tekniği

Yazılımcılar için SQL Server Erişim Güvenliği

JAVA
Java'ya GiriŞ - 3 : JCreator Editörü

HABERLER
Verivizyon.com Topluluk Kurucusuna MVP Ödülü

Verivizyon yeni sunucularında

 
Bu Bölümden
MS SQL Server'a Erişmek Hakkında Her şey(10034 yükleme)
Yazılımcılar için SQL Server Erişim Güvenliği(7494 yükleme)
SQL Server Verilerini 2005 Sürüme Aktarmak(7174 yükleme)
SQL Server 2005'de CLR Desteği-2(6765 yükleme)
İleri Cursor Açma Tekniği(6556 yükleme)
Rütbeleme Fonksiyonları ile Kayıtları Sıralamak(6170 yükleme)
COALESCE Fonksiyonu ile Dinamik Where Şartları Hazırlamak(5396 yükleme)
Tablo Tipli Kullanıcı Tanımlı Fonksiyonlar Kodlamak(5391 yükleme)
Transact SQL’de SQL Server 2008 Yenilikleri-1(5246 yükleme)
Satırları Sütuna veya Sütunları Satıra Dönüştürmek(5155 yükleme)
 
 
E-LİSTE
BT ve özellikle Veritabanı ile ilgili haber, yenilik ve etkinlikler hakkında önceden haber almak için bize e-mail adresinizi bırakabilirsiniz.

ANKET
SQL Server 2008'e geçtiniz mi?
Sorunsuz Geçtik
2005'e yeni geçtik
2000 bize yetiyor.
 

 


StrToCursor Prosedürü ile Hızlı ve Kolay Cursor Açmak


Cursor Açmak Hiç Bu Kadar Kolay Olmamıştı. StrToCursor
prsedürüyle herhangi bir string ifadeden çok basit bir şekilde Cursor
alabiliyoruz. Uzun uzadıya tanımlamalarla değil hızlı bir şekilde tam parametrik
cursor açabiliriz.

Üstelik bu prosedür; sistem nesnesi olarak tanımlandığı için parametrede verilen select scriptiniz başka bir veritabanını sorguluyor olsa bile her veritabanından sadece adı ile direk erişebilirsiniz.

Declare  @CR
 Cursor

Exec StrToCursor
 ' Select Name
From SysObjects Where Xtype = ''u'' 
',@CR
Output

İşte bu kadar. Cursorumuz hazır. Artık Fetch Next metoduyla ilk satıra konumlanabiliriz.

Prosedürün yaptığı işlem; stringden dönen cursoru output ederek bizim kullanımımıza sunmak. Tabi bu arada prosedür cursoru Open ederek gönderiyor. Yani bizim tekrar cursoru açmamıza gerek kalmıyor. Yapmamız gereken sadece Fetch Next metoduyla ilk satıra konumlanıp değişkenlerimize ilk değerlerimizi almak ve while döngüsüne girmektir. Bu sayede hem tam parametrik hemde hızlı ve sade bir şekilde cursor elde etmiş olduk.

Bu kadar açıklamadan sonra şimdide bir örnek yapalım.

Aşagıdaki örnekte Prosedürümüz master veritabanında kayıtlı. Sorgu TIGER veritabanını kullanıyor. Ve biz MSDB veritabanından bu prosedüre direk erişip cursorumuzu açabiliyoruz.

Use MSDB

declare @cursor cursor

exec StrToCursor 'Select
Name From TIGER..SysObjects Where Xtype
= ''u''  ',@cursor output

 

----- Cursorumuz Burada
Kullanıma Hazır…

 

 declare @s varchar(100) 

 fetch next from @cursor into @s

 

 while @@fetch_status = 0

   begin

     print @s

     fetch next from @cursor into @s

   end

  

  close @cursor 

  deallocate @cursor

bu örnekte sysobject tablosu içinde bulunan tablolarımızın isimlerini StrToCursor prosedürümüzle ekrana print ediyoruz.

StrToCursor Prosedürünün Create Scripti

Use Master

go

Sp_Ms_Upd_SysObj_Category 1

go

IF EXISTS (SELECT name FROM
sysobjects WHERE name = 'StrToCursor' AND type = 'P')

DROP PROCEDURE StrToCursor

GO

CREATE PROCEDURE
StrToCursor( @SqlStr NVarchar(4000),@OutCursor CURSOR VARYING OUTPUT )

AS 

BEGIN

set nocount on

Declare @Cursor cursor

set @SqlStr = 

' SET @Cursor = CURSOR FOR
'+@SqlStr+' OPEN @Cursor '

EXEC master..sp_executesql
@SqlStr, N' @Cursor CURSOR OUTPUT ', @Cursor OUTPUT

SET @OutCursor = @Cursor

select
CURSOR_STATUS('variable','@Cursor') , 

  case CURSOR_STATUS('variable','@Cursor') 

         when  1 then  'Cursor Kullanıma Hazır' 

         when  0 then  'Cursor Boş' 

         when -1 then  'Cursor
Kapalı' 

         when -2 then  'Cursor
Kulanım dışı' 

         when -3 then  'Cursor
Tanımlanmamış' 

         end 

set nocount off

END

GO

 

Sp_Ms_Upd_SysObj_Category 2


 

Select 

Case 

When
isnull(object_id('StrToCursor'),0) = 0 
then 'Prosedür Oluşturulamadı'

When
objectproperty(object_id('StrToCursor'),'IsMSShipped') = 1  then 

'Prosedür Sistem Objesi
Olarak Oluşturuldu. Herveritabanından Direk Erişebilirsiniz'

When
objectproperty(object_id('StrToCursor'),'IsMSShipped') = 0  then 

'Prosedür Sistem Objesi
Olarak Oluşturulamadı. Yetkilerinizi Kontrol Edin'

End

Sonuç

Sonuç olarak şunu söyleyebilrim. Sql serverlar zaten cursor oluşturular. Bizim buradaki amacımız tam parametrik , özel isteklere uyarlanabilen ve kullanımı kolay olan bir yöntemle cursor oluşturmak , programcının üzerindeki iş yükünü ve kod karmaşası azaltmak olarak özetlenebilir. Bunlar benim kendim için hazırlayıp kullandığım araçlarımdır. Sizlerle paylaşmak istedim. Tüm olumlu veya olumsuz eleştirilere açığım. İsterseniz prosedürü daha da geliştirebilirsiniz. Örneğin parametrede cursor tipi belirtip ona göre içerde farklı tipte cursorlar oluşturabilirisiniz.

[12.10.2007]
Oy Ver: Kötü 1  2  3  4  5  6  7  8  9  10  İyi


YORUMUNUZ
Kullanıcı :
Başlık :
İçerik:
Lütfen Giriş Yapınız

Abdullah ÇATAKLI
Yazarımız 1980 ANKARA Doğumlu olup aslen Çankırı'lıdır. Uygulamalarını Delphide geliştirmektedir. VTYS olarak MsSql Server ve Oracle kullanmaktadır. C# ve Java'ya yönelik çalışmaları devam etmektedir. Şu an Ankara'da özel bir şirkette Kamu Kurumlarına projeler geliştirmektedir.
Yazara Ait Son Eklenen Makaleler
COALESCE Fonksiyonu ile Dinamik Where Şartları Hazırlamak(22.10.2008)
Triggerı Hangi Olayın Tetiklediğini Tespit Etmek(25.06.2008)
İleri Cursor Açma Tekniği(04.11.2007)
StrToCursor Prosedürü ile Hızlı ve Kolay Cursor Açmak(12.10.2007)
Nedir bu DBCC komutları?(11.04.2007)
TC Kimlik No Doğrulama Algoritması(12.02.2007)
T-Sql Tasarım Desenleri 1 : Obje Aramak(26.05.2006)
101 T-SQL İpucu-4(23.05.2006)
T-SQL Programcısına Hazır Kütüphane(18.04.2006)
101 Transact SQL İpucu: Bölüm-3(10.04.2006)
 

© 2003 - 2005 Verivizyon.com 'Developer Academy'. Tüm hakları saklıdır. Kullanım Sözleşmesi | Gizlilik İlkeleri | İletişim