میخواهیم برنامهای بنویسیم که اعداد را از یک ورودی رشته ای جدا کرده و خروجیهای زیر را بازگرداند
select get_number(p_input_char => ‘amir5REZA6ALI7.MOHAMMAD4’) from dual; ====> 567.4
select get_number(p_input_char => ‘علی5 رضا 6 محمد 7’) from dual; ====> 567
برای انجام این کار باید از برنامه زیر استفاده کنیم
create or replace function get_number(p_input_char varchar2) return varchar2
deterministic as
v_len number;
v_asci number;
v_tmp clob;
v_result clob;
begin
if p_input_char is null then
return null;
end if;
select length(min(p_input_char)) into v_len from dual;
for i in 0 .. v_len loop
select substr(p_input_char, i, 1) into v_tmp from dual;
select ascii(v_tmp) into v_asci from dual;
if (v_asci >= 48 and v_asci <= 57) or v_asci = 46 then
v_result := v_result || v_tmp;
end if;
end loop;
return v_result;
end;
در برنامه فوق پارامتر p_input_char ورودی تابع است که حاوی مقادیر رشتهای و عددی است توجه دوستان را به این نکته جلب میکنم که در ورودی تابع فوق کاراکتر نقطه(.) به عنوان نقطه اعشار در نظر گرفته شده است
موفق و پیروز باشید
علی ابراهیمی فرد