1

我正在尝试使用记录数据类型迭代查询的结果。不过,如果我尝试使用查询中定义的表别名访问一列,则会收到以下错误:

错误:模式“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;

是否有另一种方法可以访问记录数据类型中特定表的列?

4

1 回答 1

0

幸运的是,这里的答案相对简单。您必须使用括号来表示元组:

IF (inv_row.s).processor <> (inv_row.d).processor THEN

这是因为 SQL 指定了命名空间深度的含义,因此没有这个 PostgreSQL 就无法安全地确定这意味着什么。所以inv_row.s.processor表示模式中表的processor列。但是,意味着获取inf_row 表的列,将其视为一个元组,然后获取该列。sinv_row(inv_row.s).processorsprocessor

于 2013-04-24T05:59:48.607 回答