暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

openGauss/MogDB数据库函数创建的两种风格

原创 多米爸比 2021-11-24
890

PostgreSQL风格

create or replace function months_between()
returns number
as $function$
begin
    return 0;
    exception when …
end;
$function$ language plpgsql;
复制

Oracle风格

create or replace function months_between()
return number
as 
begin
    return 1;
    exception when …
end;
/
复制

差异对比

image.png

针对这两种编写风格,我们需要注意:

  • 返回类型关键字的区别,一个是returns,一个是return。
  • PG风格里我们需要注意下函数的主体结构,前后是一对双$符号,双$符号之间的名称可以自由命名,但需要注意前后要保持一致,特别是大小写。
  • PG风格里需要指定编程语言(可从系统表pg_language查询),比较常见的是plpgsql或者sql

我们更推荐使用PG风格的函数创建形式。

创建函数示例

使用plpgsql创建一个简单函数

create or replace function f1_formatdate (vdate date, fmt varchar)
returns varchar
as $function$
begin
    return  to_char(vdate,fmt);
end;
$function$ language plpgsql;
复制

如果没有复杂的业务逻辑判断,也可以使用sql语言来编写函数

create or replace function f2_formatdate  (vdate date, fmt varchar)
returns varchar
as $$
    select to_char(vdate,fmt);
$$ language sql;
复制

调用方式

方式一:直接select调用

select f1_formatdate(current_date,'yyyy-mm');
复制

image.png

方式二:把函数当成表来select from调用,适用于函数返回row或者table时只获取部分列

select * from f2_formatdate(current_date,'yyyy/mm/dd');
复制

image.png

方式三:函数返回复合对象时通过符号“点”来调用

select (fun()).*
复制
最后修改时间:2021-12-08 15:45:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • PostgreSQL风格
  • Oracle风格
  • 差异对比
    • 我们更推荐使用PG风格的函数创建形式。
  • 创建函数示例
  • 调用方式