Postgresql 如何在sql函数中从循环中获取数据

Postgresql 如何在sql函数中从循环中获取数据,postgresql,Postgresql,我需要从postgresql函数中以文本形式获取数据并以数组形式返回。我有一个剪辑媒体表与文件和每个剪辑id我想从媒体剪辑所有文件。我创建了如下函数: CREATE OR REPLACE FUNCTION clips_media_array(INT) RETURNS text[] AS $$ DECLARE r clips_media%ROWTYPE; t text[]; BEGIN FOR r IN SELECT file_name FROM cli

我需要从postgresql函数中以文本形式获取数据并以数组形式返回。我有一个剪辑媒体表与文件和每个剪辑id我想从媒体剪辑所有文件。我创建了如下函数:

CREATE OR REPLACE FUNCTION clips_media_array(INT)
RETURNS text[] AS $$
  DECLARE
    r clips_media%ROWTYPE;
    t text[];
  BEGIN
  FOR r IN
    SELECT file_name
    FROM clips_media WHERE id_clips = $1 AND file_type = 2
  LOOP
    t := t.file_name;
  END LOOP;

  END;
$$
LANGUAGE plpgsql;
我有一个错误: 错误:整数bfeO4RbZ5R1CUT8.jpg的输入语法无效 上下文:PL/pgSQL函数剪辑\u媒体\u阵列整数第6行,用于超选行


有人能帮我吗?

你把事情弄得太复杂了

您不需要循环,甚至不需要PL/pgSQL函数

您可以通过一个SQL查询将其放入一个简单的SQL函数中:

CREATE OR REPLACE FUNCTION clips_media_array(INT)
RETURNS text[] AS 
$$
  SELECT array_agg(file_name)
  FROM clips_media 
  WHERE id_clips = $1 
    AND file_type = 2;
$$
LANGUAGE sql;
当然,您可以在代码中直接使用SQL查询,而无需函数的开销

如果希望使用PL/pgSQL函数,则需要在循环内从游标变量中提取值:

以下代码错误:

LOOP
   t := t.file_name;
END LOOP;
应该是:

LOOP
  t := t || R.file_name;
END LOOP;
最后,您缺少一条返回语句:

  LOOP
    t := t || r.file_name;
  END LOOP;
  return t; --<< required to return something from a PL/pgSQL function
END;
$$

您的代码与错误消息不匹配代码中没有结束。但是你不需要一个循环,也不需要一个函数。一个简单的选择数组\u aggfile\u名称从剪辑\u媒体,其中。。。就行了
  LOOP
    t := t || r.file_name;
  END LOOP;
  return t; --<< required to return something from a PL/pgSQL function
END;
$$