postgresql 函数使用 with as (公用表达式)

alexlee 2024-3-8 207 3/8

最近做项目,要使用函数来处理返回值,由于我们经常使用公用表达式(CTE),所以想在函数里边使用CTE,这里就引起了问题的思考。

首先,我们要先了解什么是CTE,先了解下概念如下:

CTE是“Common Table Expression”的缩写,中文意思为“公共表达式”。在SQL中,CTE是一种临时的命名查询,它允许用户在查询中创建一个临时的结果集,并且可以在后续的查询中引用这个结果集。CTE通常用于简化复杂的查询、提高可读性和可维护性。CTE在WITH子句中定义,并且可以在SELECT、INSERT、UPDATE、DELETE等语句中使用。

postgresql 是否可以使用CTE?那这里,我可以告诉大家,其实是可以使用的(CTE),那接下来,我们就来看看这个问题。

首先,我们先上一段代码如下:

CREATE OR REPLACE FUNCTION get_film_bb ()
RETURNS TABLE (aa text)
AS $BODY$
BEGIN
RETURN query
with dd as ( select 'aa' as col ) select * from dd;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100

调用语句 select * from get_film_bb()

那我们这里要注意,这里返回的是结算集 table ,就是一张表的所有数据进行返回。我们要注意这里的字段类型必须跟返回的结果集的类型相一致,否则就会报错,返回的类型跟查询的类型不匹配。

那我们可以看到我们确实在函数中使用了CTE表达式来做方法体,也确实是可以行得通的,这是一种解决方案。

RETURNS TABLE (aa text) 根据实际返回的字段,建立属于自己的表格。

那我们还要介绍另一种,直接返回现有表格的写法,如下:

create table testaa
(
aid text
);
CREATE OR REPLACE FUNCTION test_function_aa()
RETURNS SETOF testaa
AS $BODY$
BEGIN
RETURN query
with aa as ( select 'bb' as aid ) select aid from aa;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
select * from test_function_aa();

以上的写法,就是直接创建表格,将现在有表格当做返回的类型,有两种返回表格模式,大家根据自己的实际需要,选择相对应的函数进行

创建。

做为资深开发来说,每样不同技术的返回,我们都要掌握,毕竟开发这么多年,总会遇到各种各样的开发场景,为引,我们还是要懂得这些开发。

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

 

- THE END -
最后修改:2024年5月6日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论