我有以下要实现的存储过程逻辑:
CREATE OR REPLACE FUNCTION get_array(arraynumbers integer[])
RETURNS TABLE (name text) AS $$
DECLARE
index integer := 0
BEGIN
FOREACH index < arraynumbers
LOOP
SELECT e.name as empname FROM employee as e
WHERE e.id = arraynumbers[index]
LIMIT 1
name.push(empname)
ENDLOOP;
RETURN name;
END;
$$
LANGUAGE PLPGSQL;
目标是根据数组参数的长度进行循环,并且参数的每个索引将成为检索记录并将其压入变量并将变量作为表返回的条件。
在PostgreSQL存储过程中编写它的正确方法是什么?
答案 0 :(得分:1)
目前尚不清楚结果应该是什么,但是据我所知,您不需要循环或PL / pgSQL函数:
CREATE OR REPLACE FUNCTION get_array(arraynumbers integer[])
RETURNS TABLE (name text)
AS
$$
SELECT e.name
FROM employee as e
WHERE e.id = any(arraynumbers);
$$
LANGUAGE SQL;
这将为employee表中存在的arraynumbers
中的每个ID返回一行。由于该函数被声明为returns table
,因此无需将值收集到一个变量中(您并未声明该变量始于此)