返回首页

gbase数据、南大通用产品文档:GBase8s存储和检索 XML 文档

更新日期:2024年09月11日

由 World Wide Web Consortium(W3C)定义的“可扩展置标语言”
(XML)提供以文本、
可编辑文件(称为 XML 文档)描述结构化数据的规则、指南和惯例。XML 仅使用定界数
据条的标记,将对数据的解释留给使用它的应用程序来处理。
XML 是一种以开放的、与平
台无关的格式表示数据的方法。
将访问 XML 文档的当前可用的 API 称为 JAXP(“用于 XML 解析的 Java™ API”)。
该 API 有下列两个子集:

“XML 的简单 API”(SAX)是事件驱动协议,带有编程人员提供的回调方法,
当它分析文档时,XML 解析器调用这些方法。

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

“文档对象模型”(DOM)是随机访问协议,其将 XML 文档转换为内存中的对
象集合,可由编程人员自主操纵它。DOM 对象有数据类型 Document。
JAXP 还包含 plugability layer,为了创建和配置 SAX 解析器并创建 DOM 对象,通过提
供标准 factory 方法, 其实现对 SAX 和 DOM 编程访问的标准化。
对 JDBC API 的 GBase 8s 扩展促进对数据库列中 XML 数据的存储和检索。在数据存储
期间使用的这些方法有助于解析 XML 数据,
核实存储的 XML 数据的形式良好性和有效
性,并确保拒收无效的 XML 数据。在数据检索期间使用的方法有助于将 XML 数据转换
为 DOM 对象和类型InputSource,这是 SAX 和 DOM 方法的标准输入类型。在仍然提供
关于编程人员使用哪个 JAXP 软件包的灵活性的同时,设计 GBase 8s 扩展来支持 XML
编程人员。

语法
regexp_replace(source_char,pattern[,replace_string[,position[,occurren
ce[match_option]]]])
说明
用replace_string 指定的字符串替换源字符串中与pattern 指定的正则
表达式相匹配的字符串。
功能
将匹配获得的字符串替换成指定的字符串。
参数说明
表5- 15 参数说明
参数
说明
source_char
源字符串。该参数支持的数据类型与8a 的replace 函数的src 参
数一致。
pattern
正则表达式。
每个正则表达式最多可包含512 个字节。
具体语法
规则请参考PCRE-7.8 版本的语法规则说明
replace_string
替换字符串。替换字符串可以包含反向引用的数字表达式(\n,
n 的取值范围是[1,9])
position
开始匹配的位置,如果不指定默认为1,即从source_char 的第
一个字符开始匹配。position 为一个正整数。
occurrence
正则匹配的序数。是一个非负的整数,默认值为0。

指定为0,则替换所有匹配到的字符串;

如果指定为整数n,则替换第n 次匹配到的字符串;
match_parameter
可通过设置该参数改变默认的匹配功能行为。默认情况下“.”不
匹配换行符,源字符串被看作一行。参数可选项如下:

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
736
参数
说明

i:大小写不敏感;

c:大小写敏感;

n:点号(.)不匹配换行符号;

m:多行模式;

x:扩展模式,忽略正则表达式中的空白字符。
注意

用户同时指定多个互斥参数可选项时,系统按照最后一个参数处理。用户
指定match_parameter 参数选项(i,c,n,m,x)以外的选项时,系统报错。

regexp_replace 函数的replace_string、
position、
occurrence、
match_parameter
参数都能省略,若上述4 个参数中的任何一个省略,省略参数后的所有参
数都不能设置,若需要设置后续参数则必须给出所设置参数的上一个参数
的值。

由于sql 语法与pcre 正则语法都使用反斜杠
('\')
作为转义符。
所以在pattern
中应使用连续两个反斜杠(‘\\')作为正则的转义符。

regexp_replace 函数不支持递归。

如果source_char 参数为运算结果而非表的实体列,且此运算结果大于512
个字节,则函数报错。
例如:
CREATE VIEW v_tb1 as SELECT * FROM tb1 WHERE v1 = (select
regexp_replace('000*111*999','\\*','-') from tb2 where
v2=regexp_replace(c1,'\\*','-'));
SELECT * from alltype A left join (SELECT regexp_replace(v1, 'a', '')
as c41 from v_tb1)
B on A.V3 =
regexp_replace(B.c41,'\\*','-') ;
示例
示例1:在简单select 查询中使用函数。
gbase> drop table if exists tb1;
Query OK, 0 rows affected
gbase> drop table if exists tb2;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
737
Query OK, 0 rows affected
gbase> create table tb1(v1 varchar(25),c1 char(11),i1 int);
Query OK, 0 rows affected
gbase> insert into tb1 values('000-111-999','000*111*999',12);
Query OK, 1 row affected
gbase> create table tb2(v2 varchar(25),c2 char(11),i2 int);
Query OK, 0 rows affected
gbase> insert into tb2 values('000-111-999','000*111*999',12);
Query OK, 1 row affected
gbase> SELECT regexp_replace('000-111-999','-','') from tb1;
+--------------------------------------+
| regexp_replace('000-111-999','-','') |
+--------------------------------------+
| 000111999
|
+--------------------------------------+
1 row in set

准备好的 SQL 语句占据内存中的空间。对于某些数据库服务器,它可消耗数据库服务器
拥有的空间以及属于该程序的空间。当程序终止时,释放此空间,但通常您应在使用完此
空间时就释放它。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 226 -
您可使用 FREE 语句来释放此空间。FREE 语句采用语句的名称,或为语句名称声明了的
游标的名称,并释放分配给准备好的语句的空间。如果在该语句上定义多个游标,则释放
该语句不会释放游标。