Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/05/2010, 11:36
Avatar de dalyla
dalyla
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Stored function de numero a letras

Bien gracias por la ayuda, la verdad es que si entiendo la diferencia entre procedure y function, lo que pasa es que es la primera que hago o modifico en este caso.

Pero me sirvio de mucho tu ayuda, muchas gracias y aqui esta el codigo por los interesados.

Código PHP:

Create 
FUNCTION letras(Numero NUMERIC(20,2),  XMoneda VARCHAR(100)) RETURNS VARCHAR(512)
DETERMINISTIC

BEGIN
DECLARE XlnEntero INT;
DECLARE 
XlcRetorno VARCHAR(512);
DECLARE 
XlnTerna INT;
DECLARE 
XlcMiles VARCHAR(512);
DECLARE 
XlcCadena VARCHAR(512);
DECLARE 
XlnUnidades INT;
DECLARE 
XlnDecenas INT;
DECLARE 
XlnCentenas INT;
DECLARE 
XlnFraccion INT;
DECLARE 
Xresultado varchar(512);

SET XlnEntero FLOOR(XNumero);
SET XlnFraccion = (XNumero XlnEntero) * 100;
SET XlcRetorno '';
SET XlnTerna ;
    WHILE( 
XlnEntero 0) DO

        
#Recorro terna por terna
        
SET XlcCadena '';
        
SET XlnUnidades XlnEntero MOD 10;
        
SET XlnEntero FLOOR(XlnEntero/10);
        
SET XlnDecenas XlnEntero MOD 10;
        
SET XlnEntero FLOOR(XlnEntero/10);
        
SET XlnCentenas XlnEntero MOD 10;
        
SET XlnEntero FLOOR(XlnEntero/10);

        
#Analizo las unidades
        
SET XlcCadena =
            CASE 
# UNIDADES
                
WHEN XlnUnidades AND XlnTerna 1 THEN CONCAT('UNO 'XlcCadena)
                
WHEN XlnUnidades AND XlnTerna <> 1 THEN CONCAT('UN 'XlcCadena)
                
WHEN XlnUnidades 2 THEN CONCAT('DOS 'XlcCadena)
                
WHEN XlnUnidades 3 THEN CONCAT('TRES 'XlcCadena)
                
WHEN XlnUnidades 4 THEN CONCAT('CUATRO 'XlcCadena)
                
WHEN XlnUnidades 5 THEN CONCAT('CINCO 'XlcCadena)
                
WHEN XlnUnidades 6 THEN CONCAT('SEIS 'XlcCadena)
                
WHEN XlnUnidades 7 THEN CONCAT('SIETE 'XlcCadena)
                
WHEN XlnUnidades 8 THEN CONCAT('OCHO 'XlcCadena)
                
WHEN XlnUnidades 9 THEN CONCAT('NUEVE 'XlcCadena)
                ELSE 
XlcCadena
            END
#UNIDADES

        #Analizo las decenas
        
SET XlcCadena =
            CASE 
#DECENAS
                
WHEN XlnDecenas 1 THEN
                    
CASE XlnUnidades
                        WHEN 0 THEN 
'DIEZ '
                        
WHEN 1 THEN 'ONCE '
                        
WHEN 2 THEN 'DOCE '
                        
WHEN 3 THEN 'TRECE '
                        
WHEN 4 THEN 'CATORCE '
                        
WHEN 5 THEN 'QUINCE'
                        
ELSE CONCAT('DIECI'XlcCadena)
                    
END
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN CONCAT('VEINTE 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('VEINTI'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('TREINTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('TREINTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('CUARENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('CUARENTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('CINCUENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('CINCUENTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('SESENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('SESENTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('SETENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('SETENTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('OCHENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('OCHENTA Y 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades 0 THEN CONCAT('NOVENTA 'XlcCadena)
                
WHEN XlnDecenas AND XlnUnidades <> 0 THEN CONCAT('NOVENTA Y 'XlcCadena)
                ELSE 
XlcCadena
            END
#DECENAS

        # Analizo las centenas
        
SET XlcCadena =
            CASE 
# CENTENAS
                
WHEN XlnCentenas AND XlnUnidades AND XlnDecenas 0 THEN CONCAT('CIEN 'XlcCadena)
                
WHEN XlnCentenas AND NOT(XlnUnidades AND XlnDecenas 0THEN CONCAT('CIENTO 'XlcCadena)
                
WHEN XlnCentenas 2 THEN CONCAT('DOSCIENTOS 'XlcCadena)
                
WHEN XlnCentenas 3 THEN CONCAT('TRESCIENTOS 'XlcCadena)
                
WHEN XlnCentenas 4 THEN CONCAT('CUATROCIENTOS 'XlcCadena)
                
WHEN XlnCentenas 5 THEN CONCAT('QUINIENTOS 'XlcCadena)
                
WHEN XlnCentenas 6 THEN CONCAT('SEISCIENTOS 'XlcCadena)
                
WHEN XlnCentenas 7 THEN CONCAT('SETECIENTOS 'XlcCadena)
                
WHEN XlnCentenas 8 THEN CONCAT('OCHOCIENTOS 'XlcCadena)
                
WHEN XlnCentenas 9 THEN CONCAT('NOVECIENTOS 'XlcCadena)
                ELSE 
XlcCadena
            END
#CENTENAS

        # Analizo la terna
        
SET XlcCadena =
            CASE 
# TERNA
                
WHEN XlnTerna 1 THEN XlcCadena
                WHEN XlnTerna 
AND (XlnUnidades XlnDecenas XlnCentenas <> 0THEN CONCAT(XlcCadena,  'MIL ')
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0) AND XlnUnidades AND XlnDecenas AND XlnCentenas 0 THEN CONCAT(XlcCadena'MILLON ')
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0) AND NOT (XlnUnidades AND XlnDecenas AND XlnCentenas 0THEN CONCAT(XlcCadena'MILLONES ')
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0THEN CONCAT(XlcCadena'MIL MILLONES ')
                ELSE 
''
            
END#TERNA

        #Armo el retorno terna a terna
        
SET XlcRetorno CONCAT(XlcCadenaXlcRetorno);
        
SET XlnTerna XlnTerna 1;
    
END WHILE; # WHILE

    
IF XlnTerna 1 THEN SET XlcRetorno 'CERO'END IF;

SET Xresultado CONCAT(RTRIM(XlcRetorno), ' CON 'LTRIM(XlnFraccion), '/100 'XMoneda);

RETURN 
Xresultado;

END 
Espero que el encabezado este bien ya que a final de cuentas lo termine con navicar

y gracias por tu ayuda, sin eso no creo haberlo terminado muchas gracias de veras.
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )