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

postgreSQLで変数を使用してリターンタイプを指定しないことは可能ですか?

    匿名コードブロック(DO コマンド)は行を返すことができず、Postgresにはグローバル変数がありません。それなしで生きる方法はいくつかあります。そのうちの4つは次のとおりです。

    共通テーブル式を使用する(WITH コマンド)

    WITH def AS (
        SELECT 3 AS colorid
        )
    SELECT *, substring(name,1,3) 
    FROM products
    JOIN def
    USING (colorid);
    

    変数に一時テーブルを使用する:

    CREATE TEMP TABLE var(colorid int);
    INSERT INTO var values (3);
    SELECT *, substring(name,1,3) 
    FROM products
    JOIN var
    USING (colorid);
    DROP TABLE var;
    

    結果には一時テーブルを使用します:

    DO $$
    DECLARE v_colorid INT;
    BEGIN
        v_colorid := 3;
        CREATE TEMP TABLE res AS 
            SELECT *, substring(name,1,3) 
            FROM products
            WHERE colorid = v_colorid;
    END $$;
    SELECT * 
    FROM res;
    DROP TABLE res;
    

    関数を作成する(例):

    CREATE OR REPLACE FUNCTION select_from_products()
    RETURNS TABLE (colorid int, name text, abbr text)
    LANGUAGE plpgsql as $$
    DECLARE v_colorid INT;
    BEGIN
        v_colorid := 3;
        RETURN QUERY
            SELECT *, substring(p.name,1,3) 
            FROM products p
            WHERE p.colorid = v_colorid;
    END $$;
    
    SELECT * FROM select_from_products();
    



    1. あるデータベースから別のデータベースにデータを転送する

    2. SQLite Sum()とTotal():違いは何ですか?

    3. SQL Serverプロファイラーに相当するPostgreSQLはありますか?

    4. GUIを使用してMySQLWorkbenchでサーバーステータスを確認する方法