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

関数内の動的な列数をどのように返しますか?

    これは、RECORDが関数を返す場合に可能です。

    CREATE FUNCTION calculation(how_many integer) RETURNS SETOF RECORD
    LANGUAGE plpgsql
    AS $fff$
    BEGIN
        IF how_many = 1
            THEN RETURN QUERY SELECT 'foo'::text;
        ELSIF how_many = 2
            THEN RETURN QUERY SELECT 'foo'::text, 'bar'::text;
        END IF;
    END;
    $fff$
    ;
    

    そして今、あなたはできる:

    jbet=> SELECT * FROM calculation(1) AS f(first_col text);
     first_col
    -----------
     foo
    (1 row)
    
    jbet=> SELECT * FROM calculation(2) AS f(first_col text, second_col text);
     first_col | second_col
    -----------+------------
     foo       | bar
    (1 row)
    

    非常に深刻 欠点は、関数を呼び出すたびに、返される列のセットを定義する必要があることです。そのため、この回答が役に立たないと思います:)

    とにかく、Postgresqlは前に各SELECTの返されたタイプを知る必要があります クエリを実行するため、いずれかの方法で列を定義する必要があります。

    データが必要で、個別の列があるかどうかを気にしない場合は、JSONの戻り値が妥当な答えになる可能性があります。



    1. 機密データをSilverstripe3.1に保存する

    2. json、jsonb、hstore、xml、enum、ipaddrなどの保存は、列xがタイプjsonで失敗しますが、式はタイプ文字が異なります

    3. CodeIgniterPDOデータベースドライバーが機能しない

    4. PostgreSQLデータベースの10進フィールドのポイントの代わりにコンマを格納することは可能ですか?