bekommen nur 2-3 Spalten statt alle Spalten
Eine Möglichkeit: Verwenden Sie eine record
Variable:
DO $$
DECLARE
_rec record;
BEGIN
SELECT INTO _rec
id, name, surname FROM t WHERE id = ?;
END $$;
Beachten Sie, dass die Struktur eines record
Typs ist undefiniert bis zur Zuweisung. Sie können also nicht auf Spalten (Felder) verweisen, bevor Sie das tun.
Ein andere Möglichkeit: zuweisen mehr Skalarvariablen:
DO $$
DECLARE
_id int;
_name text;
_surname text;
BEGIN
SELECT INTO _id, _name, _surname
id, name, surname FROM t WHERE id = ?;
END $$;
Was Ihr erstes Beispiel: %ROWTYPE
ist nur Lärm in Postgres. The documentation:
(.. Da jeder Tisch einen zugehörigen Verbundtyp mit dem gleichen Namen hat, spielt es keine Rolle eigentlich nicht in PostgreSQL, ob Sie %ROWTYPE
oder nicht, aber die Form mit %ROWTYPE
schreiben ist mehr tragbar)
So:
DO $$
DECLARE
my_data t; -- table name serves as type name, too.
BEGIN
SELECT INTO my_data * FROM t WHERE id = ?;
END $$;