Heim >Datenbank >MySQL-Tutorial >Wie behebt man den PostgreSQL-Fehler 42601: „Für Funktionen, die „Datensatz' zurückgeben, ist eine Spaltendefinitionsliste erforderlich'?

Wie behebt man den PostgreSQL-Fehler 42601: „Für Funktionen, die „Datensatz' zurückgeben, ist eine Spaltendefinitionsliste erforderlich'?

DDD
DDDOriginal
2025-01-05 15:10:39247Durchsuche

How to Fix PostgreSQL Error 42601:

PostgreSQL: FEHLER: 42601: Eine Spaltendefinitionsliste ist für Funktionen erforderlich, die „Datensatz“ zurückgeben.

Der Fehler „eine Spalte „Definitionsliste ist für Funktionen erforderlich, die „Datensatz“ zurückgeben““ gibt an, dass einer Funktion, die für die Rückgabe eines Datensatzdatentyps definiert ist, in ihrer Rückgabe die Spaltennamen und Datentypen fehlen Stellungnahme. Um diesen Fehler zu beheben, geben Sie die Spaltendefinitionen in der RETURNING-Klausel an oder verwenden Sie RETURNS SETOF .

Wie im folgenden Code gezeigt, können Sie die Spaltennamen und Datentypen in der RETURNING-Klausel definieren:

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$;

Alternativ können Sie RETURNS SETOF um eine Reihe von Datensätzen zurückzugeben, wobei ist ein zusammengesetzter Typ, der die Struktur der zurückgegebenen Daten darstellt. Zum Beispiel:

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$;

Das obige ist der detaillierte Inhalt vonWie behebt man den PostgreSQL-Fehler 42601: „Für Funktionen, die „Datensatz' zurückgeben, ist eine Spaltendefinitionsliste erforderlich'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn