애매한 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;