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

Postgres関数がテーブルを返し、列にデータを返さない

    行タイプの代わりに個々の列を取得するには、次のコマンドを使用して関数を呼び出します。

    SELECT * FROM testfunction();
    

    テーブルからすべての列を選択するのと同じように。
    テスト関数のこのレビュー済みフォームも検討してください。

    CREATE OR REPLACE FUNCTION testfunction()
      RETURNS TABLE(a int, b int)
      LANGUAGE plpgsql AS
    $func$
    DECLARE
       _a int := 0;
       _b int := 0;
    BEGIN
       CREATE TABLE tempTable AS SELECT _a, _b;
       RETURN QUERY SELECT * FROM tempTable;
       DROP TABLE tempTable;
    END
    $func$;
    

    特に:

    DECLARE キーワードは一度だけ必要です。

    すでに(暗黙的に)OUTとして宣言されているパラメータを宣言することは避けてください RETURNS TABLE (...)のパラメータ 条項。

    Postgresでは引用符で囲まれていないCaMeLケース識別子を使用しないでください。これは機能し、引用符で囲まれていない識別子は小文字にキャストされますが、混乱を招くエラーが発生する可能性があります。参照:

    • PostgreSQLの列名では大文字と小文字が区別されますか?

    この例の一時テーブルは完全に役に立たない(おそらく過度に単純化されている)。与えられた例は要約すると:

    CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
      LANGUAGE plpgsql AS
    $func$
    BEGIN
       a := 0;
       b := 0;
    END
    $func$;
    


    1. 返されたUriからデータベースに挿入された新しいレコードのIDを取得します

    2. Hibernate> CLOB> Oracle :(

    3. PostgreSQLのPercona分布の監視-主要な指標

    4. PostgreSQL:一意性違反:7エラー:重複するキー値が一意性制約users_pkeyに違反しています