gpt4 book ai didi

sql - 带有 select 返回一个值的 PostgreSQL 函数

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

我有一张表 years(每只耳朵的 1 月 1 日)。我想创建一个函数,它使用这些年中的每一年并在另一个表上运行查询以计算属于那一年的行数。我尝试使用 pl/pgsql 来实现,使用下面的代码,但我没有让它工作或在 Internet 上找到任何引用。

CREATE or REPLACE FUNCTION func_test(in AAA date, OUT _result int) 
BEGIN
SELECT SUM(st_length(geom)) as BBB
FROM hist_line
WHERE '2006-01-01' BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31');
RETURN _result BBB;
END;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION func_test(date)

select func_test('2009-01-01');

我无法将函数内的内容查询恢复为函数的输出。

最佳答案

您的代码有不止一个问题,但主要错误是错误地使用了 SELECT 语句 - 您所做的事情没有意义。 plpgsql 中的嵌入式 SQL 具有特殊子句“INTO targetvar”:

CREATE OR REPLACE FUNCTION func_test(in AAA date, OUT _result int)
AS $$
BEGIN
SELECT SUM(st_length(geom)) INTO _result
FROM hist_line
WHERE AAA BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31');
RETURN;
END;
$$ LANGUAGE plpgsql;

这些单行函数不应该在plpgsql中实现。只需使用 SQL。

CREATE OR REPLACE FUNCTION func_test(in AAA date)
RETURNS int AS $$
SELECT SUM(st_length(geom))
FROM hist_line
WHERE $1 BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31');
$$ LANGUAGE sql;

有关 PL/pgSQL 的良好来源是相关的 chapter 在 PostgreSQL 文档中。第二个来源可以是我的tutorial .

关于sql - 带有 select 返回一个值的 PostgreSQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501455/

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