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

関数からクエリを返しますか?

    CREATE OR REPLACE FUNCTION get_names(_tname varchar)
      RETURNS TABLE (col_a integer, col_b text) AS
    $func$
    BEGIN
       RETURN QUERY
       SELECT t.col_a, t.col_b  -- must match RETURNS TABLE
       FROM   mytable t
       WHERE  t.name = _tname;    
    END
    $func$  LANGUAGE plpgsql;
    

    このように電話してください:

    SELECT * FROM get_names('name')
    

    主なポイント:

    • RETURNS TABLEを使用する 、したがって、呼び出しごとに列名のリストを提供する必要はありません。

    • RETURN QUERYを使用する 、はるかに簡単です。

    • 同じ名前のOUTとの名前の競合を回避するために、列名をテーブル修飾します パラメータ(RETURNS TABLEで宣言された列を含む 。

    • ALIASの代わりに名前付き変数を使用する 。よりシンプルで、同じことを行うのが好ましい方法です。

    • このような単純な関数は、LANGUAGE sqlで記述することもできます。 :

    CREATE OR REPLACE FUNCTION get_names(_tname varchar)
      RETURNS TABLE (col_a integer, col_b text) AS
    $func$
    SELECT t.col_a, t.col_b  --, more columns - must match RETURNS above
    FROM   mytable t
    WHERE  t.name = $1;
    $func$ LANGUAGE sql;
    



    1. SQL Server Management Studio(SSMS)でのスタートアップ環境の構成-SQL Server/TSQLチュートリアルパート7

    2. TYPE_ID()を使用して、SQLServerのデータ型のIDを取得します

    3. SQL Serverで一重引用符をエスケープするにはどうすればよいですか?

    4. SELECTステートメントの2行間のMySQLの違い