创建返回记录而不提供记录的函数时会发生此错误列定义列表。本文将解释该问题并提供解决该错误的解决方案。
在 PostgreSQL 中,返回记录的函数需要一个列定义列表,明确指定列的名称和数据类型返回的记录中。但是,问题中提供的代码尝试在不定义列的情况下返回记录,从而导致错误“需要列定义列表”。
要解决该错误,您需要为函数的返回类型提供列定义列表。这可以使用 RETURNS 关键字来完成。例如,以下是该函数的更正版本:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS TABLE ( user_id int, user_name varchar(250), last_activity timestamptz ) AS $$ BEGIN IF online THEN UPDATE users SET last_activity = current_timestamp WHERE user_name = username; END IF; RETURN QUERY SELECT user_id, user_name, last_activity FROM users WHERE user_name = username LIMIT 1; END; $$ LANGUAGE plpgsql;
在此代码中,RETURNS TABLE 语句指定函数要返回的记录的列名称和数据类型。
或者,您可以通过返回现有表的整行或多行来避免使用列定义列表。例如:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS SETOF users AS $$ BEGIN IF online THEN RETURN QUERY UPDATE users SET last_activity = current_timestamp WHERE user_name = username RETURNING *; ELSE RETURN QUERY SELECT * FROM users WHERE user_name = username; END IF; END; $$ LANGUAGE plpgsql;
在这种情况下,RETURNS SETOF users 语句指示该函数将返回 users 表的一组行,该表已经具有必要的列定义。
确保列定义与实际表结构匹配,以避免错误或意外行为。
以上是PostgreSQL 错误 42601:如何正确定义返回记录的函数的返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!