#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 использовала бы для разрешения вашей текущей ситуации, но даже если бы это можно было заставить работать, вероятно, было бы лучше просто избежать этого.