-
语法格式 MOVE [ 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
-
示例 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 --建表并插入数据。
gaussdb=# CREATE TABLE tbl_test(c1 int);
gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,20));
--建立一个名为cursor1的游标。
gaussdb=# BEGIN;
gaussdb=# CURSOR cursor1 FOR SELECT * FROM tbl_test ORDER BY 1;
--使用MOVE命令使游标向后移动5行,不返回结果。
gaussdb=# MOVE FORWARD 5 FROM cursor1;
MOVE 5
--使用FETCH命令检索两行数据。
gaussdb=# FETCH FORWARD 2 FROM cursor1;
c1
----
6
7
(2 rows)
--关闭游标并结束事务。
gaussdb=# CLOSE cursor1;
gaussdb=# END;
--删除。
gaussdb=# DROP TABLE tbl_test;
-
示例 -- 创建目标表products和源表newproducts,并插入数据
gaussdb=# CREATE TABLE products
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
gaussdb=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs');
gaussdb=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs');
gaussdb=# INSERT INTO products VALUES (1600, 'play gym', 'toys');
gaussdb=# INSERT INTO products VALUES (1601, 'lamaze', 'toys');
gaussdb=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd');
gaussdb=# CREATE TABLE newproducts
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
gaussdb=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs');
gaussdb=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys');
gaussdb=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys');
gaussdb=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books');
-- 进行MERGE INTO操作
gaussdb=# MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym'
WHEN NOT MATCHED THEN
INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books';
MERGE 4
-- 查询更新后的结果
gaussdb=# SELECT * FROM products ORDER BY product_id;
product_id | product_name | category
------------+----------------+-----------
1501 | vivitar 35mm | electrncs
1502 | olympus camera | electrncs
1600 | play gym | toys
1601 | lamaze | toys
1666 | harry potter | toys
1700 | wait interface | books
(6 rows)
-- 删除表
gaussdb=# DROP TABLE products;
gaussdb=# DROP TABLE newproducts;
-
参数说明 plan_hint子句 以/*+ */的形式在MERGE关键字后,用于对MERGE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 partition_clause 指定分区MERGE操作。 关键字详见SELECT一节介绍。 如果value子句的值和指定分区不一致,会抛出异常。 示例详见CREATE TABLE SUBPARTITION。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。
-
语法格式 MERGE [/*+ plan_hint */] INTO table_name [ partition_clause ] [ [ AS ] alias ]
USING { { table_name | view_name } | subquery } [ [ AS ] alias ]
ON ( condition )
[
WHEN MATCHED THEN
UPDATE SET { column_name = { expression | subquery | DEFAULT } |
( column_name [, ...] ) = ( { expression | subquery | DEFAULT } [, ...] ) } [, ...]
[ WHERE condition ]
]
[
WHEN NOT MATCHED THEN
INSERT { DEFAULT VALUES |
[ ( column_name [, ...] ) ] VALUES ( { expression | subquery | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] }
];
-
语法格式 1
2
3
4
5
6
7
8
9
10
11
12
13
14 MERGE [/*+ plan_hint */] INTO table_name [ [ AS ] alias ]
USING { { table_name | view_name } | subquery } [ [ AS ] alias ]
ON ( condition )
[
WHEN MATCHED THEN
UPDATE SET { column_name = { expression | DEFAULT } |
( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...]
[ WHERE condition ]
]
[
WHEN NOT MATCHED THEN
INSERT { DEFAULT VALUES |
[ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] }
];
-
参数说明 plan_hint子句 以/*+ */的形式在MERGE关键字后,用于对MERGE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 INTO子句 指定正在更新或插入的目标表。目标表为复制表时,暂不支持目标表中某列默认值为volatile函数(如自增列),enable_stream_operator=off时目标表需要包含主键或带有unique not null。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。目标表为复制表时,暂不支持USING子句中包含非复制表。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。
-
示例 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 -- 创建目标表products和源表newproducts,并插入数据
gaussdb=# CREATE TABLE products
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
gaussdb=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs');
gaussdb=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs');
gaussdb=# INSERT INTO products VALUES (1600, 'play gym', 'toys');
gaussdb=# INSERT INTO products VALUES (1601, 'lamaze', 'toys');
gaussdb=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd');
gaussdb=# CREATE TABLE newproducts
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
gaussdb=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs');
gaussdb=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys');
gaussdb=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys');
gaussdb=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books');
-- 进行MERGE INTO操作
gaussdb=# MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym'
WHEN NOT MATCHED THEN
INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books';
MERGE 4
-- 查询更新后的结果
gaussdb=# SELECT * FROM products ORDER BY product_id;
product_id | product_name | category
------------+----------------+-----------
1501 | vivitar 35mm | electrncs
1502 | olympus camera | electrncs
1600 | play gym | toys
1601 | lamaze | toys
1666 | harry potter | toys
1700 | wait interface | books
(6 rows)
-- 删除表
gaussdb=# DROP TABLE products;
gaussdb=# DROP TABLE newproducts;
-
示例 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 --建表并插入数据。
gaussdb=# CREATE TABLE tbl_test(c1 int);
gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,20));
--建立一个名为cursor1的游标。
gaussdb=# BEGIN;
gaussdb=# CURSOR cursor1 FOR SELECT * FROM tbl_test ORDER BY 1;
--使用MOVE命令使游标向后移动5行,不返回结果。
gaussdb=# MOVE FORWARD 5 FROM cursor1;
MOVE 5
--使用FETCH命令检索两行数据。
gaussdb=# FETCH FORWARD 2 FROM cursor1;
c1
----
6
7
(2 rows)
--关闭游标并结束事务。
gaussdb=# CLOSE cursor1;
gaussdb=# END;
--删除。
gaussdb=# DROP TABLE tbl_test;
-
语法格式 1 MOVE [ direction [ FROM | IN ] ] cursor_name;
其中direction子句为可选参数。 1
2
3
4
5
6
7
8
9
10
11
12
13
14 NEXT
| PRIOR
| FIRST
| LAST
| ABSOLUTE count
| RELATIVE count
| count
| ALL
| FORWARD
| FORWARD count
| FORWARD ALL
| BACKWARD
| BACKWARD count
| BACKWARD ALL
-
请求示例 HTTP的示例 POST /v1/netcfg/sites/dfs-groups/13874933-09ae-cfff-9883-bcaa33422118/m-lags HTTPS 1.1 Host:192.168.1.125:18002 Content-Type: application/json Accept: application/json Accept-Language: en-US X-AC
CES S-TOKEN:CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925 { "dfsGroupName": "MLAG01", "mode": "active-active", "peerLink": [ { "deviceId": "cfff4933-39aa-cfaf-9833-bcaa13874933", "deviceName": "device1", "ifName": "Eth-Trunk1", "priority": 150, "peerDeviceId": "09ae4933-196e-cfef-9183-bcaa13874a3c", "peerDeviceName": "device2", "peerIfName": "Eth-Trunk1", "peerPriority": 100 }], "mLagMemberList": [ { "mLagId": "1", "mLagMemberlink": { "deviceId": "cfff4933-39aa-cfaf-9833-bcaa13874933", "deviceName": "device1", "ifName": "Eth-Trunk2", "peerDeviceId": "09ae4933-196e-cfef-9183-bcaa13874a3c", "peerDeviceName": "device2", "peerIfName": "Eth-Trunk2", } }] }
-
响应示例 返回状态码为204:初始化配置成功 HTTP/1.1 204 No Content
Date: Sun,11 May 2025 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
返回状态码为400:参数校验异常 HTTP/1.1 400 Bad Request
Date: Sun,11 May 2025 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
返回状态码为500:服务内部错误。 HTTP/1.1 500 Internal Server Error
Date: Sun,11 May 2025 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
-
请求参数 表2 body参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 mlagConfiguration 是 REFERENCE 详细请参见表3。 Dfs-Group、Peer-Link以及成员口相关的配置 - 表3 MlagConfigration对象的参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 dfsGroupName 否 string 0~64个字符。满足正则表达^[a-zA-Z0-9_.@-]+$。 - Dfs-Group组名称。 "dfsGroup1" mode 否 string 0~14个字符。满足正则表达active-standby|active-active。 active-active Dfs-Group组级别的工作模式,可不填,默认双活模式, 可指定主备模式。 "active-active" dualActiveDetectLink 否 REFERENCE 详细请参见表4。 配置双主检测链路。 - peerLink 否 ARRAY_REFERENCE 0-1个列表项,详细请参见表5。 为Dfs-Group指定的Peer-Link链路,仅能指定一条 - mLagMemberList 否 ARRAY_REFERENCE 0-1024个列表项,详细请参见表6。 成员列表。 - 表4 DualActiveDetectLink对象的参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 deviceId 否 string 0~36个字符。 - 设备ID,uuid格式。 "fbde1c5d-5b94-49e3-a912-48641015e45c" deviceName 否 string 0~64个字符。 - 本端设备名称。 "fw1" ifName 否 string 0~64个字符。 - 双主检测本端接口名称,物理口,非Eth-Trunk口。 "10GE 1/0/7" peerDeviceId 否 string 0~36个字符。 - 设备ID,uuid格式。 "fbde1c5d-5b94-49e3-a912-48641015e45d" peerDeviceName 否 string 0~64个字符。 - 对端设备名称。 "fw2" peerIfName 否 string 0~64个字符。 - 双主检测对端接口名称,物理口,非Eth-Trunk口。 "10GE 1/0/7" ipPoolName 否 string 0~32个字符。 - 为接口分配IP地址的资源池名称。 "CoreIpPool" 表5 MlagLinkDto对象的参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 deviceId 否 string 0~36个字符。 - 设备ID,uuid格式。 "fbde1c5d-5b94-49e3-a912-48641015e45c" deviceName 否 string 0~64个字符。 - 设备名称。 "fw1" ifName 否 string 0~64个字符。 - 设备名称。 "fw1" priority 否 int32 [1-254] 150 本端设备优先级。 100 peerDeviceId 否 string 0~36个字符。 - 设备ID,uuid格式。 "fbde1c5d-5b94-49e3-a912-48641015e45c" peerDeviceName 否 string 0~64个字符。 - 设备名称。 "fw1" peerIfName 否 string 0~64个字符。 - 设备名称。 "fw1" peerPriority 否 int32 [1-254] 100 对端设备优先级。 100 表6 MlagMembersDto对象的参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 mLagId 否 string 0~36个字符。 - M-LAG的组id。 "1" mLagMemberlink 否 REFERENCE 详细请参见表5。 M-LAG的成员链路。 -
-
URI /v1/devicemgr/devices/dfs-groups 表1 query参数列表 参数名称 必选 类型 参数值域 默认值 参数说明 参数示例 siteId 否 string 0~36个字符。 - 站点id,UUID格式,只有单站点和所有站点两种情况,为null查找所有站点 "9a79a511-94d0-4288-84ed-ab9710d2396c" keyword 否 string 0~64个字符。 - 模糊查询关键词,支持DfsGroup name的模糊查询 "dfs-group-name-1" pageIndex 否 int32 [1-10000] 1 分页查询分页索引,可选。可选择起始查询页,从1开始 10 pageSize 否 int32 [10-2500] 100 返回数据个数限制,默认值100,最大值2500 100
-
响应参数 返回状态码为200:批量查询DfsGroup结果 表2 DfsGroupsQueryResponse对象的参数列表 参数名称 类型 参数值域 默认值 参数说明 参数示例 data ARRAY_REFERENCE 详细请参见表3。 DfsGroup数据 - totalCount int32 [0-100000] 0 总数 - 返回状态码为400:参数错误 详细信息请参见实际响应消息体。 返回状态码为500:服务内部错误 详细信息请参见实际响应消息体。