Postgresql 如何在sql函数中从循环中获取数据
我需要从postgresql函数中以文本形式获取数据并以数组形式返回。我有一个剪辑媒体表与文件和每个剪辑id我想从媒体剪辑所有文件。我创建了如下函数: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
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;
$$