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

関数から返されたテーブルから個々の列を取得するにはどうすればよいですか?

    関数から返される行を分解するには、他のテーブルと同じように扱います。

    SELECT * FROM karta_pacjenta('foo45678901');

    行のセットを返す関数は、「テーブル関数」とも呼ばれます。

    それを除けば、あなたが提示したものは機能しません。

    CREATE  FUNCTION karta_pacjenta(_pe varchar)
      RETURNS TABLE(data DATE, imie TEXT, nazwisko TEXT
                  , diagnoza TEXT,przepisany lek TEXT)  AS
    $func$
    SELECT w.dzien, p.imie, p.nazwisko, ch.nazwa, l.nazwa
    FROM   pacjenci  p
    JOIN   diagnozy  d  USING (pesel) -- shorthand if columns are unambiguous
    JOIN   wizyty    w  USING (pesel)
    JOIN   choroby   ch ON ch.kod_choroby = d.kod_choroby
    JOIN   recepty   r  ON r.nr_wizyty = w.nr_wizyty
    JOIN   leki      l  ON l.kod_leku = r.kod_leku 
    WHERE  p.pesel = _pe
    $func$ LANGUAGE sql;
    
    • 列名の単一引用符は構文エラーです。二重引用符で囲む必要があります。ただし、引用符で囲まれていない、合法的な小文字の名前を常に使用することをお勧めします。

    • 言語名は引用しないでください。識別子です。

    残りはオプションですが、お勧めします。

    • 単純なSQL関数がここで機能します。

    • 明示的なJOIN構文を使用します。同じ結果ですが、保守がはるかに簡単です。

    • varchar(11)を使用するのはおそらく無意味です varcharだけでなく またはtext パラメータタイプとして。 (コーナーケースの例外が適用されます。)

    • ドル引用符を使用します。これはここでは完全にオプションですが、関数本体を引用するには一般的に適切なスタイルです。遅かれ早かれ、本文に一重引用符を含めることをお勧めします。




    1. RPostgreSQL-AmazonRedshiftへのR接続-より大きなデータセットを書き込む/投稿する方法

    2. SQLServerの列で数値以外の値を検索する

    3. ClusterControl 1.7.5の発表:PostgreSQL12およびMongoDB4.2の高度なクラスターメンテナンスとサポート

    4. MySQL-複数の結果セット