web-dev-qa-db-ja.com

postgresqlのROWTYPE、TYPE、およびRECORDの違いは?

次の宣言の用途は何ですか?また、これらのタイプの宣言はどこで使用しますか?

myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
11
mrg

から PostgreSQLのドキュメント

  • TYPEは、変数またはテーブル列のデータ型を提供します。これを使用して、データベース値を保持する変数を宣言できます。たとえば、usersテーブルにuser_idという名前の列があるとします。 users.user_idと同じデータ型の変数を宣言するには、次のように記述します:user_id users.user_id%TYPE;

  • ROWTYPE:複合型の変数は、行変数(または行型変数)と呼ばれます。このような変数は、クエリの列セットが変数の宣言されたタイプと一致する限り、SELECTまたはFORクエリ結果の行全体を保持できます。行値の個々のフィールドには、通常のドット表記(rowvar.fieldなど)を使用してアクセスします。

  • RECORD:レコード変数は行タイプの変数に似ていますが、事前定義された構造はありません。それらは、SELECTまたはFORコマンドの間に割り当てられた行の実際の行構造を引き継ぎます。レコード変数の下部構造は、割り当てられるたびに変更される可能性があります。この結果、レコード変数が最初に割り当てられるまで、その変数には下部構造がなく、その中のフィールドにアクセスしようとすると、実行時エラーが発生します。

より詳細な例については、リンクを参照してください。

15
mech