Maison >base de données >tutoriel mysql >Erreur PostgreSQL 42601 : Comment définir correctement les types de retour pour les fonctions renvoyant des enregistrements ?
Cette erreur se produit lors de la création d'une fonction qui renvoie un enregistrement sans fournir de liste de définitions de colonnes. Cet article expliquera le problème et fournira une solution pour résoudre l'erreur.
Dans PostgreSQL, les fonctions qui renvoient des enregistrements nécessitent une liste de définitions de colonnes spécifiant explicitement les noms et les types de données des colonnes. dans le dossier retourné. Cependant, le code fourni dans la question tente de renvoyer un enregistrement sans définir les colonnes, ce qui entraîne l'erreur « La liste de définitions de colonnes est requise. »
Pour résoudre l'erreur, vous devez pour fournir une liste de définitions de colonnes pour le type de retour de la fonction. Cela peut être fait en utilisant le mot-clé RETURNS. Par exemple, voici une version corrigée de la fonction :
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;
Dans ce code, l'instruction RETURNS TABLE spécifie les noms de colonnes et les types de données de l'enregistrement à renvoyer par la fonction.
Vous pouvez également éviter d'utiliser une liste de définitions de colonnes en renvoyant une ou plusieurs lignes entières d'une table existante. Par exemple :
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;
Dans ce cas, l'instruction RETURNS SETOF users indique que la fonction renverra un ensemble de lignes de la table users, qui possède déjà les définitions de colonnes nécessaires.
Assurez-vous que les définitions de colonnes correspondent à la structure réelle de la table pour éviter les erreurs ou les comportements inattendus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!