如何修复我的 postgres 函数语法以适应用户参数
How to fix my postgres function syntax to fit a user parameter
我正在尝试制作一个 postgreql 函数,当我传递一个接受参数的 select 语句时,我对使用哪种语法格式有点困惑(这个参数可以是一个字符串或字符串列表)
这是我之前使用的原始 select 查询,placeholders
作为我的参数。这个 select 对我来说非常有用!
SELECT DISTINCT ON (symbol) symbol,
next_dividend_date, ex_dividend_date
FROM api.security_stats
WHERE api.security_stats.symbol
IN ({placeholders})
ORDER BY symbol, date desc;
问题是当我尝试将上面的转换为可用函数时,用户可以在其中输入函数的参数。但是我无法使用语法。另外,psql documentation 中有很多函数的语法示例。我不确定我的情况应该使用哪一个?
CREATE FUNCTION dividend(stocks char)
RETURNS TABLE(symbol char, next_dividend_date date, ex_dividend_date date) AS $$
SELECT DISTINCT ON (symbol) symbol, next_dividend_date, ex_dividend_date
FROM api.security_stats
WHERE api.security_stats.symbol
IN ({stocks}) ORDER BY symbol, date desc)
$$ LANGUAGE SQL;
我正在尝试允许用户客户端输入参数 stocks
。
感谢您的帮助!
我想你想要这样的东西:
create function dividend(p_stocks char)
returns table(symbol char, next_dividend_date date, ex_dividend_date date)
as $$
select distinct on (symbol) symbol, next_dividend_date, ex_dividend_date
from api.security_stats
where api.security_stats.symbol = any(string_to_array(, ','))
order by symbol, date desc
$$ language sql;
那是 table-返回 SQL 函数;您可以使用位置符号 </code>.</p> 来引用输入参数
<p>在你的问题的两行之间,我知道参数是一个逗号分隔的字符串,所以我添加了一个额外的步骤来将它解析为一个数组,然后可以使用运算符 <code>any
进行搜索。
或者,如果您想将输入作为数组传递:
create function dividend(p_stocks text[])
returns table(symbol char, next_dividend_date date, ex_dividend_date date)
as $$
select distinct on (symbol) symbol, next_dividend_date, ex_dividend_date
from api.security_stats
where api.security_stats.symbol = any()
order by symbol, date desc
$$ language sql;
我正在尝试制作一个 postgreql 函数,当我传递一个接受参数的 select 语句时,我对使用哪种语法格式有点困惑(这个参数可以是一个字符串或字符串列表)
这是我之前使用的原始 select 查询,placeholders
作为我的参数。这个 select 对我来说非常有用!
SELECT DISTINCT ON (symbol) symbol,
next_dividend_date, ex_dividend_date
FROM api.security_stats
WHERE api.security_stats.symbol
IN ({placeholders})
ORDER BY symbol, date desc;
问题是当我尝试将上面的转换为可用函数时,用户可以在其中输入函数的参数。但是我无法使用语法。另外,psql documentation 中有很多函数的语法示例。我不确定我的情况应该使用哪一个?
CREATE FUNCTION dividend(stocks char)
RETURNS TABLE(symbol char, next_dividend_date date, ex_dividend_date date) AS $$
SELECT DISTINCT ON (symbol) symbol, next_dividend_date, ex_dividend_date
FROM api.security_stats
WHERE api.security_stats.symbol
IN ({stocks}) ORDER BY symbol, date desc)
$$ LANGUAGE SQL;
我正在尝试允许用户客户端输入参数 stocks
。
感谢您的帮助!
我想你想要这样的东西:
create function dividend(p_stocks char)
returns table(symbol char, next_dividend_date date, ex_dividend_date date)
as $$
select distinct on (symbol) symbol, next_dividend_date, ex_dividend_date
from api.security_stats
where api.security_stats.symbol = any(string_to_array(, ','))
order by symbol, date desc
$$ language sql;
那是 table-返回 SQL 函数;您可以使用位置符号 </code>.</p> 来引用输入参数
<p>在你的问题的两行之间,我知道参数是一个逗号分隔的字符串,所以我添加了一个额外的步骤来将它解析为一个数组,然后可以使用运算符 <code>any
进行搜索。
或者,如果您想将输入作为数组传递:
create function dividend(p_stocks text[])
returns table(symbol char, next_dividend_date date, ex_dividend_date date)
as $$
select distinct on (symbol) symbol, next_dividend_date, ex_dividend_date
from api.security_stats
where api.security_stats.symbol = any()
order by symbol, date desc
$$ language sql;