|
这下应该好了
CREATE OR REPLACE FUNCTION substr_validate_data(con_str VARCHAR2,
con_num VARCHAR2
)
RETURN NUMBER IS
a NUMBER := 1;
m NUMBER := 1;
n NUMBER := 1;
v_each_data VARCHAR (100) := NULL;
v_return_str VARCHAR2 (4000) := NULL;
BEGIN
LOOP
select SUBSTR(con_str,n,1) into v_each_data from dual;
EXIT WHEN (v_each_data not in ('0','.') or n > length(con_str));
n:= n + 1;
END LOOP;
select n+con_num-1 into n from dual;
IF con_str < 1 THEN
select substr(con_str,1,n) into v_return_str from dual;
ELSIF length(floor(con_str)) <= con_num THEN
LOOP
select SUBSTR(con_str,m,1) into v_each_data from dual;
m := m+1;
if v_each_data <> '.' then
a := a+1;
end if;
IF v_return_str IS NULL
THEN
v_return_str := v_each_data;
ELSE
v_return_str := v_return_str || v_each_data;
END IF;
EXIT WHEN a >= n+1;
END LOOP;
ELSE
WHILE v_each_data <> '.' LOOP
select SUBSTR(con_str,m,1) into v_each_data from dual;
m := m+1;
IF v_return_str IS NULL
THEN
v_return_str := v_each_data;
ELSE
v_return_str := v_return_str || v_each_data;
END IF;
END LOOP;
END IF;
RETURN v_return_str;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END substr_validate_data;
/ |
|