1

名前を指定して、任意のテーブルの内容を返す plpgsql 関数が必要です。以下の関数は、多くの理由で機能していませんが、一般的なアイデアを得ることができます. 安全性とコーディングの練習は別として、これを達成する最も簡単な方法は何ですか?

最後に、Java CallableStatement を介してこれらの結果を取得したいと考えています。

CREATE OR REPLACE FUNCTION get_table(tablename VARCHAR)
RETURNS SETOF RECORD AS $PROC$
BEGIN
    RETURN QUERY SELECT * FROM tablename;
END;
$PROC$ LANGUAGE 'plpgsql';
4

1 に答える 1

3

関数を次のように機能させることができます。

CREATE OR REPLACE FUNCTION get_table(tablename VARCHAR)
RETURNS SETOF RECORD AS $PROC$
BEGIN
    RETURN QUERY EXECUTE 'SELECT * FROM ' || quote_ident(tablename);
END;
$PROC$ LANGUAGE 'plpgsql';

これを呼び出すには、返されるすべての列の名前とデータ型を指定する必要があります。2 つの列を持つテーブル "t" を一覧表示する場合は、次のように関数を使用できます。

SELECT * FROM get_table('t') x(id int, val text);

もちろん、どちらよりも長く、多くの問題があります。

SELECT * FROM t;

または同等のもの:

TABLE t;

そのような機能が何かを改善するユースケースを本当に想像することはできません.

于 2012-05-10T17:58:15.283 に答える