PL/SQL

ansi_anso
25 de Abril del 2005
Alguien sabe como puedo comprobar en PL si un valor introducido por teclado y almacenado en una variable es numérico?
-GRACIAS-

Proteuss
25 de Abril del 2005
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.

trazom
25 de Abril del 2005
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.

jc3000
25 de Abril del 2005
Que ganas de complicaros la vida

begin

variable := variable * 1;

exception
when others then << es char >>
end;