Postgresql存储过程select into temp table。

作为一个最近从SQL Server转换过来的人,我正在一点点了解Postgresql。

我真的很讨厌在SQL中写嵌套的selevt语句,因为我发现当我这样做时,代码的可读性和可维护性都会受到影响。

通常我会在SQL Server中创建一个存储过程,在这个存储过程中,我会选择一些东西到一个临时表中,然后我可以在另一个选择语句中使用。

CREATE OR ALTER PROCEDURE Procname
AS

BEGIN

SELECT
    Somewhere.Col_1,
    Somewhere.Col_2

INTO
    #Temptable

FROM
    Somewhere Somewhere

SELECT
    Temptable.Col_1,
    Somewhere_Else.Col3

FROM
    #Temptable Temptable

INNER JOIN
    Somewhere_Else.Col_2 = Temptable.Col_2

END

当我执行这个存储过程时,我将得到最终的选择查询返回

我如何在Postgresql中复制这个过程?

我知道你可以选择到一个临时表,但我似乎不知道如何在同一个存储过程的下一个选择语句中使用这个表。

解决方案:

创建一个集合返回函数,根本不需要临时表。

CREATE function Procname()
  returns table(col_1 ???, col2 ???) --<< change data types here
AS
$$
  SELECT
      Temptable.Col_1,
      Somewhere_Else.Col3
  FROM Somewhere Temptable
    INNER JOIN Somewhere_Else ON Somewhere_Else.Col_2 = Temptable.Col_2;
$$
language sql
stable;

但是对于这样一个简单的语句,我宁愿创建一个视图。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

哈斯克尔中类型的函数应用操作数($)?

2022-4-22 1:00:15

解决方案

Dokku 编译错误 - django.core.exceptions.ImproperlyConfigured: 加载psycopg2模块时出错,没有名为'psycopg2'的模块。没有名为'psycopg2'的模块。

2022-4-22 1:00:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索