您的位置:首页 > 新闻 > 会展 > 最近发生的新闻热点事件_阿里巴巴网官网首页_推广文案_网站制作的服务怎么样

最近发生的新闻热点事件_阿里巴巴网官网首页_推广文案_网站制作的服务怎么样

2024/12/26 21:25:37 来源:https://blog.csdn.net/studio_1/article/details/143302208  浏览:    关键词:最近发生的新闻热点事件_阿里巴巴网官网首页_推广文案_网站制作的服务怎么样
最近发生的新闻热点事件_阿里巴巴网官网首页_推广文案_网站制作的服务怎么样

创建 PostgreSQL 函数案例

  • 一、前言
  • 二、准备数据
  • 三、案例
    • 1、简单使用
    • 2、返回单个字段
    • 3、返回多个字段
    • 4、传入参数
    • 5、在函数中产生变量返回
    • 6、实现分页

一、前言

最近因为项目需要创建了数据库函数,数据库是 PostgreSQL ,这里做个创建函数的记录。

二、准备数据

准备了如下数据:

在这里插入图片描述

后续创建函数都使用这些数据。

三、案例

1、简单使用

假如要将如下 sql 放到函数里:

select * from mr m order by m.create_time desc;

创建如下函数:

create or replace function get_mr_data_1()
returns setof mr as
$BODY$beginreturn query select * from mr m order by m.create_time desc;end;
$BODY$
language plpgsql;

在这里插入图片描述

使用函数查询, sql 如下:

select get_mr_data_1();

在这里插入图片描述

解释:

create or replace function get_mr_data_1()  -- 创建名为get_mr_data_1()的函数,存在时替换。
returns setof mr as   -- 返回类型,这里为mr(我的表)
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$begin  -- 函数的开始标志return query select * from mr m order by m.create_time desc;end;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

2、返回单个字段

假如只返回 name 这个字段, sql 如下:

select m.name from mr m order by m.create_time desc;

创建如下函数:

create or replace function get_mr_data_2()  
returns table(name varchar) as   
$BODY$     begin  return query select m.name from mr m order by m.create_time desc;end;   
$BODY$     
language plpgsql;  

在这里插入图片描述

使用函数查询

select get_mr_data_2();

在这里插入图片描述

解释:

create or replace function get_mr_data_2()  -- 创建名为get_mr_data_2()的函数,存在时替换。
returns table(name varchar) as   -- 返回类型,这里为返回字段 name ,返回类型为 varchar 
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$begin  -- 函数的开始标志return query select m.name from mr m order by m.create_time desc;end;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

3、返回多个字段

假如要返回 id ,name ,create_time 这个三个字段

select m.id, m.name, m.create_time from mr m order by m.create_time desc;

创建如下函数:

create or replace function get_mr_data_3()  
returns table(id varchar, name varchar, create_time timestamp) as   
$BODY$     begin  return query select m.id, m.name, m.create_time from mr m order by m.create_time desc;end;   
$BODY$     
language plpgsql; 

在这里插入图片描述

使用函数查询:

select get_mr_data_3();

在这里插入图片描述

解释:

create or replace function get_mr_data_3()  -- 创建名为get_mr_data_2()的函数,存在时替换。
returns table(id varchar, name varchar, create_time timestamp) as   -- 返回类型,这里为返回字段分别为 id ,name ,create_time ,返回类型分别为 varchar ,varchar ,timestamp
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$begin  -- 函数的开始标志return query select m.id, m.name, m.create_time from mr m order by m.create_time desc;end;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

4、传入参数

查询 id 为 1843560690671853578 的记录

select m.id, m.name, m.create_time from mr m where m.id = '1843560690671853578'

创建如下函数:

create or replace function get_mr_data_4(select_id varchar)  
returns table(id varchar, name varchar, create_time timestamp) as   
$BODY$     begin  return query select m.id, m.name, m.create_time from mr m where m.id = select_id;end;   
$BODY$     
language plpgsql;

在这里插入图片描述

使用函数查询

select get_mr_data_4('1843560690671853578')

在这里插入图片描述

解释:

create or replace function get_mr_data_4(select_id varchar)  -- 创建名为get_mr_data_4()的函数,存在时替换,参数名为 select_id ,类型为 varchar ,查询参数类型和数据库字段类型保持一致。
returns table(id varchar, name varchar, create_time timestamp) as   -- 返回类型,这里为返回字段分别为 id ,name ,create_time ,返回类型分别为 varchar ,varchar ,timestamp
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$begin  -- 函数的开始标志return query select m.id, m.name, m.create_time from mr m where m.id = select_id;end;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

5、在函数中产生变量返回

模糊查询 name 并返回结果数据条数,sql 如下:

select count(*) from mr m where m.name ilike CONCAT('%', 'upload', '%');

创建如下函数:

create or replace function get_mr_data_5(select_name varchar)  
returns int as   
$BODY$     declare num int;begin  select count(*) into num from mr m where m.name ilike CONCAT('%', select_name, '%');return num; end;   
$BODY$     
language plpgsql;

在这里插入图片描述

使用函数查询:

select get_mr_data_5('upload')

在这里插入图片描述

解释:

create or replace function get_mr_data_5(select_name varchar)  -- 创建名为get_mr_data_5()的函数,存在时替换,参数名为 select_name ,类型为 varchar ,查询参数类型和数据库字段类型保持一致。
returns int as   -- 返回类型,这里为 int ,和返回类型保持一致
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$declare   -- 定义变量num int;  -- 变量为 num ,类型为 int ,假如有多个变量,每个变量之后带上“:”即可begin  -- 函数的开始标志select count(*) into num from mr m where m.name ilike CONCAT('%', select_name, '%');  -- into 将查询结果赋值给变量 num return num;  -- 返回变量 numend;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

6、实现分页

使用字段 name 进行模糊查询,查询第一页,没用十条数据, sql 如下:

select m.id, m.name, m.create_time from mr m where m.name ilike CONCAT('%', 'up', '%') order by m.create_time desc offset 0 limit 10;

创建如下函数:

create or replace function get_mr_data_6(select_name varchar, page_num integer, page_size integer) 
returns table(id varchar, name varchar, create_time timestamp) as
$BODY$beginreturn query select m.id, m.name, m.create_time from mr m where m.name ilike CONCAT('%', select_name, '%') order by m.create_time desc offset (page_num - 1) * page_size limit page_size;end;
$BODY$
language plpgsql;

在这里插入图片描述

使用函数查询:

select get_mr_data_6('up', 1, 10)

在这里插入图片描述

在这里插入图片描述

可以看到实现了分页。

解释:

create or replace function get_mr_data_6(select_name varchar, page_num integer, page_size integer)  -- 创建名为get_mr_data_6()的函数,存在时替换,参数名分别为 select_name 、page_num 、page_size ,类型为 varchar 、 integer 、integer ,查询参数类型和数据库字段类型保持一致。
returns int as   -- 返回类型,这里为 int ,和返回类型保持一致
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$begin  -- 函数的开始标志return query select m.id, m.name, m.create_time from mr m where m.name ilike CONCAT('%', select_name, '%') order by m.create_time desc offset (page_num - 1) * page_size limit page_size;  -- postgresql 的 offset 1 limit 10 相当于 mysql 的 limit 1 10end;   -- 函数的结束标志
$BODY$     -- 在 $BODY$ 之间编写函数体,也可以使用 $$
language plpgsql;   -- 指定 language plpgsql 来告诉 PostgreSQL 使用 PL/pgSQL 来编译和执行函数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com