PL/pgSQL で異なるテーブルから複数のフィールドを 1 つのレコードとして返すには、次のカスタム レコードを構築する必要があります。希望のフィールド構成。これを実現する方法は次のとおりです:
CREATE TYPE ステートメントを使用してレコード タイプを定義し、フィールドとそのデータ型を指定します:
CREATE TYPE my_record_type AS ( field1 text, field2 integer, field3 boolean );
SP では、DECLARE ステートメントを使用してレコード型の変数を宣言し、フィールドに値を設定します。
DECLARE result my_record_type; BEGIN SELECT field1, field2, field3 INTO result FROM table1; -- Retrieve and populate additional fields from other tables RETURN result; END
テーブルから複数の行を取得し、それらを 1 つのレコードに集約するには、サブクエリの使用を検討してください。たとえば、ユーザー テーブルから行を取得して平坦化するには:
DECLARE result my_record_type; BEGIN SELECT id, name FROM ( SELECT id, name FROM user WHERE school_id = InputSchoolId LIMIT 2 ) AS subquery INTO result; RETURN result; END
関数を定義した後、関数を呼び出してレコードを取得します:
SELECT get_object_fields('name') AS record_output;
結果は、指定されたフィールドのフィールドを含むレコードになります。 tables.
多態性の結果に CREATE TYPE を使用することは推奨されませんが、柔軟性を高めるために RECORD タイプを活用できます。例:
CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$ DECLARE result RECORD; BEGIN IF LENGTH(a) < LENGTH(b) THEN result = (TRUE, (a || b)::text, 'a shorter than b'::text); ELSE result = (FALSE, (b || a)::text, NULL::text); END IF; RETURN result; END;$$ LANGUAGE plpgsql;
これにより、さまざまな数の列を持つレコードを返すことができます。
以上がPL/pgSQL を使用して複数の PostgreSQL テーブルからレコード フィールドを取得して結合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。