FETCH(7) bir gösterici kullanarak bir sorgudan satırları çeker

KULLANIM

FETCH [ yön { FROM | IN } ] gösterici_ismi
burada yön ya boş ya da şunlardan biri olabilir:
  NEXT
  PRIOR
  FIRST
  LAST
  ABSOLUTE miktar
  RELATIVE miktar
  miktar
  ALL
  FORWARD
  FORWARD miktar
  FORWARD ALL
  BACKWARD
  BACKWARD miktar
  BACKWARD ALL

AÇIKLAMA

FETCH evvelce oluşturulmuş bir göstericiyi kullanarak satırları çeker.

Bir gösterici FETCH tarafından da kullanılan ortak bir konuma sahiptir. Göstericinin konumu sorgu sonucunun ilk satırının öncesinde, herhangi bir satırında veya son satırının sonrasında olabilir. İlk oluşturulduğunda bir gösterici ilk satırın öncesine konumlanır. Satırlar çekildikten sonra gösterici en son alınan satıra konumlanır. FETCH'in satırları çekip çalışması durduğunda gösterici son satırın sonrasına ya da eğer geriye çekilmişse ilk satırın öncesine konumlanır. FETCH ALL göstericiyi daima son satırın sonrasına, FETCH BACKWARD ALL ise daima ilk satırın öncesine konumlandırır.

NEXT (sonraki), PRIOR (önceki), FIRST (ilk), LAST (son), ABSOLUTE (mutlak), RELATIVE (göreli) biçimleri göstericiyi ilgili konuma taşıdıktan sonra tek bir satırı çeker. O konumda bir satır yoksa, sonuç boş olarak döner ve gösterici duruma göre ya ilk satırın öncesine ya da son satırın sonrasına konumlanır.

FORWARD (ileri) ve BACKWARD (geri) biçimleri, ileri ya da geri yönde belirtilen miktarda satırı çekmek için kullanılabilir. Gösterici son çekilen satıra konumlanmış olarak bırakılır (eğer miktar alınabilecek satır sayısından fazla ise, gösterici duruma göre son satırın sonrasına ya da ilk satırın öncesine konumlanır).

RELATIVE 0, FORWARD 0, ve BACKWARD 0 biçimlerinin hepsi gösterici hareket ettirilmeden o anki satırın çekilmesini sağlar, yani son çekilen satır yeniden çekilir. Bu, ancak, gösterici ilk satırın öncesinde ya da son satırın sonrasında değilse bir satırın çekilmesini sağlar; aksi takdirde, bir satır döndürülmez.

PARAMETRELER


yön
Çekim yönünü ve çekilecek satır sayısını tanımlar. Aşağıdakilerden biri olabilir:


NEXT
Sonraki satırı çeker. yön belirtilmezse bu öntanımlıdır.

PRIOR
Önceki satırı çeker.

FIRST
Sorgunun ilk satırını çeker (ABSOLUTE 1 ile aynıdır).

LAST
Sorgunun son satırını çeker (ABSOLUTE -1 ile aynıdır).

ABSOLUTE miktar
miktar pozitifse, sorgunun miktar'ıncı satırını; negatifse, sondan abs(miktar)'ıncı satırını çeker. miktar gereğinden büyükse, gösterici duruma göre ya ilk satırın öncesine ya da son satırın sonrasına konumlanır; özellikle, ABSOLUTE 0 göstericinin ilk satırın öncesine konumlanmasını sağlar.

RELATIVE miktar
Göstericinin konumuna göre, miktar pozitifse, sonraki miktar'ıncı satırı; negatifse, önceki abs(miktar)'ıncı satırı çeker. RELATIVE 0 o anki satırı varsa yeniden çeker.

miktar
Sonraki miktar satırı çeker (FORWARD miktar ile aynıdır).

ALL
Kalan satırların hepsini çeker (FORWARD ALL ile aynıdır).

FORWARD
Sonraki satırı çeker (NEXT ile aynıdır).

FORWARD miktar
Sonraki miktar satırı çeker. FORWARD 0 o anki satırı yeniden çeker.

FORWARD ALL
Kalan satırların hepsini çeker.

BACKWARD
Önceki satırı çeker (PRIOR ile aynı).

BACKWARD miktar
Önceki miktar satırı çeker. BACKWARD 0 o anki satırı yeniden çeker.

BACKWARD ALL
Önceki tüm satırları çeker (geriye doğru tarama).

miktar
Konumu ya da çekilecek satır sayısını belirtmek üzere kullanılan bir işaretli tamsayıdır. FORWARD ve BACKWARD için belirtilen bir negatif miktar yönün değişmesine sebep olur.

gösterici_ismi
Açık bir göstericinin ismi.

ÇIKTILAR

FETCH başarılı olduğunda şöyle bir çıktı döndürür:

FETCH miktar

Burada, miktar çekilen satırların sayısıdır (sıfır olabilir). Yalnız, psql'de komutun ismi çıktıda gösterilmez, sadece çekilen satır sayısı gösterilir.

EK BİLGİ

FETCH cümlesinin, pozitif bir miktar ile FETCH NEXT veya FETCH FORWARD biçimleri dışında bir biçimle kullanılması düşünülüyorsa, gösterici SCROLL seçeneği ile bildirilmelidir. Basit sorgular için PostgreSQL, SCROLL ile bildirilmemiş göstericilerden geriye doğru satır çekilmesine izin verir, fakat bu davranışın en iyisi olduğuna güvenmeyin. Eğer gösterici NO SCROLL ile bildirilmişse geri yönde satır çekmeye izin verilmez.

ABSOLUTE ile satır çekimleri istenen satırı bir göreli hareketle çekmekten daha hızlı değildir: temel gerçeklenim aradaki satırların tümünü bir şekilde geçmelidir. Negatif mutlak çekimlerin durumu daha bile kötüdür: Sorgunun, son satırı bulana kadar tüm satırları okuması ve buradan, çekilecek satıra kadar olan satırları tekrar geçmesi gerekir. Yine de, sorgunun başa dönmesi hızlı olur (FETCH ABSOLUTE 0 ile olduğu gibi).

Gösterici üzerinden güncelleme PostgreSQL tarafından şimdilik desteklenmemektedir.

Bir götericiyi tanımlamak için DECLARE [declare(7)] kullanılır. Veri döndürmeksizin göstericiyi hareket ettirmek için MOVE [move(7)] kullanabilirsiniz.

ÖRNEKLER

Aşağıdaki örnekte bir tablo gösterici kullanılarak incelenmektedir:

BEGIN WORK;
-- Göstericiyi bildirelim:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;
-- liahona göstericisinden ilk 5 satırı çekelim:
FETCH FORWARD 5 FROM liahona;
 code  |          title          | did | date_prod  |   kind   |  len
-------+-------------------------+-----+------------+----------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantic | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action   | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28
-- Önceki satırı çekelim:
FETCH PRIOR FROM liahona;
 code  |  title  | did | date_prod  |  kind  |  len
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08
-- Göstericiyi kapatıp hareketi sonlandıralım:
CLOSE liahona;
COMMIT WORK;

UYUMLULUK

SQL standardındaki FETCH deyimini sadece gömülü SQL'de kullanmak içindir. Burada açıklanan FETCH ise, veriyi bir konak değişkenine yerleştirilmiş olarak değil, bir SELECT sonucu gibi döndürür. Bunun dışında FETCH, SQL standardı ile tamamen uyumludur.

FORWARD ve BACKWARD biçimleriyle FORWARD örtük olma üzere FETCH miktar ve FETCH ALL biçimleri birer PostgreSQL oluşumudur.

SQL standardı FROM deyimine sadece ismin önünde izin verir; IN kullanımı bir PostgreSQL oluşumudur.

ÇEVİREN

Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005