返回首页

gbase数据、南大通用产品文档:GBase8agbase_force_bin_like

更新日期:2024年09月11日

取值:[0|1]
默认值:0
说明:强制使用二进制方式比较,主要为了防止中文中有乱码(比如半个汉字)的
时候默认会把乱码之后的内容终止比较。默认关闭。
修改方式:可使用set 语句修改值也可在配置文件中修改值。仅用于global 范围。

相关命令
gs_preinstall,gs_install

功能描述
FETCH 通过已创建的游标来检索数据。
每个游标都有一个供FETCH 使用的关联位置。游标的关联位置可以在查询结果的第一
行之前,或者在结果中的任意行,或者在结果的最后一行之后:
游标刚创建完之后,关联位置在第一行之前的。
在抓取了一些移动行之后,关联位置在检索到的最后一行上。
如果FETCH 抓取完了所有可用行,它就停在最后一行后面,或者在反向抓取的情况下
是停在第一行前面。
FETCH ALL 或FETCH BACKWARD ALL 将总是把游标的关联位置放在最后一行或者
在第一行前面。
注意事项
如果游标定义了NO SCROLL,则不允许使用例如FETCH BACKWARD 之类的反向抓
取。
NEXT、PRIOR、FIRST、LAST、ABSOLUTE、RELATIVE 形式在恰当地移动游标之
后抓取一条记录。如果后面没有数据行,
就返回一个空的结果,
此时游标就会停在查询结果
的最后一行之后(向后查询时)或者第一行之前(向前查询时)。
FORWARD 和BACKWARD 形式在向前或者向后移动的过程中抓取指定的行数,然后
把游标定位在最后返回的行上;或者是,如果count 大于可用的行数,则在所有行之后(向
后查询时)或者之前(向前查询时)。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1155
RELATIVE 0、FORWARD 0、BACKWARD 0 都要求在不移动游标的前提下抓取当前
行,也就是重新抓取最近刚抓取过的行。
除非游标定位在第一行之前或者最后一行之后,这
个动作都应该成功,而在那两种情况下,不返回任何行。
当FETCH 的游标上涉及列存表时,
不支持BACKWARD、
PRIOR 等涉及反向获取操作。
语法格式
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
参数说明

direction_clause
定义抓取数据的方向。
取值范围:

NEXT(缺省值)
从当前关联位置开始,抓取下一行。

PRIOR
从当前关联位置开始,抓取上一行。

FIRST

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1156
抓取查询的第一行(和ABSOLUTE 1 相同)。

LAST
抓取查询的最后一行(和ABSOLUTE -1 相同)。

ABSOLUTE count
抓取查询中第count 行。
ABSOLUTE 抓取不会比用相对位移移动到需要的数据行更快,因为下层的实现必须遍
历所有中间的行。
count 取值范围:有符号的整数
count 为正数,就从查询结果的第一行开始,抓取第count 行。
count 为负数,就从查询结果末尾抓取第abs(count)行。
count 为0 时,定位在第一行之前。

RELATIVE count
从当前关联位置开始,抓取随后或前面的第count 行。
取值范围:有符号的整数
count 为正数就抓取当前关联位置之后的第count 行。
count 为负数就抓取当前关联位置之前的第abs(count)行。
如果当前行没有数据的话,RELATIVE 0 返回空。

count
抓取随后的count 行(和FORWARD count 一样)。

ALL
从当前关联位置开始,抓取所有剩余的行(和FORWARD ALL 一样)。

FORWARD

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1157
抓取下一行(和NEXT 一样)。

FORWARD count
从当前关联位置开始,抓取随后或前面的count 行。

FORWARD ALL
从当前关联位置开始,抓取所有剩余行。

BACKWARD
从当前关联位置开始,抓取前面一行(和PRIOR 一样) 。

BACKWARD count
从当前关联位置开始,抓取前面的count 行(向后扫描)。
取值范围:有符号的整数
count 为正数就抓取当前关联位置之前的count 行。
count 为负数就抓取当前关联位置之后的abs(count)行。
如果有数据的话,BACKWARD 0 重新抓取当前行。

BACKWARD ALL
从当前关联位置开始,抓取所有前面的行(向后扫描)。

{ FROM | IN } cursor_name
使用关键字FROM 或IN 指定游标名称。
取值范围:已创建的游标的名称。
示例
--SELECT 语句,用一个游标读取一个表。开始一个事务。
gbase=#START TRANSACTION;
--建立一个名为cursor1 的游标。
gbase=#CURSOR cursor1 FOR SELECT * FROM tpcds.customer_address ORDER BY 1;
--抓取头3 行到游标cursor1 里。
gbase=#FETCH FORWARD 3 FROM cursor1;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1158
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)
--关闭游标并提交事务。
gbase=#CLOSE cursor1;
--结束一个事务。
gbase=#END;
--VALUES 子句,用一个游标读取VALUES 子句中的内容。开始一个事务。
gbase=#START TRANSACTION;
--建立一个名为cursor2 的游标。
gbase=#CURSOR cursor2 FOR VALUES(1,2),(0,3) ORDER BY 1;
--抓取头2 行到游标cursor2 里。
gbase=#FETCH FORWARD 2 FROM cursor2;
column1 | column2
---------+---------
0 |
3
1 |
2
(2 rows)
--关闭游标并提交事务。
gbase=#CLOSE cursor2;
--结束一个事务。
gbase=#END;
--WITH HOLD 游标的使用,开启事务。
gbase=#START TRANSACTION;
--创建一个with hold 游标。
gbase=#DECLARE cursor1 CURSOR WITH HOLD FOR SELECT * FROM tpcds.customer_address
ORDER BY 1;
--抓取头2 行到游标cursor1 里。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1159
gbase=#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)
--结束事务。
gbase=#END;
--抓取下一行到游标cursor1 里。
gbase=#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)
--关闭游标。
gbase=#CLOSE cursor1;
使用动态游标/自动游标。
CREATE FUNCTION reffunc2() RETURNS refcursor AS '
DECLARE
ref refcursor;
BEGIN
OPEN ref FOR SELECT col FROM test;
RETURN ref;
END;
' LANGUAGE plpgsql;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1160
-- 需要在一个事务中使用游标。
BEGIN;
SELECT reffunc2();
reffunc2
--------------------

(1 row)
FETCH ALL IN "";
COMMIT;
相关命令
CLOSE,MOVE