日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹了FETCH的語法、參數(shù)以及示例等內(nèi)容。

簡介

FETCH從之前創(chuàng)建的一個(gè)游標(biāo)中檢索行。

游標(biāo)具有一個(gè)相關(guān)聯(lián)的位置,FETCH會(huì)用到該位置。 游標(biāo)位置可能會(huì)位于查詢結(jié)果的第一行之前、結(jié)果中任一行之上或者結(jié)果的最后一行之后。在被創(chuàng)建時(shí),游標(biāo)被定位在第一行之前。在取出一些行后,該游標(biāo)被定位在最近被取出的行上。如果 FETCH運(yùn)行超過了可用行的末尾,則該游標(biāo)會(huì)被定位在最后一行之后(如果向后取,則是第一行之前)。 FETCH ALL或者FETCH BACKWARD ALL將總是讓游標(biāo)被定位于最后一行之后或者第一行之前。

NEXTPRIORFIRSTLASTABSOLUTERELATIVE 形式會(huì)在適當(dāng)移動(dòng)游標(biāo)后取出一行。如果沒有這樣一行,將返回一個(gè)空結(jié)果,并且視情況將游標(biāo)定位在第一行之前或者最后一行之后。

使用FORWARDBACKWARD的形式會(huì)在向前移動(dòng)或者向后移動(dòng)的方向上檢索指定數(shù)量的行,然后將游標(biāo)定位在最后返回的行上(如果 count超過可用的行數(shù),則定位在所有行之后或者之前)。

RELATIVE 0FORWARD 0以及 BACKWARD 0都會(huì)請(qǐng)求檢索當(dāng)前行但不移動(dòng)游標(biāo),也就是重新取最近被取出的行。 只要游標(biāo)沒有被定位在第一行之前或者最后一行之后,這種操作都會(huì)成功,否則不會(huì)返回任何行。

語法

    FETCH [ direction [ FROM | IN ] ] cursor_name

    其中 direction 可以為空或者以下之一:

        NEXT
        PRIOR
        FIRST
        LAST
        ABSOLUTE count
        RELATIVE count
        count
        ALL
        FORWARD
        FORWARD count
        FORWARD ALL
        BACKWARD
        BACKWARD count
        BACKWARD ALL
說明

這個(gè)頁面描述在 SQL 命令層面上對(duì)游標(biāo)的使用。如果想要在 PL/SQL函數(shù)中使用游標(biāo),規(guī)則會(huì)有所不同。

參數(shù)

  • directiondirection 定義獲取方向以及要取得的行數(shù)。它可以是下列之一:

  • NEXT取出下一行。如果省略 direction,這將是默認(rèn)值。

  • PRIOR取出當(dāng)前位置之前的一行。

  • FIRST取出該查詢的第一行(和ABSOLUTE 1相同)。

  • LAST取出該查詢的最后一行(和ABSOLUTE -1相同)。

  • ABSOLUTE count取出該查詢的第 count個(gè)行,如果 count為負(fù)則是從尾部開始取出第abs( count )個(gè)行。如果 count超出范圍,將定位在第一行之前或者最后一行之后。特別地,ABSOLUTE 0 會(huì)定位在第一行之前。

  • RELATIVE count取出第 count個(gè)后繼行,如果 count為負(fù)則是取出前面的第abs( count )個(gè)行。 RELATIVE 0重新取出當(dāng)前行(如果有)。

  • count取出接下來的 count行(和 FORWARD count相同)。

  • ALL取出所有剩余的行(和FORWARD ALL相同)。

  • FORWARD取出下一行(和NEXT相同)。

  • FORWARD count取出接下來的 count行。 FORWARD 0重新取出當(dāng)前行。

  • FORWARD ALL取出所有剩下的行。

  • BACKWARD取出當(dāng)前行前面的一行(和PRIOR相同)。

  • BACKWARD count取出前面的 count行(反向掃描)。 BACKWARD 0會(huì)重新取出當(dāng)前行。

  • BACKWARD ALL取出所有當(dāng)前位置之前的行(反向掃描)。

  • countcount 是一個(gè)可能帶有符號(hào)的整數(shù)常量,它決定要取得的位置或者行數(shù)。對(duì)于 FORWARDBACKWARD情況,指定一個(gè)負(fù)的 count等效于改變 FORWARDhe BACKWARD的意義。

  • cursor_name一個(gè)已打開游標(biāo)的名稱。

輸出

如果成功完成,FETCH命令返回一個(gè)下面形式的命令標(biāo)簽:

    FETCH count

count是取得的行數(shù)(可能為零)。注意在psql中,命令標(biāo)簽將不會(huì)實(shí)際顯示, 因?yàn)閜sql會(huì)顯示被取得的行。

說明

如果想要使用FETCH的任意變體而不使用帶有正計(jì)數(shù)的 FETCH NEXT或者FETCH FORWARD, 應(yīng)該用SCROLL聲明游標(biāo)。對(duì)于簡單查詢, PolarDB將允許從不帶 SCROLL的游標(biāo)中反向取得行,但最好不要依賴這種行為。 如果游標(biāo)被聲明為帶有SCROLL,則不允許反向取得。

ABSOLUTE取行并不比用相對(duì)移動(dòng)快多少:不管怎樣, 底層實(shí)現(xiàn)都必須遍歷所有的中間行。用負(fù)絕對(duì)值獲取的情況更糟:必須讀到查詢尾部來找到最后一行,并且接著從那里反向開始遍歷。不過,回卷到查詢的開始(正如FETCH ABSOLUTE 0)是很快的。

DECLARE被用來定義游標(biāo)。使用 MOVE可改變游標(biāo)位置而不檢索數(shù)據(jù)。

示例

下面的例子用一個(gè)游標(biāo)遍歷一個(gè)表:

    BEGIN WORK;

    -- 建立一個(gè)游標(biāo):
    DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films;

    -- 在游標(biāo) liahona 中取出前 5 行:
    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

    -- 取出前面一行:
    FETCH PRIOR FROM liahona;

     code  |  title  | did | date_prod  |  kind  |  len
    -------+---------+-----+------------+--------+-------
     P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08

    -- 關(guān)閉游標(biāo)并且結(jié)束事務(wù):
    CLOSE liahona;
    COMMIT WORK;