PostgreSQL-使用SELECT创建循环
我有以下要实现的存储过程逻辑:PostgreSQL-使用SELECT创建循环,sql,postgresql,stored-procedures,Sql,Postgresql,Stored Procedures,我有以下要实现的存储过程逻辑: 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
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;
创建或替换函数get_数组(ArrayNumber整数[])
将表(名称文本)返回为$$
声明
索引整数:=0
开始
FOREACH索引<数组数
环
从employee as e中选择e.name作为empname
其中e.id=数组编号[索引]
限制1
name.push(empname)
端环;
返回名称;
结束;
$$
语言PLPGSQL;
我们的目标是根据数组参数的长度进行循环,参数的每个索引都是检索记录并将其推送到变量并将变量作为表返回的条件
在PostgreSQL存储过程中编写它的正确方法是什么?我不清楚结果应该是什么,但据我所知,您不需要循环或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返回一行。由于函数声明为返回table
,因此无需将值收集到单个变量中(您没有首先声明该变量)您希望不存在的push()
方法做什么?Hi@a_horse_,带有\u no\u名称我想附加SELECT的结果(这是一条记录)每个循环中的一个变量。但是您将函数声明为“返回表”,那么为什么要将所有内容附加到单个(不存在的)变量?我将尝试实现这个答案。如果这个答案解决了问题,我将指出这是正确的答案。