>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL 오류 42601 수정 방법: ''레코드'를 반환하는 함수에는 열 정의 목록이 필요합니다'?

PostgreSQL 오류 42601 수정 방법: ''레코드'를 반환하는 함수에는 열 정의 목록이 필요합니다'?

DDD
DDD원래의
2025-01-05 15:10:39221검색

How to Fix PostgreSQL Error 42601:

PostgreSQL: 오류: 42601: "레코드"를 반환하는 함수에는 열 정의 목록이 필요합니다

"열" 오류 "레코드"를 반환하는 함수에는 정의 목록이 필요합니다."는 레코드 데이터 유형을 반환하도록 정의된 함수에 열 이름과 데이터 유형이 누락되었음을 나타냅니다. 반환 문에서. 이 오류를 해결하려면 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으로 문의하세요.