快速业务通道

SQL大全[1]

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-22
函数可以利用这个 特性.
definition
一个定义函数的字串;含义取决于语言.它可以是一个内部函数名字, 一个指向某个目标文件的路径,一个 SQL 查询,或者一个用过程语言 写的文本.
obj_file, link_symbol
这个形式的 AS 子句用于在函数的 C 源文件 名字和 SQL 函数的名字不同的时候动态联接 C 语言函数. 字串 obj_file 是包含可动态装载的对象的文件名,而 link_symbol 是对象的联接符号,也就是该函数在 C 源文件列的名字.
langname
可以是 SQL,C, internal,或者 plname,这里的 plname 是一种已创建过程语言的名字. 参阅 CREATE LANGUAGE获取细节. 为了保持向下兼容,该名字可以用单引号包围.
attribute
一段可选的有关该函数的信息,用于优化.见下文获取细节.
创建该函数的用户成为该函数所有者.
下面的属性可以出现在 WITH 子句里∶
iscachable
Iscachable 表示此函数在输入相同时总是返回相同的值 (也就是说, 它不做数据库查找或者是使用没有直接在它的参数列表出现的信息)。 优化器使用 iscachable 来认知对该函数的调用进行预先计算是否安全。
isstrict
isstrict 表明如果它的任何参数是 NULL,此函数总是返回 NULL. 如果声明了这个属性,则如果存在 NULL 参数时不会执行该函数;而只是自动假设一个 NULL 结果.如果没有声明 isstrict 该函数将为 NULL 输入调用并进行处理.那么剩下的事就是函数作者的责任来检查 NULL 是否必须并且做相应响应.
注意
请参阅 PostgreSQL 程序员手册 关于通过函数扩展 PostgreSQL 的章节获取更多关于书写外部函数的信息.
我们允许你将完整的 SQL 类型语法用于 输入参数和返回值.不过,有些类型声明的细节(比如, numeric 类型的精度域)是由下层函数实现负责的, 并且会被 CREATE FUNCTION 命令悄悄地吞掉. (也就是说,不再被识别或强制).
PostgreSQL 允许函数 重载;也就是说,同一个函数名可以用于几个不同的函数, 只要它们的参数可以区分它们。不过,这个功能在用于 internal(内部)和 C 语言 的函数时要小心。
两个 internal 函数拥有相同 C 名称时肯定会发生链接时错误。 要解决这个问题,给它们赋予不同的 C 名称(例如,使用参数类型做为 C 名称的一部分),然后在 CREATE FUNCTION 的 AS 子句里面声明这些名字。 如果 AS 子句为空,那么 CREATE FUNCTION 假设函数的 C 名称与SQL名称一样。
类似的还有,如果用多个 C 语言函数重载 SQL 函数, 给每个 C 语言函数的实例一个独立的名称,然后使用 CREATE FUNCTION 语法里的 AS 句的不同形式来选择每个重载的 SQL 函数的正确的 C 语言实现.
如果重复调用 CREATE FUNCTION,并且都指向同一个目标文件,那么该文件只装载一次.要卸载和恢复装载 该文件(可能是在开发过程中),你可以使用 LOAD命令.
使用 DROP FUNCTION 删除一个用户定义函数.
要更新现存函数的定义,用 CREATE OR REPLACE FUNCTION.请注意不可能用这种方法改变一个函数的名字或者参数类型 (如果你这么干,你只是会创建一个新的,不同的函数). 同样,CREATE OR REPLACE FUNCTION 也不会让你改变一个现存函数的返回类型.要干这些事,你必须删除并 重新创建该函数.
如果你删除然后重新创建一个函数,新函数和旧的并非相同实体; 你会破坏现存的引用了原有函数的规则,视图,触发器等等.使用 CREATE OR REPLACE FUNCTION 可以改变一个函数的定义而又不会破坏引用该函数的对象.
例子
要创建一个简单的 SQL 函数∶
CREATE FUNCTION one() RETURNS integer
    AS ''SELECT 1 AS RESULT;''
    LANGUAGE SQL;
SELECT one() AS answer;
answer
--------
   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号