Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2010, 19:13
Avatar de dalyla
dalyla
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 21 años, 1 mes
Puntos: 1
Stored function de numero a letras

Hola estoy haciendo un stored function para convertir numeros a letras. Encontre el codigo en esta pagina : http://r3xet.blogspot.com/2009/11/ah...ara-poder.html, la cual si la corro como tal me marca errores.

Entonces la fui modificando hasta que solo me marca un error que no entiendo :S
en la ultima linea me dice que no puedo usar '' en la linea 115 o bien la linea siguiente a la ultima.

Este es el codigo:

Código PHP:
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);

SELECT XlnEntero = FLOOR(XNumero), 
    
XlnFraccion = (XNumero - XlnEntero) * 100, 
    
XlcRetorno = '', XlnTerna = 1 ;
    WHILE( 
XlnEntero > 0) DO
        
BEGIN /* WHILE */
        
        /* Recorro terna por terna*/
        
SELECT XlcCadena = '';
        
SELECT XlnUnidades = XlnEntero % 10;
        
SELECT XlnEntero = FLOOR(XlnEntero/10);
        
SELECT XlnDecenas = XlnEntero % 10;
        
SELECT XlnEntero = FLOOR(XlnEntero/10);
        
SELECT XlnCentenas = XlnEntero % 10;
        
SELECT XlnEntero = FLOOR(XlnEntero/10);

        
/* Analizo las unidades*/
        
SELECT XlcCadena =
            CASE 
/* UNIDADES */
                
WHEN XlnUnidades = 1 AND XlnTerna = 1 THEN 'UNO ' + XlcCadena
                WHEN XlnUnidades 
= 1 AND XlnTerna <> 1 THEN 'UN ' + XlcCadena
                WHEN XlnUnidades 
= 2 THEN 'DOS ' + XlcCadena
                WHEN XlnUnidades 
= 3 THEN 'TRES ' + XlcCadena
                WHEN XlnUnidades 
= 4 THEN 'CUATRO ' + XlcCadena
                WHEN XlnUnidades 
= 5 THEN 'CINCO ' + XlcCadena
                WHEN XlnUnidades 
= 6 THEN 'SEIS ' + XlcCadena
                WHEN XlnUnidades 
= 7 THEN 'SIETE ' + XlcCadena
                WHEN XlnUnidades 
= 8 THEN 'OCHO ' + XlcCadena
                WHEN XlnUnidades 
= 9 THEN 'NUEVE ' + XlcCadena
                
ELSE XlcCadena
            END
; /* UNIDADES */

        /*-- Analizo las decenas*/
        
SELECT 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 'DIECI' + XlcCadena
                    END
                WHEN XlnDecenas 
= 2 AND XlnUnidades = 0 THEN 'VEINTE ' + XlcCadena
                WHEN XlnDecenas 
= 2 AND XlnUnidades <> 0 THEN 'VEINTI' + XlcCadena
                WHEN XlnDecenas 
= 3 AND XlnUnidades = 0 THEN 'TREINTA ' + XlcCadena
                WHEN XlnDecenas 
= 3 AND XlnUnidades <> 0 THEN 'TREINTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 4 AND XlnUnidades = 0 THEN 'CUARENTA ' + XlcCadena
                WHEN XlnDecenas 
= 4 AND XlnUnidades <> 0 THEN 'CUARENTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 5 AND XlnUnidades = 0 THEN 'CINCUENTA ' + XlcCadena
                WHEN XlnDecenas 
= 5 AND XlnUnidades <> 0 THEN 'CINCUENTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 6 AND XlnUnidades = 0 THEN 'SESENTA ' + XlcCadena
                WHEN XlnDecenas 
= 6 AND XlnUnidades <> 0 THEN 'SESENTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 7 AND XlnUnidades = 0 THEN 'SETENTA ' + XlcCadena
                WHEN XlnDecenas 
= 7 AND XlnUnidades <> 0 THEN 'SETENTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 8 AND XlnUnidades = 0 THEN 'OCHENTA ' + XlcCadena
                WHEN XlnDecenas 
= 8 AND XlnUnidades <> 0 THEN 'OCHENTA Y ' + XlcCadena
                WHEN XlnDecenas 
= 9 AND XlnUnidades = 0 THEN 'NOVENTA ' + XlcCadena
                WHEN XlnDecenas 
= 9 AND XlnUnidades <> 0 THEN 'NOVENTA Y ' + XlcCadena
                
ELSE XlcCadena
            END
; /* DECENAS */

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

        /* Analizo la terna*/
        
SELECT XlcCadena =
            CASE 
/* TERNA */
                
WHEN XlnTerna = 1 THEN XlcCadena
                WHEN XlnTerna 
= 2 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN XlcCadena + ' MIL '
                
WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0 THEN XlcCadena + 'MILLON '
                
WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND NOT (XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0) THEN XlcCadena + ' MILLONES '
                
WHEN XlnTerna = 4 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN XlcCadena + ' MIL MILLONES '
                
ELSE ''
            
END; /* TERNA */

        /* Armo el retorno terna a terna */
        
SELECT XlcRetorno = XlcCadena + XlcRetorno;
        
SELECT XlnTerna = XlnTerna + 1;
        
END; /* WHILE */

    
IF XlnTerna = 1 THEN
        SELECT XlcRetorno 
= 'CERO';
    
    
SELECT Xresultado = RTRIM(XlcRetorno) + ' CON ' + LTRIM(STR(XlnFraccion,2)) + '/100 ' + XMoneda;

RETURN 
Xresultado; 
END 
como estoy usando navicat para crearlo los encabezados y los parametros de entrada y salida se realizan en otro espacio, pero si tienen dudas en el link los podran ver. Estoy usando mysql 5.0.88 por si sirve de algo.
Y espero este codigo les sirva a muchos

gracias
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )