我正在尝试使用记录数据类型迭代查询结果。不过,如果我尝试使用查询中定义的表别名访问一列,我会收到以下错误:
ERRO:架构“inv_row”不存在 语境:SQL命令“SELECT inv_row.s.processor<> inv_row.d.processor” PL / pgSQL函数“teste”第7行在IF
以下是抛出此错误的代码:
CREATE OR REPLACE FUNCTION teste() returns void as $$
DECLARE
inv_row record;
BEGIN
FOR inv_row in SELECT * FROM sa_inventory s LEFT JOIN dim_inventory d ON s.macaddr = d.macaddr LOOP
IF inv_row.s.processor <> inv_row.d.processor THEN
<do something>;
END IF;
END LOOP;
END;
$$ language plpgsql;
是否有其他方法可以访问记录数据类型中特定表的列?
答案 0 :(得分:0)
幸运的是,这里的答案相对简单。您必须使用括号来表示元组:
IF (inv_row.s).processor <> (inv_row.d).processor THEN
这是因为SQL指定了命名空间深度的含义,因此没有这个PostgreSQL就无法安全地确定这意味着什么。因此inv_row.s.processor
表示processor
架构中s
表的inv_row
列。但是,(inv_row.s).processor
表示获取inf_row表的s
列,将其视为元组,然后选择该列的processor
列。