【问题标题】:PostgreSQL - Creating a loop with a SELECTPostgreSQL - 使用 SELECT 创建循环
【发布时间】:2018-08-15 14:16:36
【问题描述】:

我有这些存储过程逻辑要实现:

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存储过程中正确的写法是什么?

【问题讨论】:

  • 您希望不存在的push() 方法做什么?
  • 嗨 @a_horse_with_no_name 我想在每个循环中将 SELECT 的结果(这是一条记录)附加到一个变量中。
  • 但是您将函数声明为 returns table 那么为什么要将所有内容附加到单个(不存在的)变量中?

标签: sql postgresql stored-procedures


【解决方案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;

这将为雇员表中存在的arraynumbers 中的每个ID 返回一行。由于函数被声明为returns table,因此无需将值收集到单个变量中(您一开始没有声明)

【讨论】:

  • 我会尝试实现这个答案。如果这个答案解决了问题,我会指出这是正确的答案。
猜你喜欢
  • 2016-03-10
  • 1970-01-01
  • 2021-09-08
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2021-10-08
  • 2018-03-17
相关资源
最近更新 更多