sql >> データベース >  >> RDS >> PostgreSQL

PL / pgSQL関数から複数の行を返す方法は?

    バグを修正した後、@Pavelが指摘しました返品タイプも定義します 適切に、またはすべての呼び出しで列定義リストを提供する必要があります。

    この呼び出し:

    SELECT * FROM get_object_fields()
    

    ...Postgresが*を展開する方法を知っていることを前提としています 。匿名のレコードを返すため、例外が発生します:

    ERROR:  a column definition list is required for functions returning "record"
    

    これを修正する(いくつかの)1つの方法は、RETURNS TABLEを使用することです。 (Postgres 8.4以降):

    CREATE OR REPLACE FUNCTION get_object_fields()
      RETURNS TABLE (department_id int) AS 
    $func$
    BEGIN
       RETURN QUERY
       SELECT department_id
       FROM   fact_department_daily 
       WHERE  report_date = '2013-06-07';
    END
    $func$ LANGUAGE plpgsql;

    SQL関数でも同じように機能します。

    関連:



    1. SQL:行を列に置き換える

    2. PostgreSQLで一連の日付を生成するための仮想テーブルを生成するにはどうすればよいですか?

    3. SQL Serverセッションで自動コミットをどのように設定しますか?

    4. MySQL-GROUPBYはページの速度を落とします