PL/pgSQL を使用して PostgreSQL のレコードとして複数のフィールドを返す
PL/pgSQL を使用する場合、複数のテーブルのフィールドを組み合わせたレコード。これは、Postgres の RECORD データ型を活用することで実現できます。
複数テーブルのフィールド取得に RECORD を使用する
異なるテーブルのフィールドを 1 つのレコードのフィールドとして返すには、次のようにします。 RECORD タイプ内の必要なフィールドを次のように定義します。
CREATE OR REPLACE FUNCTION get_object_fields(name text) RETURNS RECORD AS $$ BEGIN -- Retrieve required fields from various tables based on input name -- Return fields as a RECORD RETURN RECORD(f1, f2, f3, f4, f5, f6, f7, f8); END $$ LANGUAGE PL/pgSQL;
複数の結果行の処理
複数のフィールド値を持つ行を 1 つのレコードに「フラット化」する必要がある複雑なシナリオの場合、より複雑なアプローチが必要です。次のコードを考えてみましょう。
CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int) RETURNS my_type AS $$ DECLARE result my_type; temp_result user; BEGIN -- Fetch two rows for illustration SELECT id, name INTO temp_result FROM user WHERE school_id = schoolid LIMIT 2; -- Assign values to the RECORD fields using pseudocode (adjust indices for actual row counts) result.user1_id := temp_result[0].id; result.user1_name := temp_result[0].name; result.user2_id := temp_result[1].id; result.user2_name := temp_result[1].name; RETURN result; END $$ LANGUAGE PL/pgSQL;
レコード タイプの利点
RECORD タイプにはいくつかの利点があります。
以上がPL/pgSQL を使用して、異なる PostgreSQL テーブルから複数のフィールドを単一のレコードとして返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。