gpt4 book ai didi

sql - 如何在postgresql函数中返回临时表结果

转载 作者:行者123 更新时间:2023-11-29 11:39:12 27 4
gpt4 key购买 nike

我在函数中使用临时表来保存一些结果,但是我不知道如何从函数返回表。理想情况下,我希望在一个查询中执行所有操作(即不是两个查询:一个用于调用函数,另一个用于从临时表获取数据)。

目前我的main_function()如下:

CREATE OR REPLACE FUNCTION main_function() RETURNS void AS
$BODY$
BEGIN

DROP TABLE IF EXISTS temp_t CASCADE;
CREATE TEMP TABLE temp_t AS SELECT * FROM tbl_t limit 0;

EXECUTE 'INSERT INTO temp_t ' || 'SELECT * FROM tbl_t limit 10';

END;
$BODY$
LANGUAGE 'plpgsql' ;

我是这样调用它的:

SELECT * from main_function();
SELECT * from temp_t;

同样,问题是我实际上并不想调用第二个查询。第一个查询应该作为结果返回临时表,但是我不能这样做,因为临时表是在 main_function() 中创建的,所以它不能是它的返回类型。

关于如何实现这一点有什么想法吗?

谢谢

最佳答案

在你的 main_function() 中:

RETURN QUERY SELECT * FROM temp_t;

...如果 temp_t 表由例如column1 (type integer), column2 (boolean) 和 column3 (varchar(100)),你还应该将返回类型定义为:

CREATE OR REPLACE FUNCTION main_function(column1 OUT integer, column2 OUT boolean, column3 OUT varchar(100)) RETURNS SETOF record AS
(...)

另一种方法是定义新的数据类型:

CREATE TYPE temp_t_type AS (
column1 integer,
column2 boolean,
column3 varchar(100)
);

该类型可以由您的函数以与普通数据类型相同的方式返回:

CREATE OR REPLACE FUNCTION main_function() RETURNS SETOF temp_t_type AS
(...)

...并以与上述相同的方式从函数返回结果。

关于sql - 如何在postgresql函数中返回临时表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com