Найти ошибку
Только что коллега обратился с вопросом: почему один и тот же запрос возвращает разные результаты в зависимости от того, вызван он прямо или "упакован" в функцию. Я потратил минут 20 на анализ простого кода, но так ничего и не нашел.
Запрос отдельно:
Функция:
Если выполнить запрос отдельно, получаем NULL
Если вызвать функцию:
получаем 1000!
Еще через 10 минут, он написал мне что решил проблему:
Название параметра функции совпадает с именем поля в таблице TUBES и оператор like сравнивает не со значением параметра, а с значением поля.
Запрос отдельно:
select max(LENGTH) from TUBES where TUBES.NAME LIKE 'tube1'
Функция:
create or replace FUNCTION "GET_TUBE_LENGTH" ( NAME IN VARCHAR ) RETURN NUMBER AS depth NUMBER; BEGIN select max(LENGTH) into depth from TUBES where TUBES.NAME LIKE NAME; RETURN depth; END GET_TUBE_LENGTH;
Если выполнить запрос отдельно, получаем NULL
Если вызвать функцию:
SELECT GET_TUBE_LENGTH('tube1') FROM DUAL;
получаем 1000!
Еще через 10 минут, он написал мне что решил проблему:
Название параметра функции совпадает с именем поля в таблице TUBES и оператор like сравнивает не со значением параметра, а с значением поля.
Коментарі