FETCH(7)

İSİM
FETCH - 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.

İLGİLİ BELGELER
CLOSE [close(7)], DECLARE [declare(7)], MOVE [move(7)].

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