返回首页

gbase数据、南大通用产品文档:GBase8aIFNULL(expr1,expr2)

更新日期:2024年09月11日

语法
IFNULL(expr1,expr2)
函数说明
如果expr1 不为NULL,则IFNULL()的返回值为expr1,否则其返回值为expr2。
IFNULL()的返回值是数字或是字符串,具体情况取决于使用它的上下文环境。等
价于IF(expre1,expre1,expre2)。
示例
示例1:expr1 不为NULL,返回值为expr1。
gbase> SELECT IFNULL(1,0) FROM dual;
+-------------+
| IFNULL(1,0) |
+-------------+
|
1 |
+-------------+
1 row in set
示例2:expr1 为NULL,返回值为expr2。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
681
gbase> SELECT IFNULL(NULL,10) FROM dual;
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
|
10 |
+-----------------+
1 row in set

下列主题提供在 Java™ 类不存在时有关创建不透明类型的附加信息。有关从现有 Java 类
创建不透明类型的详细信息,请参阅 从现有代码创建不透明类型。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 176 -

使用 UDTMetaData 类中的方法,可以为新的不透明类型指定属性。这些设置适用于新的不
透明类型;从现有文件创建不透明类型,请参阅从现有代码创建不透明类型.。
可以设置以下属性:

内部结构中定义不透明类型的字段数

其它属性,例如内部结构中定义不透明类型的每个字段的数据类型、名称和精度

不透明类型的长度

不透明类型的对齐方式

不透明类型和 JAR 文件的 SQL 名称

已生成的 Java 类的名称

是否保留生成的 .java 文件
指定字段计数
setFieldCount() 方法指定内部结构中定义不透明类型的字段计数:
public void setFieldCount(int fieldCount) throws SQLException
指定其它字段属性
以下方法设置内部数据结构中的字段的其它属性:
public void setFieldName (int field, String name) throws SQLException
public void setFieldType (int field, int ifxtype) throws SQLException
public void setFieldTypeName(int field, String sqltypename) throws SQLException
public void setFieldLength(int field, int length) throws SQLException
field 参数指示驱动程序应设置或获取属性的字段。第一个字段为 1;第二个字段为 2,依次
类推。
使用 setFieldName() 指定的名称出现在 Java™ 类文件中。以下示例将第一个字段名称设置
为 IMAGE。
mdata.setFieldName(1, "IMAGE");
setFieldType() 方法指示使用 com.gbasedbt.lang.IfxTypes 文件中的常量设置字段的数据类型。
有关更多信息,
请参阅映射字段类型。
以下示例指定第三个字段中的值为 CHAR 数据类型:

mdata.setFieldType(3, com.gbasedbt.lang.IfxTypes.IFX_TYPE_CHAR);
setFieldTypeName() 方法设置使用 SQL 数据类型名称的字段的数据类型:
mdata.setFieldTypeName(1, "IMAGE_UDT");
此方法仅对 opaque 和 distinct 类型有效;对于其它类型,驱动程序会忽略此信息。
length 参数具有以下含义,它取决于字段的数据类型:
字符类型

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 177 -

字符中的最大长度
DATETIME
编码的长度
INTERVAL
编码的长度
其它数据类型或不指定类型
驱动程序忽略此信息
编码长度的可能值为 JDBC 2.20 规范中的值:小时到秒;一年到两年;年份(1),年份
(2)到年份(5)。
以下示例指定不透明类型中的第三个字段(VARCHAR)不能存储多于 24 个字符:
mdata.setFieldLength(3, 24);
指定长度
setLength() 方法指定不透明类型的总长度:
public void setLength(int length) throws SQLException
如果您正在从现有的 Java™ 类创建不透明类型并不指定长度,则驱动程序创建可变长度的
不透明类型。
如果您从不具有现有的 Java 类创建不透明类型,
则必须指定长度;
在此情况
下,UDT Manager 只创建固定长度的不透明类型。
指定对齐方式
setAlignment() 方法指定不透明类型的对齐方式:
public void setAlignment(int alignment)
alignment 参数是下一节中显示的对齐值之一。如果未指定对齐方式,则数据库服务器设置
不透明类型 4 字节对齐。
对齐值
对齐值如下表所示。

常量
结构始于
边界对齐
1
SINGLE_BYTE
1 个字节的数量
单个字节
2
TWO_BYTE
2 个字节的数量(例如 SMALLINT)
2 个字节
4
FOUR_BYTE
4 个字节的数量(例如 FLOAT 或 UNSIGNED
INT)
4 个字节
8
EIGHT_BYTE
8 个字节的数量
8 个字节
指定 SQL 名称

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 178 -

使用 setSQLName() 和 setJarFileSQLName()方法指定 SQL 名称:
public void setSQLName(String name) throws SQLException
public void setJarFileSQLName(String name) throws SQLException
缺省情况下,驱动程序使用通过 setSQLName() 方法设置的名称作为当调
用 UDTManager.createUDTCclass() 和 UDTManager.createJar() 方法时生成的 JAR 文件和
Java™ 类的文件名称。例如,如果调用 setSQLName("circle") 然后调
用 createUDTCclass() 和 createJar(),则生成的类文件名将会是 circle.class ,JAR 文件名将
会是 circle.jar。可以通过调用 setClassName() 方法指定 Java 类文件名而不是缺省值。
JAR 文件 SQL 名称是驱动程序用于注册 UDR 的 SQL CREATE FUNCTION 语句中引
用的名称。
重要:
JAR 文件 SQL 名是 SQL 语句中 JAR 文件的名称;
它与 JAR 文件的内容没有关系。
指定 Java 类名称
使用 setClassName() 指定 Java™ 类名称:
public void setClassName(String name)throws SQLException
如果未使用 setClassName() 设置类名称,则驱动程序使用不透明类型的 SQL 名称(通
过 setSQLName() 设置)
和 createUDTCclass() 方法生成的.class 文件的名称作为 Java™ 类的
名称。
指定 Java 源文件保留
使用 keepJavaFile() 指定是否保留 .java 源文件:
public void keepJavaFile(boolean value)
value 值指示 createUDTClass() 方法是否应该保留它在为新的不透明类型创建 Java™ 类文
件时生成的 .java 文件。缺省为移除此文件。以下示例保留 .java 文件:
mdata.keepJavaFile(true);

备份控制函数
备份控制函数可帮助进行在线备份。

pg_create_restore_point(name text)
描述:为执行恢复创建一个命名点。
(需要管理员角色)
返回值类型:text
备注:pg_create_restore_point 创建了一个可以用作恢复目的、有命名的事务日志记录,
并返回相应的事务日志位置。在恢复过程中,recovery_target_name 可以通过这个名称定位
对应的日志恢复点,并从此处开始执行恢复操作。
避免使用相同的名称创建多个恢复点,因
为恢复操作将在第一个匹配(恢复目标)的名称上停止。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
442

pg_current_xlog_location()
描述:获取当前事务日志的写入位置。
返回值类型:text
备注:pg_current_xlog_location 使用与前面那些函数相同的格式显示当前事务日志的写
入位置。如果是只读操作,不需要系统管理员权限。

pg_current_xlog_insert_location()
描述:获取当前事务日志的插入位置。
返回值类型:text
备注:pg_current_xlog_insert_location 显示当前事务日志的插入位置。插入点是事务日
志在某个瞬间的“逻辑终点”
,而实际的写入位置则是从服务器内部缓冲区写出时的终点。
写入位置是可以从服务器外部检测到的终点,
如果要归档部分完成事务日志文件,
则该操作
即可实现。插入点主要用于服务器调试目的。如果是只读操作,不需要系统管理员权限。

gs_current_xlog_insert_end_location()
描述:获取当前事务日志的插入位置。
返回值类型:text
备注:gs_current_xlog_insert_end_location 显示当前事务日志的实际插入位置。

pg_start_backup(label text [, fast boolean ])
描述:开始执行在线备份。
(需要管理员角色或复制的角色)
返回值类型:text
备注:
pg_start_backup 接受一个用户定义的备份标签(通常这是备份转储文件存放地点
的名称)

这个函数向GBase 8c 的数据目录写入一个备份标签文件,
然后以文本方式返回备
份的事务日志起始位置。
gbase=# SELECT pg_start_backup('label_goes_here');
pg_start_backup

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
443
-----------------
0/20000028
(1 row)

pg_stop_backup()
描述:完成执行在线备份。
(需要管理员角色或复制的角色)
返回值类型:text
备注:
pg_stop_backup 删除pg_start_backup 创建的标签文件,
并且在事务日志归档区里
创建一个备份历史文件。这个历史文件包含给予pg_start_backup 的标签、备份的事务日志
起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置。计算出中止
位置后,当前事务日志的插入点将自动前进到下一个事务日志文件,
这样,结束的事务日志
文件可以被立即归档从而完成备份。

pg_switch_xlog()
描述:切换到一个新的事务日志文件。
(需要管理员角色)
返回值类型:text
备注:pg_switch_xlog 移动到下一个事务日志文件,以允许将当前日志文件归档(假定
使用连续归档)
。返回值是刚完成的事务日志文件的事务日志结束位置+1。如果从最后一次
事务日志切换以来没有活动的事务日志,
则pg_switch_xlog 什么事也不做,
直接返回当前事
务日志文件的开始位置。

pg_xlogfile_name(location text)
描述:将事务日志的位置字符串转换为文件名。
返回值类型:text
备注:pg_xlogfile_name 仅抽取事务日志文件名称。如果给定的事务日志位置恰好位于
事务日志文件的交界上,
这两个函数都返回前一个事务日志文件的名称。
这对于管理事务日
志归档来说是非常有利的,因为前一个文件是当前最后一个需要归档的文件。

pg_xlogfile_name_offset(location text)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
444
描述:将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量。
返回值类型:text,integer
备注:可以使用pg_xlogfile_name_offset 从前述函数的返回结果中抽取相应的事务日志
文件名称和字节偏移量。例如:
gbase=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
NOTICE:
WAL archiving is not enabled; you must ensure that all required WAL
segments are copied through other means to complete the backup
file_name
| file_offset
--------------------------+-------------
000000010000000000000020 |
3616
(1 row)

pg_xlog_location_diff(location text, location text)
描述:计算两个事务日志位置之间在字节上的区别。
返回值类型:numeric

pg_cbm_tracked_location()
描述:用于查询cbm 解析到的lsn 位置。
返回值类型:text

pg_cbm_get_merged_file(startLSNArg text, endLSNArg text)
描述:
用于将指定lsn 范围之内的cbm 文件合并成一个cbm 文件,
并返回合并完的cbm
文件名。
返回值类型:text
备注:必须是系统管理员或运维管理员才能获取cbm 合并文件。

pg_cbm_get_changed_block(startLSNArg text, endLSNArg text)
描述:用于将指定lsn 范围之内的cbm 文件合并成一个表,并返回表的各行记录。
返回值类型:records
备注:
pg_cbm_get_changed_block 返回的表字段包含:
合并起始的lsn、
合并截止的lsn、

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
445
表空间oid、库oid、表的relfilenode、表的fork number、表是否被删除、表是否被创建、表
是否被截断、表被截断后的页面数、有多少页被修改以及被修改的页号的列表。

pg_cbm_recycle_file(targetLSNArg text)
描述:删除不再使用的cbm 文件,并返回删除后的第一条lsn。
返回值类型:text

pg_cbm_force_track(targetLSNArg text,timeOut int)
描述:
强制执行一次cbm 追踪到指定的xlog 位置,
并返回实际追踪结束点的xlog 位置。
返回值类型:text

pg_enable_delay_ddl_recycle()
描述:开启延迟DDL 功能,并返回开启点的xlog 位置。需要管理员角色或运维管理员
角色打开operate_mode。
返回值类型:text

pg_disable_delay_ddl_recycle(barrierLSNArg text, isForce bool)
描述:关闭延迟DDL 功能,并返回本次延迟DDL 生效的xlog 范围。需要管理员角色
或运维管理员角色打开operate_mode。
返回值类型:records

pg_enable_delay_xlog_recycle()
描述:开启延迟xlog 回收功能,数据库主节点修复使用。
返回值类型:void

pg_disable_delay_xlog_recycle()
描述:关闭延迟xlog 回收功能,数据库主节点修复使用。
返回值类型:void

pg_cbm_rotate_file(rotate_lsn text)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
446
描述:等待cbm 解析到rotate_lsn 之后,强制切换文件,在build 期间调用。
返回值类型:void。

gs_roach_stop_backup(backupid text)
描述:停止一个内部备份工具GaussRoach 开启的备份。与pg_stop_backup 系统函数类
似,但更轻量。
返回值类型:text,内容为当前日志的插入位置。
备注:目前GBase 8c 不支持。

gs_roach_enable_delay_ddl_recycle(backupid name)
描述:开启延迟DDL 功能,并返回开启点的日志位置。与pg_enable_delay_ddl_recycle
系统函数类似,但更轻量。并且,通过传入不同的backupid,可以支持并发打开延迟DDL。
返回值类型:text,内容为返回开启点的日志位置。
备注:目前GBase 8c 不支持。

gs_roach_disable_delay_ddl_recycle(backupid text)
描述:关闭延迟DDL 功能,并返回本次延迟DDL 生效的日志范围,并删除该范围内
被用户删除的列存表物理文件。与pg_enable_delay_ddl_recycle 系统函数类似,但更轻量。
并且,通过传入不同的backupid,可以支持并发关闭延迟DDL 功能。
返回值类型:records,内容为本次延迟DDL 生效的日志范围。
备注:目前GBase 8c 不支持。

gs_roach_switch_xlog(request_ckpt bool)
描述:切换当前使用的日志段文件,并且,如果request_ckpt 为true,则触发一个全量
检查点。
返回值类型:text,内容为切段日志的位置。
备注:目前GBase 8c 不支持。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
447