logo

SQL Server'daki imleç

SQL Server'daki bir imleç bir d'dir Her satırı tek seferde almamıza ve verilerini işlememize olanak tanıyan atabase nesnesi . İmleç, bir satırın işaretçisinden başka bir şey değildir. Her zaman SELECT ifadesiyle birlikte kullanılır. Genellikle bir koleksiyondur SQL önceden belirlenmiş sayıda satır boyunca tek tek dolaşan mantık. İmlecin basit bir örneği, işçi kayıtlarının kapsamlı bir veritabanına sahip olduğumuz ve vergiler ve izinler düşüldükten sonra her işçinin maaşını hesaplamak istediğimiz durumdur.

SQL Sunucusu İmlecin amacı veriyi satır satır güncellemek, değiştirmek veya tüm kayıtları bir kerede aldığımızda mümkün olmayan hesaplamaları gerçekleştirmektir. . Ayrıca SQL Server veritabanı yedeklemeleri gibi yönetim görevlerini sıralı olarak gerçekleştirmek için de kullanışlıdır. İmleçler çoğunlukla geliştirme, DBA ve ETL süreçlerinde kullanılır.

Bu makalede, imleç yaşam döngüsü, imlecin neden ve ne zaman kullanıldığı, imleçlerin nasıl uygulanacağı, sınırlamaları ve imleci nasıl değiştirebileceğimiz gibi SQL Server imleci hakkında her şey açıklanmaktadır.

İmlecin Yaşam Döngüsü

Bir imlecin yaşam döngüsünü şu şekilde tanımlayabiliriz: beş farklı bölüm aşağıdaki gibi:

SQL Server'daki imleç

1: İmleci Bildir

İlk adım, aşağıdaki SQL ifadesini kullanarak imleci bildirmektir:

ubuntu temelleri oluşturma
 DECLARE cursor_name CURSOR FOR select_statement; 

DECLARE anahtar sözcüğünden sonra CURSOR veri türüyle adını belirterek bir imleci bildirebiliriz. Daha sonra imlecin çıktısını tanımlayan SELECT ifadesini yazacağız.

2: İmleci Aç

Sonuç kümesinden alınan verileri depolamak için imleci açtığımız ikinci adımdır. Bunu aşağıdaki SQL ifadesini kullanarak yapabiliriz:

 OPEN cursor_name; 

3: İmleci Getir

Bu, imleçteki o anda etkin olan satırda ekleme, güncelleme ve silme işlemleri gibi veri manipülasyonlarını gerçekleştirmek için satırların tek tek veya bir blok halinde getirilebildiği üçüncü adımdır. Bunu aşağıdaki SQL ifadesini kullanarak yapabiliriz:

 FETCH NEXT FROM cursor INTO variable_list; 

Ayrıca şunu da kullanabiliriz: @@FETCHSTATUS işlevi İmlece karşı yürütülen en son FETCH ifadesi imlecinin durumunu almak için SQL Server'da. GİDİP GETİRMEK @@FETCHSTATUS sıfır çıktı verdiğinde ifade başarılı olmuştur. SIRASINDA deyimi imleçteki tüm kayıtları almak için kullanılabilir. Aşağıdaki kod bunu daha açık bir şekilde açıklamaktadır:

 WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM cursor_name; END; 

4: İmleci Kapat

Bu, imleçle çalışmayı bitirdikten sonra imlecin kapatılması gereken dördüncü adımdır. Bunu aşağıdaki SQL ifadesini kullanarak yapabiliriz:

 CLOSE cursor_name; 

5: İmlecin Yerini Serbest Bırak

İmleç tanımını sileceğimiz ve imleçle ilişkili tüm sistem kaynaklarını serbest bırakacağımız beşinci ve son adımdır. Bunu aşağıdaki SQL ifadesini kullanarak yapabiliriz:

 DEALLOCATE cursor_name; 

SQL Server İmlecinin Kullanım Alanları

SQL Server da dahil olmak üzere ilişkisel veritabanı yönetim sistemlerinin, sonuç kümeleri adı verilen bir dizi satırdaki verileri işlemede mükemmel olduğunu biliyoruz. Örneğin , bir masamız var ürün_tablosu ürün açıklamalarını içerir. Güncellemek istiyorsak fiyat ürünün ardından aşağıdaki ' GÜNCELLEME' sorgu, ' koşuluyla eşleşen tüm kayıtları güncelleyecektir. NEREDE' cümle:

 UPDATE product_table SET unit_price = 100 WHERE product_id = 105; 

Bazen uygulamanın satırları tekil bir şekilde, yani tüm sonuç kümesini aynı anda işlemek yerine satır satır işlemesi gerekir. Bu işlemi SQL Server'da imleçleri kullanarak yapabiliriz. İmleci kullanmadan önce imleçlerin performansının çok kötü olduğunu bilmeliyiz, bu nedenle her zaman yalnızca imleç dışında seçenek olmadığında kullanılmalıdır.

İmleç, tüm programlama dillerinde aynı anda bir nesneyi yinelemek için FOREACH, FOR, WHILE, DO WHILE gibi döngüleri kullandığımız tekniğin aynısını kullanır. Dolayısıyla programlama dilinin döngü süreciyle aynı mantığı uyguladığı için seçilebilir.

SQL Server'daki İmleç Türleri

SQL Server'da aşağıda listelenen farklı imleç türleri şunlardır:

  • Statik İmleçler
  • Dinamik İmleçler
  • Yalnızca İleri İmleçler
  • Tuş Seti İmleçleri
SQL Server'daki imleç

Statik İmleçler

Statik imleç tarafından gösterilen sonuç kümesi her zaman imlecin ilk açıldığı zamankiyle aynıdır. Statik imleç sonucu saklayacağından tempdb , onlar her zaman Sadece oku . Hem ileri hem de geri hareket etmek için statik imleci kullanabiliriz. Diğer imleçlerin aksine daha yavaştır ve daha fazla hafıza tüketir. Sonuç olarak, onu yalnızca kaydırma gerektiğinde kullanabiliriz ve diğer imleçler uygun değildir.

Bu imleç, açıldıktan sonra veritabanından kaldırılan satırları gösterir. Statik bir imleç herhangi bir INSERT, UPDATE veya DELETE işlemini temsil etmez (imleç kapatılıp yeniden açılmadıkça).

Dinamik İmleçler

Dinamik imleçler, imleç açıkken veri güncelleme, silme ve ekleme işlemlerini gerçekleştirmemizi sağlayan statik imleçlerin karşısındadır. Bu varsayılan olarak kaydırılabilir . Değişikliklerin imlecin içinde veya dışında gerçekleşmesine bakılmaksızın, sonuç kümesindeki satırlarda, sıralarda ve değerlerde yapılan tüm değişiklikleri tespit edebilir. İmlecin dışında güncellemeleri taahhüt edilene kadar göremeyiz.

Yalnızca İleri İmleçler

Tüm imleçler arasında varsayılan ve en hızlı imleç türüdür. Buna salt ileri imleç denir çünkü sonuç kümesinde yalnızca ileriye doğru hareket eder . Bu imleç kaydırmayı desteklemiyor. Sonuç kümesinin yalnızca başından sonuna kadar olan satırları alabilir. Ekleme, güncelleme ve silme işlemlerini yapmamızı sağlar. Burada kullanıcı tarafından yapılan ekleme, güncelleme ve silme işlemlerinin sonuç kümesindeki satırlara etkisi, satırlar imleçten getirildiğinden görünür. Satır getirildiğinde imleç aracılığıyla satırlarda yapılan değişiklikleri göremiyoruz.

Yalnızca İleri imleçleri üç türe ayrılır:

java rastgele sayı üretir
  1. Forward_Only Tuş Takımı
  2. İleri_Yalnızca Statik
  3. İleri sar
SQL Server'daki imleç

Tuş Takımıyla Çalıştırılan İmleçler

Bu imleç işlevi statik ve dinamik bir imleç arasında yer alır değişiklikleri tespit etme yeteneği ile ilgilidir. Sonuç kümesinin üyeliğindeki ve düzenindeki değişiklikleri statik bir imleç gibi her zaman algılayamaz. Sonuç kümesinin satır değerlerindeki değişiklikleri dinamik bir imleç gibi algılayabilir. Sadece yapabilir ilk satırdan sonuncuya ve sondan ilk satıra git . Bu imleç her açıldığında sıra ve üyelik sabitlenir.

Anahtar setindeki tuşlarla aynı olan bir dizi benzersiz tanımlayıcı tarafından çalıştırılır. Anahtar seti, imleç ilk açıldığında SELECT ifadesini nitelendiren tüm satırlar tarafından belirlenir. Ayrıca güncelleme ve silme işlemlerini destekleyen veri kaynağındaki değişiklikleri de algılayabiliyor. Varsayılan olarak kaydırılabilir.

Örneğin Uygulanması

İmleç örneğini SQL sunucusunda uygulayalım. Bunu önce ' isimli bir tablo oluşturarak yapabiliriz. müşteri ' aşağıdaki ifadeyi kullanarak:

 CREATE TABLE customer ( id int PRIMARY KEY, c_name nvarchar(45) NOT NULL, email nvarchar(45) NOT NULL, city nvarchar(25) NOT NULL ); 

Daha sonra değerleri tabloya ekleyeceğiz. Bir tabloya veri eklemek için aşağıdaki ifadeyi çalıştırabiliriz:

 INSERT INTO customer (id, c_name, email, city) VALUES (1,'Steffen', '[email protected]', 'Texas'), (2, 'Joseph', '[email protected]', 'Alaska'), (3, 'Peter', '[email protected]', 'California'), (4,'Donald', '[email protected]', 'New York'), (5, 'Kevin', '[email protected]', 'Florida'), (6, 'Marielia', '[email protected]', 'Arizona'), (7,'Antonio', '[email protected]', 'New York'), (8, 'Diego', '[email protected]', 'California'); 

Verileri çalıştırarak doğrulayabiliriz. SEÇME ifade:

 SELECT * FROM customer; 

Sorguyu çalıştırdıktan sonra aşağıdaki çıktıyı görebiliriz. sekiz satır masaya:

SQL Server'daki imleç

Şimdi müşteri kayıtlarını görüntülemek için bir imleç oluşturacağız. Aşağıdaki kod parçacıkları, her şeyi bir araya getirerek imleç bildiriminin veya oluşturulmasının tüm adımlarını açıklar:

wumpus dünyası
 --Declare the variables for holding data. DECLARE @id INT, @c_name NVARCHAR(50), @city NVARCHAR(50) --Declare and set counter. DECLARE @Counter INT SET @Counter = 1 --Declare a cursor DECLARE PrintCustomers CURSOR FOR SELECT id, c_name, city FROM customer --Open cursor OPEN PrintCustomers --Fetch the record into the variables. FETCH NEXT FROM PrintCustomers INTO @id, @c_name, @city --LOOP UNTIL RECORDS ARE AVAILABLE. WHILE @@FETCH_STATUS = 0 BEGIN IF @Counter = 1 BEGIN PRINT 'id' + CHAR(9) + 'c_name' + CHAR(9) + CHAR(9) + 'city' PRINT '--------------------------' END --Print the current record PRINT CAST(@id AS NVARCHAR(10)) + CHAR(9) + @c_name + CHAR(9) + CHAR(9) + @city --Increment the counter variable SET @Counter = @Counter + 1 --Fetch the next record into the variables. FETCH NEXT FROM PrintCustomers INTO @id, @c_name, @city END --Close the cursor CLOSE PrintCustomers --Deallocate the cursor DEALLOCATE PrintCustomers 

Bir imleci çalıştırdıktan sonra aşağıdaki çıktıyı alacağız:

SQL Server'daki imleç

SQL Server İmlecinin Sınırlamaları

İmlecin bazı sınırlamaları vardır, dolayısıyla her zaman yalnızca imleçten başka seçenek olmadığında kullanılmalıdır. Bu sınırlamalar şunlardır:

  • İmleç, her kayıt getirdiğinde ağ gidiş dönüşünü gerektirerek ağ kaynaklarını tüketir.
  • İmleç, bellekte yerleşik bir işaretçi kümesidir; bu, makinemizde diğer işlemlerin kullanabileceği bir miktar bellek gerektirdiği anlamına gelir.
  • Verileri işlerken tablonun bir kısmına veya tamamına kilitler uygular.
  • İmlecin performansı ve hızı daha yavaştır çünkü tablo kayıtlarını satır satır güncellerler.
  • İmleçler while döngülerinden daha hızlıdır ancak daha fazla yüke sahiptirler.
  • İmlece getirilen satır ve sütun sayısı, imleç hızını etkileyen başka bir husustur. İmlecinizi açmanın ve fetch ifadesini yürütmenin ne kadar zaman alacağını ifade eder.

İmleçlerden nasıl kaçınabiliriz?

İmleçlerin asıl görevi tabloyu satır satır dolaşmaktır. İmleçlerden kaçınmanın en kolay yolu aşağıda verilmiştir:

SQL while döngüsünü kullanma

İmleç kullanımından kaçınmanın en kolay yolu, sonuç kümesinin geçici tabloya eklenmesine izin veren bir while döngüsü kullanmaktır.

Kullanıcı tanımlı işlevler

Bazen sonuçta ortaya çıkan satır kümesini hesaplamak için imleçler kullanılır. Bunu, gereksinimleri karşılayan kullanıcı tanımlı bir fonksiyon kullanarak başarabiliriz.

Birleştirmeleri Kullanma

Birleştirme yalnızca belirtilen koşulu karşılayan sütunları işler ve böylece büyük kayıtların işlenmesi gerektiğinde imleçlerden daha hızlı performans sağlayan kod satırlarını azaltır.