Uma maneira:use um registro
record
variável:DO $$
DECLARE
_rec record;
BEGIN
SELECT INTO _rec
id, name, surname FROM t WHERE id = ?;
END $$;
Observe que a estrutura de um
record
tipo é indefinido até ser atribuído. Portanto, você não pode fazer referência a colunas (campos) antes de fazer isso. Outra maneira:atribuir várias variáveis escalares:
DO $$
DECLARE
_id int;
_name text;
_surname text;
BEGIN
SELECT INTO _id, _name, _surname
id, name, surname FROM t WHERE id = ?;
END $$;
Quanto ao seu primeiro exemplo:
%ROWTYPE
é apenas ruído no Postgres. A documentação
:Então:
DO $$
DECLARE
my_data t; -- table name serves as type name, too.
BEGIN
SELECT INTO my_data * FROM t WHERE id = ?;
END $$;