PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Deklarieren Sie eine Zeilentypvariable in PL/pgSQL

Eine Möglichkeit:Verwenden Sie einen 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 Typ ist undefiniert, bis er zugewiesen wird. Sie können also vorher nicht auf Spalten (Felder) verweisen.

Ein anderer Weg:Weisen Sie mehrere skalare Variablen zu:

DO $$
DECLARE
   _id int;
   _name text;
   _surname text;
BEGIN
SELECT INTO _id, _name, _surname
             id,  name,  surname FROM t WHERE id = ?;
END $$;

Wie für Ihr erstes Beispiel:%ROWTYPE ist nur Rauschen in Postgres. Die Dokumentation :

Also:

DO $$
DECLARE
   my_data t;  -- table name serves as type name, too. 
BEGIN
   SELECT INTO my_data  * FROM t WHERE id = ?;
END $$;