Функция возвращает 1, даже если нет совпадающей записи

#oracle #oracle10g

#Oracle #oracle10g

Вопрос:

У меня есть следующая функция в пакете. При запуске этой функции для несоответствующей записи результат всегда равен 1.

Вот как я запускаю функцию и вижу вывод в окне вывода СУБД

 set serveroutpuut on;
begin
    dbms_output.put_line (BP$BUSINESSPARNTNER_CODE.Check_rec('44887'));
end;
  

Это функция, которая отвечает за запрос и подсчет записей

    FUNCTION Check_rec(PartnerNumber IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
   BEGIN
        select count(PartnerNumber) into v_count from BusinessPartner where PartnerNumber = PartnerNumber and code is not null;
        RETURN v_count;
   END;
  

Я пробовал работать с жестко запрограммированным значением, и это работает

 FUNCTION Check_rec(PartnerNumber IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
       BEGIN
            select count(PartnerNumber) into v_count from BusinessPartner where PartnerNumber = '44887' and code is not null;
            RETURN v_count;
       END;
  

Комментарии:

1. where PartnerNumber = PartnerNumber всегда имеет значение true. Либо переименуйте свой параметр, как предложил Тим Бигелайзен, либо укажите его явно с помощью where PartnerNumber = check_rec.PartnerNumber .

Ответ №1:

Пожалуйста, попробуйте изменить имя вашего IN параметра, чтобы оно не конфликтовало с именами столбцов:

 FUNCTION Check_rec(pn IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
BEGIN
    SELECT COUNT(PartnerNumber) INTO v_count
    FROM BusinessPartner
    WHERE PartnerNumber = pn AND code IS NOT NULL;
    RETURN v_count;
END;
  

Я не знаю правил, которые Oracle использовала бы для разрешения вашей текущей ситуации, но даже если бы это можно было заставить работать, вероятно, было бы лучше просто избежать этого.