据我发现,
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 列而不是所有列
record
变量:
DO
$do$
DECLARE
_rec record;
BEGIN
SELECT INTO _rec
id, name, surname
FROM t
WHERE id = ?;
-- do something with it ...
END
$do$;
请注意,
record
类型的结构在分配之前是未定义的。因此,在此之前您无法引用列(字段)。
另一种方法:分配多个标量变量:
DO
$do$
DECLARE
_id int;
_name text;
_surname text;
BEGIN
SELECT INTO _id, _name, _surname
id, name, surname
FROM t
WHERE id = ?;
END
$do$;
%ROWTYPE
在 Postgres 中只是噪音。 手册:
(由于每个表都有一个关联的同名复合类型, 实际上在 PostgreSQL 中你是否写
并不重要 或不。但带有%ROWTYPE
的形式更便携。)%ROWTYPE
所以:
DO
$do$
DECLARE
my_data t; -- table name serves as type name, too.
BEGIN
SELECT INTO my_data * FROM t WHERE id = ?;
END
$do$;