PL/SQL
Alguien sabe como puedo comprobar en PL si un valor introducido por teclado y almacenado en una variable es numérico?
-GRACIAS-
-GRACIAS-
Prueba esto:
select LENGTH (TRIM (TRANSLATE (12511116.54, ' +-.0123456789',' ') ) )
from dual
si te devuelve un 1 el valor es numerico, por el contrario NULL.
No lo he probado mucho, pero creo que te servirá.
Un saludo
Juan.
select LENGTH (TRIM (TRANSLATE (12511116.54, ' +-.0123456789',' ') ) )
from dual
si te devuelve un 1 el valor es numerico, por el contrario NULL.
No lo he probado mucho, pero creo que te servirá.
Un saludo
Juan.
Para hacer eso tenes que usar expresiones regulares. Oracle soporta la sintaxis de Perl para el manejo de patrones en strings.
Por lo tanto, primero tenes que definir la expresion regular que queres buscar. Luego usa la funcion match del paquete owa_pattern.
Para responder tu pregunta, el siguiente procedimiento te dice si una cadena representa un numero:
create or replace procedure regex_test(p_cadena IN VARCHAR2) is
begin
if (owa_pattern.match(p_cadena, '^[+-]?d+$')) then
dbms_output.put_line('La cadena ''' || p_cadena
|| ''' representa un valor numerico');
else
dbms_output.put_line('''' || p_cadena || ''' no
representa un numero');
end if;
end;
SQL> execute regex_test('hola');
'hola' no representa un numero
PL/SQL procedure successfully completed
SQL> execute regex_test('123');
La cadena '123' representa un valor numerico
PL/SQL procedure successfully completed
SQL> execute regex_test('123hola');
'123hola' no representa un numero
PL/SQL procedure successfully completed
Saludos.
Por lo tanto, primero tenes que definir la expresion regular que queres buscar. Luego usa la funcion match del paquete owa_pattern.
Para responder tu pregunta, el siguiente procedimiento te dice si una cadena representa un numero:
create or replace procedure regex_test(p_cadena IN VARCHAR2) is
begin
if (owa_pattern.match(p_cadena, '^[+-]?d+$')) then
dbms_output.put_line('La cadena ''' || p_cadena
|| ''' representa un valor numerico');
else
dbms_output.put_line('''' || p_cadena || ''' no
representa un numero');
end if;
end;
SQL> execute regex_test('hola');
'hola' no representa un numero
PL/SQL procedure successfully completed
SQL> execute regex_test('123');
La cadena '123' representa un valor numerico
PL/SQL procedure successfully completed
SQL> execute regex_test('123hola');
'123hola' no representa un numero
PL/SQL procedure successfully completed
Saludos.
