私はテーブルmoredataに参加したい共通の状況があります。最も単純な例を与えるために、私が持っている想像:moredata
は同じままながらテーブルを入力としてPostgreSQL関数? plpgsql関数の動的SQLは行く方法ですか?
SELECT *
FROM x
JOIN moredata d on x.yyyymmdd = d.yyyymmdd
x
が異なります。 コードを再利用するための良い方法はありますか?上記を自動化して、異なるテーブルに適用できるようにしてください(例えば、 'x'の代わりに 'y'テーブルで同じことをします)?
表の名前で動作する動的SQLを使用してplpgsql関数を作成する方法もあります。ような何か:
CREATE FUNCTION joinmoredata(tblname text) RETURNS TABLE(...) AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT * FROM %I JOIN moredata on ...', tblname);
END;
$$ LANGUAGE plpgsql;
しかし、その後、あなたは、派生テーブルまたはCTEにそれを適用できませんでした。より良い方法がありますか?または、動的SQLは、この状況でコードを再利用する最良の方法ですか?
(注、実際のクエリは、私は、コードを再利用したい理由であるSELECT * FROM x JOIN moredata d on x.yyyymmdd = d.yyyymmdd
よりも多く複雑です。)
関数の戻り値は何ですか? –
'xは変化するでしょう '..どのくらい正確に?各テーブルに同じ列がありますか? (タイプ、名前、番号)?戻り値の型 'RETURNS TABLE(...)'も変わるでしょうか? –
@ErwinBrandstetter 'x'は、毎回同じカラムを持ち、関数が返すテーブルが毎回同じカラムを持つように標準化することができます。 –