错误“a 列”返回“record”的函数需要定义列表”表示定义为返回记录数据类型的函数在其返回中缺少列名和数据类型 陈述。要解决此错误,请在 RETURNING 子句中指定列定义或使用 RETURNS SETOF
如以下代码所示,您可以在 RETURNING 子句中定义列名称和数据类型:
CREATE OR REPLACE FUNCTION get_user_by_username(_username text , _online bool DEFAULT false) RETURNS TABLE ( user_id int , user_name varchar , last_activity timestamptz ) LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp -- ts with time zone WHERE u.user_name = _username RETURNING u.user_id , u.user_name , u.last_activity; ELSE RETURN QUERY SELECT u.user_id , u.user_name , u.last_activity FROM users u WHERE u.user_name = _username; END IF; END $func$;
或者,您可以使用 RETURNS SETOF
CREATE OR REPLACE FUNCTION get_user_by_username3(_username text , _online bool DEFAULT false) RETURNS TABLE ( users_row users , custom_addition text ) LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp -- ts with time zone WHERE u.user_name = _username RETURNING u -- whole row , u.user_name || u.user_id; ELSE RETURN QUERY SELECT u, u.user_name || u.user_id FROM users u WHERE u.user_name = _username; END IF; END $func$;
以上是如何修复 PostgreSQL 错误 42601:'返回'记录”的函数需要列定义列表”?的详细内容。更多信息请关注PHP中文网其他相关文章!