0

PostgreSQL データベースを使用して Php アプリケーションを維持しようとしています。ある時点で、ストアド プロシージャが呼び出され、function_x内部function_xfunction_yが呼び出されます。function_yという名前の変数が渡されparameter_1、parameter_1 の定義は次のとおりです。

parameter_1 numeric[][3] := {};

コマンドライン(またはpgadmin)でselect function_yを直接実行しようとしていますが、空の配列を関数に渡すのに問題があります。あなたが使用しなければならないドキュメントによると、variadic私は試しました:

select function_y(581, 'CPN-00000000001-0000', 'TPN-00000000001-0001', 100, 2013, variadic arr := array[]);

しかし、私はこのエラーが発生しました:

ERROR:  cannot determine type of empty array

さまざまなアプローチを試しましたが、何も機能しません。クエリで多次元配列をパラメーターとして渡すにはどうすればよいですか?

4

1 に答える 1

2

1)できますが、配列変数にパラメーターを使用する必要はありません。ただし、呼び出しではなく、関数の宣言で使用する必要があります。VARIADIC

2) Postgres 配列変数は、定義内の次元を無視します。ここでマニュアルを引用します:

現在の実装では、宣言された次元数も強制されません。特定の要素型の配列は、サイズや次元数に関係なく、すべて同じ型であると見なされます。したがって、配列のサイズまたは次元数を宣言すること CREATE TABLEは、単なるドキュメントです。実行時の動作には影響しません。

3) これは無効な構文です:

parameter_1 numeric[][3] := {};

一重引用符が必要です:

parameter_1 numeric[][3] := '{}';

これは事実上次と同じです

parameter_1 numeric[] := '{}';

この密接に関連する回答の詳細、コード例、およびリンク:
plpgsql 関数で入力配列の要素に一致する行を返す

于 2013-09-10T02:10:55.920 に答える