1

レコードデータ型を使用してクエリの結果を反復処理しようとしています。それでも、クエリで定義されたテーブルエイリアスを使用して1つの列にアクセスしようとすると、次のエラーが発生します。

ERRO:スキーマ "inv_row"が存在しませんCONTEXT: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意味します。ただし、inf_rowテーブルの列を取得し、それをタプルとして扱い、その列を取得することを意味します。processorsinv_row(inv_row.s).processorsprocessor

于 2013-04-24T05:59:48.607 に答える