SELECT * FROM t INTO my_data;
は、次の場合にのみ機能します。
DO $$
DECLARE
my_data t%ROWTYPE;
BEGIN
SELECT * FROM t INTO my_data WHERE id = ?;
END $$;
私は正しいですか?
すべての列ではなく2〜3列だけを取得する場合。 my_data
を定義するにはどうすればよいですか?
あれは、
DO $$
DECLARE
my_data <WHAT HERE??>;
BEGIN
SELECT id,name,surname FROM t INTO my_data WHERE id = ?;
END $$;
すべての列ではなく2〜3列のみを取得する
1つの方法: record
変数を使用します。
DO $$
DECLARE
_rec record;
BEGIN
SELECT INTO _rec
id, name, surname FROM t WHERE id = ?;
END $$;
record
型の構造は、割り当てられるまで未定義であることに注意してください。したがって、その前に列(フィールド)を参照することはできません。
別の方法:複数のスカラー変数を割り当てる:
DO $$
DECLARE
_id int;
_name text;
_surname text;
BEGIN
SELECT INTO _id, _name, _surname
id, name, surname FROM t WHERE id = ?;
END $$;
あなたの最初の例として:%ROWTYPE
はPostgresの単なるノイズです。 ドキュメント :
(すべてのテーブルには同じ名前の関連付けられた複合型があるため、PostgreSQLでは実際に
%ROWTYPE
か否か。しかし、%ROWTYPE
の方が移植性があります。)
そう:
DO $$
DECLARE
my_data t; -- table name serves as type name, too.
BEGIN
SELECT INTO my_data * FROM t WHERE id = ?;
END $$;