

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# FETCH
<a name="fetch"></a>

使用游标检索行。有关声明游标的信息，请参阅[DECLARE](declare.md)。

FETCH 根据游标中的当前位置检索行。在创建游标时，系统会将它放在第一行的前面。在执行 FETCH 后，系统会将游标放在检索的最后一行上。如果 FETCH 在运行时超出了可用行的结尾，例如跟在 FETCH ALL 后面，则游标会保留在最后一行的后面。

FORWARD 0 会提取当前行而不移动游标；即提取最近提取过的行。如果游标放在第一行的前面或最后一行的后面，则不返回任何行。

在提取游标的第一行时，会在领导节点上、内存中或磁盘上具体化整个结果集（如果需要）。由于将游标用于大型结果集可能会降低性能，因此建议使用备用方法（如果可能）。有关更多信息，请参阅 [使用游标时的性能注意事项](declare.md#declare-performance)。

有关更多信息，请参阅[DECLARE](declare.md)、[CLOSE](close.md)。

## 语法
<a name="fetch-synopsis"></a>

```
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
```

## 参数
<a name="fetch-parameters"></a>

NEXT  
提取下一行。这是默认模式。

ALL  
提取所有剩余的行。（与 FORWARD ALL 相同。） 对于单节点集群，不支持 ALL。

FORWARD [ *count* \$1 ALL ]   
提取后面 *count* 行，或者提取所有剩余的行。`FORWARD 0` 提取当前行。对于单节点集群，count 的最大值为 `1000`。对于单节点集群，不支持 FORWARD ALL。

*cursor*   
新游标的名称。

## FETCH 示例
<a name="fetch-example"></a>

以下示例声明一个名为 LOLLAPALOOZA 的游标，以便为 Lollapalooza 事件选择销售信息，然后使用该游标从结果集中提取行：

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```