Maison >base de données >tutoriel mysql >Comment corriger l'erreur PostgreSQL 42601 : « une liste de définitions de colonnes est requise pour les fonctions renvoyant « enregistrement » » ?
L'erreur "une colonne une liste de définitions est requise pour les fonctions renvoyant « enregistrement » » indique qu'une fonction définie pour renvoyer un type de données d'enregistrement ne contient pas les noms de colonnes et les types de données dans sa déclaration de retour. Pour résoudre cette erreur, spécifiez les définitions de colonnes dans la clause RETURNING ou utilisez RETURNS SETOF
Comme démontré dans le code suivant, vous pouvez définir les noms de colonnes et les types de données dans la clause 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$;
Vous pouvez également utiliser 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$;
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!