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

2023年 9月 25日 68.0k 0

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;
/

差异对比

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

  • 返回类型关键字的区别,一个是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');

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

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

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

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;
/

差异对比

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

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

  • 返回类型关键字的区别,一个是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');

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

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

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

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

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

select (fun()).*select (fun()).*

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论