ホームページ >データベース >mysql チュートリアル >PostgreSQL エラー 42601: レコードを返す関数の戻り値の型を正しく定義するにはどうすればよいですか?
このエラーは、レコードを提供せずにレコードを返す関数を作成するときに発生します。列定義リスト。この記事では、この問題について説明し、エラーを解決する解決策を示します。
PostgreSQL では、レコードを返す関数には、列の名前とデータ型を明示的に指定する列定義リストが必要です。返された記録にあります。ただし、質問で提供されているコードは列を定義せずにレコードを返そうとするため、「列定義リストが必要です」というエラーが発生します。
エラーを解決するには、次のことが必要です。関数の戻り値の型の列定義リストを提供します。これは RETURNS キーワードを使用して実行できます。たとえば、関数の修正バージョンは次のとおりです。
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;
このコードでは、RETURNS TABLE ステートメントは、関数によって返されるレコードの列名とデータ型を指定します。
あるいは、既存のテーブルの 1 つまたは複数の行全体を返すことで、列定義リストの使用を回避できます。例:
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;
この場合、RETURNS SETOF users ステートメントは、関数が必要な列定義をすでに備えている users テーブルの行のセットを返すことを示します。
エラーや予期しない動作を避けるために、列の定義が実際のテーブル構造と一致していることを確認してください。
以上がPostgreSQL エラー 42601: レコードを返す関数の戻り値の型を正しく定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。