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

PL / pgSQL関数を使用して、複数の値を持つ列を任意のテーブルに動的に追加します

    私はこれをrefcursorで行いました 出力列リストを完全に動的にする場合:

    CREATE OR REPLACE FUNCTION is_record_exists(tablename character varying, columns character varying[], keepcolumns character varying[] DEFAULT NULL::character varying[])
        RETURNS SETOF refcursor AS
    $BODY$
    
    DECLARE 
        ref refcursor;
        keepColumnsList text;
        columnsList text; 
        valuesList text;
        existQuery text;
        keepQuery text;
    BEGIN
        IF keepcolumns IS NOT NULL AND array_length(keepColumns, 1) > 0 THEN
            keepColumnsList :=  array_to_string(keepColumns, ', ');
        ELSE
            keepColumnsList :=  'COUNT(*)';
        END IF;
    
        columnsList := (SELECT array_to_string(array_agg(name || ' = ' || value), ' OR ') FROM
            (SELECT unnest(columns[1:1]) AS name, unnest(columns[2:2]) AS value) pair);
    
        existQuery := 'SELECT ' || keepColumnsList || ' FROM ' || tableName || ' WHERE ' || columnsList;
        RAISE NOTICE 'Exist query: %', existQuery;
    
        OPEN ref FOR EXECUTE
            existQuery;
        RETURN next ref;
    END;$BODY$
      LANGUAGE plpgsql;
    

    次に、FETCH ALL INを呼び出す必要があります 結果を得るために。詳細な構文こちら またはそこに: https://stackoverflow.com/a/12483222/630169 。今のところそれが唯一の方法のようです。 PROCEDURESを使用してPostgreSQL11で何かが変更されることを願っています。




    1. LaravelでのJSON検索

    2. pg-promise挿入ヘルパーを使用してエイリアスとしてテーブル名に挿入する方法は?

    3. 次のシナリオでdb関係(pk / fk)を維持する方法はありますか?

    4. GoogleクラウドストレージSQLインスタンスにログインできません