返回首页

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

更新日期:2024年09月11日



用户定义的聚集
您可以 CREATE AGGREGATE 语句创建您自己的聚集表达式,然后在
您可调用内建的聚集的任何地方调用这些聚集。
下图展示调用用户定义的聚集的语法。
用户定义的聚集

元素
描述
限制
语法
aggregate
要调用的用户定义
的聚集的名称
聚集以及为聚集定义的支持
函数必须存在
标识符
column
table 之内列的名

必须存在且有数值数据类型 引用字符串
setup_expr
为特定的调用定制
聚集的设置表达式
不可为孤立的主变量。在
setup_expr 中引用的任何
列都必须在该查询的 GROUP
BY 子句中
表达式
synonym、
table、view
column 在其中发生
的同义词、表或视

synonym 和它指向的表或视
图必须存在
标识符

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1530
使用 DISTINCT 或 UNIQUE 关键字来指定仅将用户定义的聚集应用于命名的列
或表达式中唯一的值。使用 ALL 关键字来指定将该聚集应用于命名的列或表达
式中所有的值。
如果您省略 DISTINCT、UNIQUE 和 ALL 关键字,则缺省值为 ALL。要获取关
于 DISTINCT、UNIQUE 和 ALL 关键字的更多信息,请参阅 包括或排除结果
集中的重复值。
当您指定设置表达式时,将此值传递到 INIT 支持函数,在 CREATE
AGGREGATE 语句中为用户定义的聚集定义了该支持函数。
在下列示例中,您将名为 my_avg 的用户定义的聚集应用到 items 表中
quantity 列的所有值:
SELECT my_avg(quantity) FROM items
在下列示例中,您将名为 my_sum 的用户定义的聚集应用于 items 表中
quantity 列的唯一的值。您还支持值 5 作为设置表达式。此值可以指定 my_avg
将计算的总和的初始值为 5。
SELECT my_sum(DISTINCT quantity, 5) FROM items
在下列示例中,您将名为 my_max 的用户定义的聚集应用于远程 items 表中
quantity 列的所有值:
SELECT my_max(remote.quantity) FROM rdb@rserv:items remote
如果将 my_max 聚集定义为 EXECUTEANYWHERE,则可将该分布式查询推送
到远程数据库服务器 rserv 来执行。如果未将 my_max 聚集定义为
EXECUTEANYWHERE,则该分布式查询扫描远程 items 表,并在本地数据库服
务器上计算 my_max 聚集。
您不可以远程数据库服务器的名称来限定用户定义的聚集,如下例所示。在此情
况下,数据库服务器返回错误:
SELECT rdb@rserv:my_max(remote.quantity)
FROM rdb@rserv:items remote
要获取关于用户定义的聚集的更多信息,请参阅 CREATE AGGREGATE 语句 以
及 GBase 8s 用户定义的例程和数据类型开发者指南 中对用户定义的聚集的讨
论。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1531
网格查询中的聚集表达式
网格查询中的聚集表达式要求发出网格查询的数据库服务器从多网格服务器组合
聚集结果。
网格查询是在数据库服务器的限定的行上返回逻辑 UNION 或 UNION ALL 的分
布式 SELECT 语句,这些表在 GBase 8s 网格的数据库中有相同的模式。在
GRID 子句 主题和在 GBase 8s Enterprise Replication 指南 中描述网格查询。
网格查询中的聚集表达式要求发出该网格查询的数据库服务器组合来自多网格服
务器的聚集结果。由于您指定的网格查询转换为跨多网格服务器的 UNION 或
UNION ALL 查询,因此,在指定的网格或区域内在每一参与的服务器上独立地
计算每一聚集。将这些单独的聚集返回到发出该网格查询的数据库服务器,其计
算它们的组合的 UNION 或 UNION ALL 值。
为了从这些单独的聚集计算全局的聚集,该网格查询必须是子查询。例如,假设
我们想要查看东南地区(下列示例中的 SW_USA)的总销售额和平均销售额。因
为如果在该网格内跨数据集的限定的行值的数目不同,则采用平均组的平均值是
不正确的,因此正确的网格查询需要类似这样:
SELECT SUM(amt) AS total_sales ,
SUM(amt) / SUM(cnt) AS avg_sale FROM
(
SELECT COUNT(*) cnt, SUM(amt) amt
FROM sales GRID ALL 'SW_USA'
);

total_sales avg_sale
$8300.00 $103.75
在此示例中,网格查询的 projection 列表指定来自东南地区(编码为
'SW_USA')内每一网格数据库的 sales 表的 COUNT(*) 表达式(别名为 cnt)
和聚集数量 SUM(amt)(别名为 amt)。使用来自每一远程网格服务器的这些
值,本地的网格服务器可计算该地区的平均值。通过把求值表达式 SUM(amt)
的总销售额加起来,并将那个值除以总计数 SUM(cnt) 来实现,此处,cnt 和
amt 是网格子查询的结果集中的列。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1532
请注意,GRID ALL 关键字指定来自每一参与的网格服务器的限定的行的
UNION ALL,来避免消除重复的行。

uncontrolled_memory_context
参数说明:启用检查内存上下文是否超过给定限制的功能时,设置不受此功能约束。仅
适用于DEBUG 版本。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
查询时会在参数值的最前面添加标题含义字符串“MemoryContext white list:”。
取值范围:字符串
默认值:空

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1175

PL/SQL编译器忽略注释。向程序添加注释可以增强可读性。通常,使用注释来描述每
个代码段的用途,也可以将代码通过注释禁用。