首页 > 数据库 > mysql教程 > 如何修复 PostgreSQL 错误 42601:'返回'记录”的函数需要列定义列表”?

如何修复 PostgreSQL 错误 42601:'返回'记录”的函数需要列定义列表”?

DDD
发布: 2025-01-05 15:10:39
原创
278 人浏览过

How to Fix PostgreSQL Error 42601:

PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表

错误“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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板