4

%TYPE と配列を一緒に使用することは可能ですか?

CREATE FUNCTION role_update(
  IN id "role".role_id % TYPE,
  IN name   "role".role_name % TYPE,
  IN user_id_list "user".user_id % TYPE[],
  IN permission_id_list  INT[]
)

これにより構文エラーが発生しましたが、列タイプを複製したくないので、後で列タイプを変更する方が簡単なため、"user".user_id % TYPE代わりに使用したいと思います。INT

4

2 に答える 2

6

マニュアルがここで説明しているように:

列のタイプは、table_name.column_name%TYPE を記述することによって参照されます。この機能を使用すると、テーブルの定義の変更に関係なく関数を作成できる場合があります。

RETURNS句でも同じ機能を使用できます。

しかし、参照された列から配列型を派生させる簡単な方法はありません。少なくとも、私が知っている方法はありません。

についてmodifying any column type later:
このタイプの構文は、テーブル列からタイプを派生させるための構文上の便宜にすぎないことをご存知ですか? 作成後は、関連するテーブルまたは列へのリンクは一切ありません。

作成スクリプト全体を同期させるのに役立ちます。しかし、id は、データベース内のライブ オブジェクトへの後で変更を行う際には役に立ちません。

dba.SEに関する関連回答:

于 2013-07-15T17:53:52.513 に答える
5

関数のパラメータで参照される型を使用しても (PostgreSQL では) 意味がありません。これは、実際の型に中間的に変換され、実際の型として格納されるためです。申し訳ありませんが、PostgreSQL はこの機能をサポートしていません。関数内で参照される型を使用すると、セッションで初めて実行されるたびに実際の型が検出されます。

于 2013-07-16T04:38:27.367 に答える