2

クエリをパラメーターとして SQL 関数に渡す方法が見つからないようです。私の問題は、テーブル「my_employees1」が動的になる可能性があることです。

DROP FUNCTION function_test(text);
CREATE OR REPLACE FUNCTION function_test(text) RETURNS bigint AS '
    DECLARE ret bigint;
    BEGIN 
        SELECT count(mt.id) INTO ret
    FROM mytable as mt
    WHERE mt.location_id = 29671
    --and mt.employee_id in (SELECT id from my_employees1);
    --and mt.employee_id in ($1);
    $1;
    RETURN ret;
    END;
' LANGUAGE plpgsql;

select function_test('and mt.employee_id in (SELECT id from my_employees1)');
select function_test('SELECT id from my_employees1');
4

1 に答える 1

0

動的に構築する必要があります。

DROP FUNCTION function_test(text);
CREATE OR REPLACE FUNCTION function_test(text) RETURNS bigint AS $$
    DECLARE
        ret bigint;
    BEGIN
    execute(format($q$
        SELECT count(mt.id) INTO ret
        FROM mytable as mt
        WHERE mt.location_id = 29671
        %s; $q$, $1)
    );
    RETURN ret;
    END;
$$ LANGUAGE plpgsql;

$$とは$q$ドル相場です。内部識別子が異なる限り、それらをネストできます。引用符で囲まれていない引用符の使用を許可し、ネスト可能であるという明らかな利点に加えて、構文の強調表示も機能します。

于 2012-10-24T17:46:45.437 に答える