Это, скорее всего, вызванные вами, не имея никакого результата, который соответствует вашему запросу. Oracle позволит вашей функции вернуться, но вернет результат NULL.
Исключено исключение NO_DATA_FOUND в PL/SQL, но оно не распространяется на ваш SQL. Я бы предположил, что идентификатор, который вы передаете своей функции, не существует в вашей таблице. Пожалуйста, см. Мой ответ here для объяснения.
Ваша функция немного странная. Вы делаете два сканирования транзакции, что не требуется. Как вы не возвращаю какие-либо данные из таблицы, я хотел бы использовать совокупный запрос, который всегда возвращает одну строку, и поэтому не демонстрируют такое же поведение:
create or replace function UDF_GET_STATUS(P_ID in number
) return nvarchar2 is
l_status number;
begin
select count(*) into l_status
from transaction
where id = P_ID
and status = 1
and rownum < 2
;
if l_status = 0 then
return 'FOR APPROVAL';
else return 'APPROVED';
end if;
end;
/
Как ваш запрос является СУЩЕСТВУЕТ вам нужен только один строка, которая выполняет условие, поэтому вы можете использовать ROWNUM, чтобы ограничить результаты, которые вы можете получить.
Это также немного любопытно, что вы возвращающая NVARCHAR2 здесь ...
это странно .. Она также возвращает ничего/пустая строка – user2729205
Что, эта функция @ user2729205? Вы настроены на получение nvarchar2? – Ben
, чтобы получить статус транзакции. если статус равен 1, то он уже одобрен. – user2729205