SQL大全[1]
作者 佚名技术
来源 数据库编程
浏览
发布时间 2012-03-22
用聚集结果的状态值作为聚集的结果,而输出类型为 state_type. initial_condition 状态值的初始设置(值).它必须是一个数据类型 state_type 可以接受的文本常量值. 如果没有声明,状态值初始为 NULL. 输出 CREATE 命令执行成功的返回信息. 描述 CREATE AGGREGATE允许用户或程序员通过定义新的聚集函数来扩展 PostgreSQL 的功能.一些用于基本类型的聚集函数如 min(integer) 和 avg(double precision) 等已经包含在基础软件包里了.如果你需要定义一个新类型或需要一个还没有提供的聚集函数,这时便可用 CREATE AGGREGATE 来提供我们所需要的特性. 一个聚集函数是用它的名字和输入数据类型来标识的. 如果两个聚集的输入数据不同,它们可以有相同的名字.要避免冲突, 不要写一个与聚集同名而且输入函数也相同的普通函数. 一个聚集函数是用一个或两个普通函数做成的: 一个状态转换函数 sfunc, 和一个可选的终计算函数 ffunc. 它们是这样使用的: sfunc( internal-state, next-data-item ) ---> next-internal-state ffunc( internal-state ) ---> aggregate-value PostgreSQL 创建一个类型为 stype的临时变量. 它保存这个聚集的当前内部状态. 对于每个输入数据条目,都调用状态转换函数计算内部状态值的新数值.在处理完所有数据后,调用一次最终处理函数以计算聚集的输出值.如果没有最终处理函数,那么将最后的状态值当做返回值. 一个聚集函数还可能提供一个初始条件,也就是说, 所用的该内部状态值的初始值.这个值是作为类型 text 的数据域存储在数据库里的, 不过它们必须是状态值数据类型的合法的外部表现形式的常量. 如果没有提供状态,那么状态值初始化为 NULL. 如果在 pg_proc 里该状态转换函数被定义为 "strict", 那么 NULL 输入就不能调用它.这个时候,带有这样的转换函数的聚集执行起来的现象如下所述.NULL 输入的值被忽略(不调用此函数并且保留前一个状态值).如果初始状态值是 NULL,那么由第一个非 NULL 值替换该状态值, 而状态转换函数从第二个非 NULL 的输入值开始调用.这样做让我们比较容易 实现象 max 这样的聚集.请注意这种行为只是当 state_type 与 input_data_type 相同的时候才表现出来. 如果这些类型不同,你必须提供一个非 NULL 的初始条件或者使用一个非strice的状态转换函数. 如果状态转换函数不是 strict(严格)的, 那么它将无条件地为每个输入值调用,并且必须自行处理 NULL 输入和 NULL 转换值, 这样就允许聚集的作者对聚集中的 NULL 有完全的控制. 如果终转换函数定义为"strict",则如果最终状态值是 NULL 时就不能调用它; 而是自动输出一个NULL的结果.(当然,这才是 strict 函数的正常特征.) 不管是那种情况,终处理函数可以选择返回 NULL.比如, avg 的终处理函数在零输入记录时就会返回 NULL. 注意 使用 DROP AGGREGATE 删除聚集函数. CREATE AGGREGATE的参数可以以任何顺序书写,而不只是上面显示的顺序. 用法 请参考 PostgreSQL 程序员手册 聚集函数章节的聚集函数部分获取完整的例子. 兼容性 SQL92 CREATE AGGREGATE是 PostgreSQL 语言的扩展. 在 里没有 CREATE AGGREGATE. -------------------------------------------------------------------------------- CREATE CONSTRAINT TRIGGER CREATE CONSTRAINT TRIGGER Name CREATE CONSTRAINT TRIGGER -- 定义一个新的约束触发器 Synopsis CREATE CONSTRAINT TRIGGER name AFTER events ON relation constraint attributes &nb |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 06—PL/SQL编程下一篇: 提高SQL Server安全性的一些建议
关于SQL大全[1]的所有评论