gpt4 book ai didi

sql - 在单个参数中传递多个值

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

我想通过在单个参数上传递多个值来调用函数,如下所示:

SELECT * FROM jobTitle('270,378');

这是我的功能。

CREATE OR REPLACE FUNCTION test(int)
RETURNS TABLE (job_id int, job_reference int, job_job_title text
, job_status text) AS
$$
BEGIN
RETURN QUERY
select jobs.id,jobs.reference, jobs.job_title,
ltrim(substring(jobs.status,3,char_length(jobs.status))) as status
FROM jobs ,company c
WHERE jobs."DeleteFlag" = '0'
and c.id= jobs.id and c.DeleteFlag = '0' and c.active = '1'
and (jobs.id = $1 or -1 = $1)
order by jobs.job_title;
END;
$$ LANGUAGE plpgsql;

有人可以帮助语法吗?或者甚至提供示例代码?

最佳答案

可变参数

@mu provided , VARIADIC是你的 friend 。一个更重要的细节:

还可以使用数组类型的VARIADIC 参数直接调用函数。在函数调用中加入关键字VARIADIC:

SELECT * FROM  f_test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);

相当于:

SELECT * FROM  f_test(1, 2, 3);

其他建议

在 Postgres 9.1 或更高版本中 right()使用 负数 长度可以更快更简单地从字符串中删除前导字符:

right(j.status, -2)

相当于:

substring(j.status, 3, char_length(jobs.status))

您的查询中有 j."DeleteFlag"j.DeleteFlag(没有双引号)。这可能是不正确的。见:

"DeleteFlag"= '0' 表示另一个问题。与其他 RDBMS 不同,Postgres 正确支持 boolean数据类型。如果标志包含 boolean 数据(true/false/NULL)使用 boolean 键入。 character type like text将是不合适的/低效的。

适当的功能

这里不需要 PL/pgSQL。您可以使用更简单的 SQL 函数:

CREATE OR REPLACE FUNCTION f_test(VARIADIC int[])
RETURNS TABLE (id int, reference int, job_title text, status text)
LANGUAGE sql AS
$func$
SELECT j.id, j.reference, j.job_title
, ltrim(right(j.status, -2)) AS status
FROM company c
JOIN job j USING (id)
WHERE c.active
AND NOT c.delete_flag
AND NOT j.delete_flag
AND (j.id = ANY($1) OR '{-1}'::int[] = $1)
ORDER BY j.job_title
$func$;

db<> fiddle here
<子>旧sqlfiddle

关于sql - 在单个参数中传递多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202832/

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