ホームページ >データベース >mysql チュートリアル >PL/pgSQLを使用してPostgreSQLで複数のフィールドを単一のレコードとして返す方法?

PL/pgSQLを使用してPostgreSQLで複数のフィールドを単一のレコードとして返す方法?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-04 05:54:37716ブラウズ

How to Return Multiple Fields as a Single Record in PostgreSQL using PL/pgSQL?

PL/pgSQL を使用して PostgreSQL のレコードとして複数のフィールドを返す

PL/pgSQL で、異なるフィールドから複数のフィールドを返す関数を作成する単一レコードとしてのテーブルは、RECORD タイプを使用して実現できます。方法は次のとおりです。

RECORD タイプ

返したいフィールドを定義する RECORD タイプを宣言します。例:

CREATE TYPE person AS (
  name text,
  age integer,
  city text
);

異なるテーブルのクエリ

PL/pgSQL 関数で、クエリを使用して異なるテーブルからフィールドを取得します。たとえば、ユーザー、住所、都市のテーブルがある場合は、次のように記述できます。

SELECT u.name, u.age, a.city
FROM users AS u
JOIN addresses AS a ON u.address_id = a.id
WHERE u.user_id = @user_id;

クエリ結果の保存

クエリ結果をレコード変数に保存する。 RECORD タイプを使用すると、列名によってフィールドにアクセスできます:

DECLARE result person;
SELECT u.name, u.age, a.city INTO result;

レコードを返す

最後に、結果レコードを返します:

RETURN result;

不規則な結果の処理

異なるテーブルから一貫性のない数の行を取得する場合は、coalesce() 関数を使用してフォールバック値を提供します。

SELECT
  coalesce(u.name, 'Unknown'),
  coalesce(u.age, 0),
  coalesce(a.city, 'N/A')
INTO result;

サブクエリを使用した例

データが返す必要がある場合は、単一のテーブルに個別の行として保存されます。 subquery:

CREATE FUNCTION get_two_users_from_school(schoolid int)
  RETURNS my_type AS $$
DECLARE
  result my_type;
BEGIN
  -- Select first two users from school
  SELECT id, name
  FROM user
  WHERE school_id = schoolid
  ORDER BY id
  LIMIT 2
  INTO result;
RETURN result;
END
$$ language plpgsql;

このアプローチにより、行を単一のレコード構造に「フラット化」できます。

以上がPL/pgSQLを使用してPostgreSQLで複数のフィールドを単一のレコードとして返す方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。