返回首页

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

更新日期:2024年09月11日

功能
这个参数用于设置GBase 服务的根目录。
GBase 服务(即节点的gcware 服务)的
正确运行,依赖于该参数的正确设置。这个参数的默认值为:
$GBASE_BASE/server
该参数的值在安装时已经被正确设置,用户不需要对其进行修改,即可正常启动
节点的gcware 服务。

这些主题定义了术语并且对执行管理磁盘空间中描述的任务所必须理解的概念进行了说
明。这些主题涵盖以下领域:

有关数据库服务器用来存储磁盘上数据的物理和逻辑单元的定义

有关如何计算存储数据所需的磁盘空间量的指示信息

有关如何安排磁盘空间以及哪里放置数据库和表的准则

有关使用外部表的指示信息
请参阅最新的 GBase 8s 发行说明以获取有关与这些主题中说明的与存储单元相关的最大
值的补充信息。

功能描述
通过MERGE INTO 语句,将目标表和源表中数据针对关联条件进行匹配,若关联条件
匹配时对目标表进行UPDATE,
无法匹配时对目标表执行INSERT。
此语法可以很方便地用
来合并执行UPDATE 和INSERT,避免多次执行。
注意事项
进行MERGE INTO 操作的用户需要同时拥有目标表的UPDATE 和INSERT 权限,以
及源表的SELECT 权限。
语法格式
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 ] }

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1193
];
NOTICE: 'subquery' in the UPDATE and INSERT clauses are only avaliable in
CENTRALIZED mode!
参数说明

plan_hint 子句
以/*+ */的形式在MERGE 关键字后,
用于对MERGE 对应的语句块生成的计划进行hint
调优,详细用法请参见章节使用Plan Hint 进行调优。每条语句中只有第一个/*+ plan_hint */
注释块会作为hint 生效,里面可以写多条hint。

INTO 子句
指定正在更新或插入的目标表。

talbe_name
目标表的表名。

alias
目标表的别名。
取值范围:字符串,符合标识符命名规范。

partition_clause
指定分区MERGE 操作:
PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } |
SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) }
关键字详见SELECT 一节介绍。
如果value 子句的值和指定分区不一致,会抛出异常。
示例详见CREATE TABLE SUBPARTITION。

alias

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1194
目标表的别名。
取值范围:字符串,符合标识符命名规范。

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 等

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1195
数值类型可以隐式转换为bool 值(非0 值隐式转换为true,0 转换为false),可能导致非预
期的结果。
示例
-- 创建目标表products 和源表newproducts,并插入数据
CREATE TABLE products
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs');
INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs');
INSERT INTO products VALUES (1600, 'play gym', 'toys');
INSERT INTO products VALUES (1601, 'lamaze', 'toys');
INSERT INTO products VALUES (1666, 'harry potter', 'dvd');
CREATE TABLE newproducts
(
product_id INTEGER,
product_name VARCHAR2(60),
category VARCHAR2(60)
);
INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs');
INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys');
INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys');
INSERT INTO newproducts VALUES (1700, 'wait interface', 'books');
-- 进行MERGE INTO 操作
MERGE INTO products p

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1196
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
-- 查询更新后的结果
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)
-- 删除表
DROP TABLE products;
DROP TABLE newproducts;