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