Я ожидаю разные значения, основанные на вводе, переданном в мою функцию plsql. Извиняюсь, что я довольно новичок в plsql ...
Диапазон
1
2
3
,
,
9
45
46
86
Моя функция, как показано ниже:
CREATE OR REPLACE function get_ext (p_str varchar2)
return varchar2
is
cursor ext is
select range from table where length(range)>1;
v_str varchar2(100);
v_ext number;
v_length number := 0;
v_range varchar2(200);
BEGIN
open ext;
fetch ext into v_range;
v_str := p_str;
v_str := trim(substr(v_str,1,4));
v_length := length(v_str);
for i in 1..v_length loop
BEGIN
v_ext := substr(v_str, i,1);
EXCEPTION
WHEN OTHERS THEN
RETURN p_str;
END;
end loop;
RETURN
case when ext%FOUND then substr(v_str,1,2)
else substr(v_str,1,1)
end;
close ext;
EXCEPTION
WHEN OTHERS THEN
RETURN 'Err';
END;
Он всегда возвращает первые две цифры переданного параметра, но не 1 цифру, которую я ожидаю, когда не найден.
тестирование функции
select get_ext('4588') from dual
возвращает 45
select get_ext('1822') from dual
возвращает 18, тогда как я ожидаю, что он вернет 1
Заранее спасибо