0
私は、与えられた条件に基づいて別のテーブルからレコードを返すために、関数を に持っています。PostgreSQL 9.5:動的列のリストを返す
機能:udf_dynamic_returns
CREATE OR REPLACE FUNCTION udf_dynamic_returns
(
condition_name varchar(10)
)
RETURNS ????
AS
$BODY$
BEGIN
IF condition_name = 'A'
THEN
SELECT col1,col2,col3
FROM Test
ELSE IF condition_name = 'B'
THEN
SELECT col21col22,col23,col24,col25
FROM Kon
ELSE IF condition_name = 'C'
THEN
SELECT col31,col32
FROM Mat
ELSE IF condition_name = 'D'
THEN
SELECT col4,col5,col6,col7,col8,col9
FROM Test
......
......
END IF
END;
$BODY$
LANGUAGE PLPGSQL;
注:私は関数内でチェックするには多くの条件があります。
検索すると、私は約Polymorphic Typesを知りました。しかし、私はそれほど多くを作成することは本当に良い考えだとは思わないComposite types
。
落札のコメントの理由を述べます。 – MAK
['declare cursor'](https://www.postgresql.org/docs/current/static/sql-declare.html)、[' prepare'](https://www.postgresql.org/)を見てください。 docs/current/static/sql-prepare.html)、['create temp view'](https://www.postgresql.org/docs/current/static/sql-createview.html)、[' plpgsql refcursors'] (https://www.postgresql.org/docs/current/static/plpgsql-cursors.html) – Abelisto
@Abelistoのヒントには、カーソルの回避策がありますが、間違ったデザインのシグナルです - PL関数は既知の安定型のスカラー、配列、またはテーブルを返します。 PLpgSQL(PostgreSQL)はかなり静的です。動的言語やMSSQLのパターンは現実的ではなく、ここで利用できます。コンパイラのようなPostgresについては、PLpgSQLについて考えてみてください。たぶん、あなたのデザインは若干の再考が必要かもしれません。 –