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

PostgreSQLの関数からテーブルタイプを返す

    あなたの関数はたくさんやっています 空の仕事の。

    FORで簡略化できます 面倒で高価な明示カーソルではなく、暗黙カーソルを使用してループします。
    よく見ると、これはまったく必要ありません。 大幅に簡素化 簡単なクエリで。 SQL関数にラップしました:

    CREATE OR REPLACE FUNCTION ccdb.fn_email_details_auto()
      RETURNS TABLE (code integer, area smallint, action smallint, flag smallint
                   , ucount integer, view_cnt integer) AS
    $func$
    
    SELECT u.section_code, u.ddu_area, u.ddu_action, u.status_flag
         , u.ccdb_ucount, u.ccdb_view_cnt
    FROM   ccdb.update_qtable u
    WHERE  u.entry_time >= now()::date - 1
    AND    u.entry_time <  now()::date        -- sargable!
    ORDER  BY u.section_code, u.ddu_area, u.ddu_action;
    
    $func$  LANGUAGE sql;
    

    多くである必要があります 同じものを返す間、より速くなります。
    また、これを使用してください:

    WHERE  u.entry_time >= now()::date - 1
    AND    u.entry_time <  now()::date
    

    代わりに:

    WHERE entry_time::date = now()::date - interval '1 day'

    別の方法は引数可能であり、entry_timeでプレーンインデックスを使用できます 、これはパフォーマンスにとって非常に重要です。



    1. 1つのMySQLテーブルを別のMySQLテーブルの値で更新します

    2. mysqlで次の自動インクリメントIDを取得する方法

    3. LOAD_FILE()がMariaDBでどのように機能するか

    4. SQLで2つの列でグループ化する方法