ホームページ >データベース >mysql チュートリアル >PostgreSQL エラー 42601:「「レコード」を返す関数には列定義リストが必要です」を修正する方法?
エラー「列」 「レコード」を返す関数には定義リストが必要です。」は、レコード データ型を返すように定義された関数に列名が欠落していることを示します。 return ステートメント内のデータ型。このエラーを解決するには、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 中国語 Web サイトの他の関連記事を参照してください。