gpt4 book ai didi

PostgreSQL:在where子句中使用函数参数

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

我想创建一个使用过滤器参数的函数,稍后将其应用于 where 子句。

到目前为止,我的函数定义如下:

CREATE OR REPLACE FUNCTION function_to_be_fixed(filter_date date)                   
RETURNS void as $$
Begin
CREATE OR REPLACE VIEW view_to_create.randomname AS
SELECT * from other_table where date_col <= filter_date
End;
$$ LANGUAGE plpgsql;

通过调用函数时

 select function_to_be_fixed(filter_date   => '2020-01-01');

我收到错误:“filter_date”列不存在。

我需要调整什么才能使其运行?

最佳答案

您不能在 View 定义中使用类似的参数。

一旦创建 View ,参数就会“丢失”。

您需要为此使用动态 SQL,以便将参数的值替换为定义 View 的 SQL 字符串:

CREATE OR REPLACE FUNCTION function_to_be_fixed(filter_date date)                   
RETURNS void as $$
Begin
execute format('
CREATE OR REPLACE VIEW view_to_create.randomname AS
SELECT * from other_table where date_col <= %L', filter_date);
End;
$$ LANGUAGE plpgsql;

将 filter_date 传递给的单个函数将是更好的解决方案:

create or replace function get_some_table_data(filter_date date)
returns setof some_table
as
$$
select *
from some_table
where date_col <= filter_date;
$$
language sql;

关于PostgreSQL:在where子句中使用函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254897/

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