2012-03-22 10 views
0

レコードタイプをパラメータとして使用したいが、レコードタイプのパラメータを持つことができないというメッセージが表示される。私はArraylistパラメータを渡してさまざまな操作を実行するDao関数を持っており、ストアドプロシージャで実装する必要があります。だから、どんな援助も大歓迎です。ありがとう!私は新しいPostgreSQLのを使用していますが、前に保存された機能を使用していたが、決してレコードタイプのパラメータを使用する必要がないストアドファンクションのパラメータとしてレコードを使用する方法

CREATE OR REPLACE FUNCTION est_fn_get_emp_report(rec record,...) 

:何かのように探し 機能mがあります。

+0

こんにちは、PL/pgSQLでは実行できません。 PLpgSQLは複合型のパラメータを持つことができますが、パラメータは多型であってはなりません。宣言された型またはテーブル型でなければなりません。 –

+0

ありがとうございました。私のデータベースに「型」を作成し、それを関数のパラメータとして使用すると機能するのでしょうか? – VPK

+0

はい、plpgsqlはコンポジットタイプ –

答えて

1

単純な問題は、レコードを指定できないことです。関数の入力としていくつかの多型(ANYARRAY、ANYELEMENT)を指定することができますが、計画時に既知の構造を持つ必要があり、良い一日でも入力引数として多型が問題になります。レコードの問題は、PostgreSQLは、渡されるときに内部構造が何であるかを必ずしも知りません。ROW(1, 'test')は、機能的なコンテキストでは役に立たないということです。

代わりに複合型を指定する必要があります。実際にはPostgreSQLに頼るという点でこれを非常に遠くに置くことができます。これにより、レコードを渡すときに特定のタイプのレコードを指定することができます。

関連する問題