首页 > 数据库 > > SQL语法-FETCH
FETCH通过已创建的游标来检索数据。
每个游标都有一个供FETCH使用的关联位置。游标的关联位置可以在查询结果的第一行之前,或者在结果中的任意行,或者在结果的最后一行之后:
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
定义抓取数据的方向。
取值范围:
从当前关联位置开始,抓取下一行。
从当前关联位置开始,抓取上一行。
抓取查询的第一行(和ABSOLUTE 1相同)。
抓取查询的最后一行(和ABSOLUTE -1相同)。
抓取查询中第count行。
ABSOLUTE抓取不会比用相对位移移动到需要的数据行更快,因为下层的实现必须遍历所有中间的行。
count取值范围:有符号的整数
从当前关联位置开始,抓取随后或前面的第count行。
取值范围:有符号的整数
抓取随后的count行(和FORWARD count一样)。
从当前关联位置开始,抓取所有剩余的行(和FORWARD ALL一样)。
抓取下一行(和NEXT一样)。
与RELATIVE count的效果相同,从当前关联位置开始,抓取随后或前面的第count行。
从当前关联位置开始,抓取所有剩余行。
从当前关联位置开始,抓取前面一行(和PRIOR一样) 。
从当前关联位置开始,抓取前面的count行(向后扫描)。
取值范围:有符号的整数
从当前关联位置开始,抓取所有前面的行(向后扫描) 。
使用关键字FROM或IN指定游标名称。
取值范围:已创建的游标的名称。
--SELECT语句,用一个游标读取一个表。开始一个事务。
START TRANSACTION;
--建立一个名为cursor1的游标。
CURSOR cursor1 FOR SELECT * FROM tpcds.customer_address ORDER BY 1;
--抓取头3行到游标cursor1里。
FETCH FORWARD 3 FROM cursor1;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_location_type
---------------+------------------+------------------+--------------------+-----------------+-----------------+-----------------+-----------------+----------+------------+---------------+---------------+----------------------
1 | AAAAAAAABAAAAAAA | 18 | Jackson | Parkway | Suite 280 | Fairfield | Maricopa County | AZ | 86192 | United States | -7.00 | condo
2 | AAAAAAAACAAAAAAA | 362 | Washington 6th | RD | Suite 80 | Fairview | Taos County | NM | 85709 | United States | -7.00 | condo
3 | AAAAAAAADAAAAAAA | 585 | Dogwood Washington | Circle | Suite Q | Pleasant Valley | York County | PA | 12477 | United States | -5.00 | single family
(3 rows)
--关闭游标并提交事务。
CLOSE cursor1;
--结束一个事务。
END;
--VALUES子句,用一个游标读取VALUES子句中的内容。开始一个事务。
START TRANSACTION;
--建立一个名为cursor2的游标。
CURSOR cursor2 FOR VALUES(1,2),(,3) ORDER BY 1;
--抓取头2行到游标cursor2里。
FETCH FORWARD 2 FROM cursor2;
column1 | column2
---------+---------
0 | 3
1 | 2
(2 rows)
--关闭游标并提交事务。
CLOSE cursor2;
--结束一个事务。
END;
--WITH HOLD游标的使用,开启事务。
START TRANSACTION;
--创建一个with hold游标。
DECLARE cursor1 CURSOR WITH HOLD FOR SELECT * FROM tpcds.customer_address ORDER BY 1;
--抓取头2行到游标cursor1里。
FETCH FORWARD 2 FROM cursor1;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_location_type
---------------+------------------+------------------+--------------------+-----------------+-----------------+-----------------+-----------------+----------+------------+---------------+---------------+----------------------
1 | AAAAAAAABAAAAAAA | 18 | Jackson | Parkway | Suite 280 | Fairfield | Maricopa County | AZ | 86192 | United States | -7.00 | condo
2 | AAAAAAAACAAAAAAA | 362 | Washington 6th | RD | Suite 80 | Fairview | Taos County | NM | 85709 | United States | -7.00 | condo
(2 rows)
--结束事务。
END;
--抓取下一行到游标cursor1里。
FETCH FORWARD 1 FROM cursor1;
ca_address_sk | ca_address_id | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_location_type
---------------+------------------+------------------+--------------------+-----------------+-----------------+-----------------+-----------------+----------+------------+---------------+---------------+----------------------
3 | AAAAAAAADAAAAAAA | 585 | Dogwood Washington | Circle | Suite Q | Pleasant Valley | York County | PA | 12477 | United States | -5.00 | single family
(1 row)
--关闭游标。
CLOSE cursor1;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3164145/ ,如需转载,请注明出处,否则将追究法律责任。