Функция PostgreSQL не работает должным образом - PullRequest
4 голосов
/ 29 июля 2011

У меня есть простая функция PostgreSQL ... что-то вроде ниже

CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEGIN
    OPEN $1 FOR 

    SELECT col 
    FROM   test
    WHERE  cola = 1;

    RETURN $1;
END;
' LANGUAGE plpgsql;

Дело в том, что когда я запускаю следующий sql, скажем, я получаю 10 строк

    SELECT col 
    FROM   test
    WHERE  cola = 1;

, но когда япри вызове функции я получаю 0 строк назад, позже после изменения сценария я обнаружил, что следующие операции

CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEGIN
    OPEN $1 FOR 

    SELECT col 
    FROM   test     t
    WHERE  t.cola = 1;

    RETURN $1;
END;
' LANGUAGE plpgsql;

и возвращают необходимые строки.

Я знаю, что это не является строго проблемой SQL, но это хорошо известная проблема PostgreSQL или, возможно, ошибка?

Следует отметить, что у меня есть несколько таблиц со столбцами с именем 'cola', это причина или есть конфигурация PostgreSQLпроблема?

32-битная версия PostgreSQL для Windows v8.3

для Windows

1 Ответ

1 голос
/ 15 августа 2011

Ваш вопрос довольно расплывчатый, поэтому я предполагаю, что в темноте здесь.Не могли бы вы случайно иметь переменную "cola" в вашей функции?Когда переменные уровня функции конфликтуют с именами столбцов, эта переменная имеет приоритет, и в результате вы получите совершенно неожиданные результаты для вашего запроса.

Решение состоит в том, чтобы переименовать переменную в вашей функции.

Этоочень распространенная ошибка в PL / pgSQL.PostgreSQL 9.0 и новее обнаруживают такие конфликты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...