PL/pgSQL 関数内で PostgreSQL の SQL 出力フォーマットを活用したいと思っていますが、その考えをあきらめなければならないと感じ始めています。
PL/pgSQL関数がありますquery_result
:
CREATE OR REPLACE FUNCTION query_result(
this_query text
) RETURNS SETOF record AS
$$
BEGIN
RETURN QUERY EXECUTE this_query;
END;
$$ LANGUAGE plpgsql;
SETOF
..入力テキスト クエリから喜んでレコードを返します。これを動的クエリを使用した SQL スクリプトに使用できます。
mydb=# SELECT * FROM query_result('SELECT ' || :MYVAR || ' FROM Alice') AS t (id int);
id
----
1
2
3
したがって、私の希望は、代わりに PL/pgSQL 関数内からこの同じきれいにフォーマットされた出力を提供する方法を見つけることでしたが、型をサポートしておらず、レコードからテキストへの魔法の定義済みキャストはありません(私は自分自身を作成できることを知っています.. )RAISE
SETOF
SETOF
CAST
ダミーprint_result
関数を作成すると:
CREATE OR REPLACE FUNCTION print_result(
this_query text
) RETURNS void AS
$$
BEGIN
SELECT query_result(this_query);
END;
$$ LANGUAGE plpgsql;
..書式設定された出力を印刷できません:
mydb=# SELECT print_result('SELECT ' || :MYVAR || ' FROM Alice');
ERROR: set-valued function called in context that cannot accept a set
...
提案をありがとうございます(PostgreSQL 8.4で動作することが望ましいです)。