Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2010, 19:13
Avatar de dalyla
dalyla
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
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 ;
    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 AND XlnTerna 1 THEN 'UNO ' XlcCadena
                WHEN XlnUnidades 
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 
AND XlnUnidades 0 THEN 'VEINTE ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'VEINTI' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'TREINTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'TREINTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'CUARENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'CUARENTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'CINCUENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'CINCUENTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'SESENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'SESENTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'SETENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'SETENTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'OCHENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'OCHENTA Y ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades 0 THEN 'NOVENTA ' XlcCadena
                WHEN XlnDecenas 
AND XlnUnidades <> 0 THEN 'NOVENTA Y ' XlcCadena
                
ELSE XlcCadena
            END
/* DECENAS */

        /* Analizo las centenas*/
        
SELECT XlcCadena =
            CASE 
/* CENTENAS */
                
WHEN XlnCentenas AND XlnUnidades AND XlnDecenas 0 THEN 'CIEN ' XlcCadena
                WHEN XlnCentenas 
AND NOT(XlnUnidades AND XlnDecenas 0THEN '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 
AND (XlnUnidades XlnDecenas XlnCentenas <> 0THEN XlcCadena ' MIL '
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0) AND XlnUnidades AND XlnDecenas AND XlnCentenas 0 THEN XlcCadena 'MILLON '
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0) AND NOT (XlnUnidades AND XlnDecenas AND XlnCentenas 0THEN XlcCadena ' MILLONES '
                
WHEN XlnTerna AND (XlnUnidades XlnDecenas XlnCentenas <> 0THEN 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 ; )