CREATE [ OR REPLACE ] FUNCTION

CREATE [ OR REPLACE ] FUNCTION         

//CREATE FUNCTION 定义一个新的函数。 CREATE OR REPLACE FUNCTION 将要么创建一个新函数,要么替换现有的定义。

如果包含了一个模式名,那么函数就在指定的模式中创建。否则它会在当前模式中创建。新函数的名字不能和同一个模式中的任何带有同样参数类型的函数同名。不过,参数类型不同的函数可以同名(这叫做重载)。

要更新一个现有函数的定义,使用 CREATE OR REPLACEFUNCTION。我们不能用这个方法修改一个函数的名字或者参数类型(如果你这么干,那么你就会创建一个新的,不同的函数)。同样,CREATEOR REPLACE FUNCTION也不会允许你修改一个现有函数的返回类型。要做这些事情,你必须删除并重新创建函数。(如果使用 OUT 参数,那就意味着除了删除函数,你不能修改任何 OUT 参数的类型或者名字。)

如果你删除然后重建一个函数,新函数和旧的将是不同的实体;你就需要删除现有引用了老函数的规则,视图,触发器等等。 使用CREATE OR REPLACE FUNCTION可以在不破坏引用该函数的对象的前提下修改函数定义。

创建这个函数的用户成为函数的所有者。

-----------------------------------------------------------------------------------------------------------------------

CREATE [ OR REPLACE ] FUNCTION     

   name( [ [argmode] [argname]argtype[ { DEFAULT | = }default_expr] [, ...] ] )

        [ RETURNS rettype    //返回数据类型。输出类型可以声明为一个基本类型,复合类型,域类型,或者引用一个表的现有字段。根据实现语言的不同,我们还可以在这上面声明"伪类型", 比如 cstring。
如果存在 OUT 或者 INOUT 参数,则可以省略 RETURNS子句。如果出现了,那么它必须和输出参数隐含的结果类型兼容:如果有多个输出参数,必须是 RECORD, 如果只有一个输出参数,则与其相同。
SETOF 修饰词表示该函数将返回一套条目, 而不是一条条目。
一个字段的类型是通过写 tablename.columnname%TYPE 来引用的。


          | RETURNS TABLE (column_name column_type[, ...] ) ]

   { LANGUAGE lang_name    //lang_name:用以实现函数的语言的名字。 可以是 SQL,C, internal,或者是用户定义的过程语言名字。为了保持向下兼容,该名字可以用单引号包围。

        | WINDOW

| IMMUTABLE | STABLE | VOLATILE

        | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT

        | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER

        | COST execution_cost

        | ROWS result_rows

        | SET configuration_parameter{ TO value| =value| FROM CURRENT }

        | AS 'definition'

        | AS 'obj_file', 'link_symbol'

   } ...

        [ WITH (attribute[, ...] ) ]


————————————————

参考链接:https://www.postgresql.org/docs/9.1/sql-createfunction.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值