SQL コード内のあいまいな参照を報告します。

たとえば、名前がテーブルの列とルーチンのパラメーターの両方を参照している場合が挙げられます。 そのようなコードは解決ロジックが直感的ではないため、実行するとエラーが発生したり、予期しない結果になったりする可能性があります。 通常、内側のブロックで定義された名前 (ローカル変数) は外側のブロックで定義された名前 (グローバル変数) よりも優先されます。

例 (PostgreSQL):

CREATE TABLE foo
(
    id   INT,
    name VARCHAR(5)
);
CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS
$$
DECLARE
    b INT;
BEGIN
      -- `name` は列の名前とパラメーターの両方に使用されているためあいまいです
    SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;
    RETURN b;
END;
$$ LANGUAGE plpgsql;

PostgreSQL では、#variable_conflict ディレクティブを使用して正しい参照を明示的に指定できます。 たとえば、#variable_conflict use_column を使用して列の名前を参照したり、#variable_conflict use_variable を使用してパラメーターを参照したりできます。

CREATE TABLE foo
(
    id   INT,
    name VARCHAR(5)
);
CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS
$$
    #variable_conflict use_column
DECLARE
    b INT;
BEGIN
    SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;
    RETURN b;
END;
$$ LANGUAGE plpgsql;