ottiene solo 2-3 colonne invece di tutte le colonne
Un modo: utilizzare una variabile record
:
DO $$
DECLARE
_rec record;
BEGIN
SELECT INTO _rec
id, name, surname FROM t WHERE id = ?;
END $$;
Si noti che la la struttura di un tipo record
non è definita fino a quando non viene assegnata. Quindi non puoi fare riferimento a colonne (campi) prima di farlo.
Un altro modo: assegnare più variabili scalari:
DO $$
DECLARE
_id int;
_name text;
_surname text;
BEGIN
SELECT INTO _id, _name, _surname
id, name, surname FROM t WHERE id = ?;
END $$;
quanto riguarda il tuo primo esempio: %ROWTYPE
è solo il rumore in Postgres. The documentation:
(.. Dal momento che ogni tavolo ha un tipo composito associato con lo stesso nome, in realtà non importa in PostgreSQL se si scrive %ROWTYPE
o no, ma il modulo con %ROWTYPE
è più portabile)
Quindi:
DO $$
DECLARE
my_data t; -- table name serves as type name, too.
BEGIN
SELECT INTO my_data * FROM t WHERE id = ?;
END $$;
fonte
2015-10-02 18:32:12