2

文字列に基づいて SQL ステートメントを実行したいと思います。文字列を返す関数を使用して SQL ステートメントを作成しました。返されたステートメントを実行する方法を誰か説明できますか? プレーンSQLではできないことはわかっているので、関数に入れようと考えていました。唯一の問題は、ステートメント内の列が常に同じであるとは限らないため、列に使用するデータ型がわからないことです。Postgres 9.1.0 を使用しています。

たとえば、関数から返された SQL 文字列が次のようになっているとします。

abcからopen、closed、discardedを選択

ただし、次のこともできます

または abcから開、閉を選択

これらの文字列を実行して、結果がステートメントにリストされた列のみを含むテーブルとして返されるようにするにはどうすればよいですか?

編集:関数は PL/pgSQL で記述されています。結果は、値のない列を表示したくないレポートに使用されます。したがって、私が作成した関数は、値を持つすべての列の名前を返し、それを SQL ステートメントに追加します。

ご協力いただきありがとうございます!

4

1 に答える 1

0

戻り値の型が不明であるため、関数から直接行を返すことはできないと思います。戻り値の型を として指定した場合でもRECORD、呼び出し時に返された列をリストする必要があります。ウェイン・コンラッドのアイデアに基づいて、これを行うことができます:

CREATE FUNCTION my_create(cmd TEXT) RETURNS VOID AS $$
    BEGIN
        EXECUTE 'CREATE TEMPORARY TABLE temp_result AS ' || cmd;
    END;
$$ VOLATILE LANGUAGE plpgsql;

次に、次のように関数を使用します。

BEGIN;
SELECT my_create(...);
SELECT * FROM temp_result;
ROLLBACK; -- or COMMIT
于 2014-07-15T12:55:34.377 に答える