Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Conversion Euros

Estas en el tema de Conversion Euros en el foro de Oracle en Foros del Web. Hola a todos de nuevo: A ver, tengo esta función... Cita: CREATE OR REPLACE FUNCTION Conversion_Euros(NUMERO IN NUMBER) RETURN VARCHAR2 IS centimos VARCHAR2(2); millares VARCHAR2(3); ...
  #1 (permalink)  
Antiguo 09/05/2008, 01:22
 
Fecha de Ingreso: marzo-2008
Mensajes: 18
Antigüedad: 16 años, 1 mes
Puntos: 0
Conversion Euros

Hola a todos de nuevo:

A ver, tengo esta función...
Cita:
CREATE OR REPLACE FUNCTION Conversion_Euros(NUMERO IN NUMBER) RETURN VARCHAR2 IS

centimos VARCHAR2(2);
millares VARCHAR2(3);
unimills VARCHAR2(3);
unimilos VARCHAR2(3);
unibilos VARCHAR2(3);
numeroch VARCHAR2(100);
resultado VARCHAR2(1800);
resultado1 VARCHAR2(200);

FUNCTION unidades(uni IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF uni='1' THEN RETURN('un');
ELSIF uni='2' THEN RETURN('dos');
ELSIF uni='3' THEN RETURN('tres');
ELSIF uni='4' THEN RETURN('cuatro');
ELSIF uni='5' THEN RETURN('cinco');
ELSIF uni='6' THEN RETURN('seis');
ELSIF uni='7' THEN RETURN('siete');
ELSIF uni='8' THEN RETURN('ocho');
ELSIF uni='9' THEN RETURN('nueve');
ELSE RETURN NULL;
END IF;
END;


FUNCTION decenas(dece IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF SUBSTR(dece,1,1)='1' THEN
IF dece='10' THEN RETURN('diez');
ELSIF dece='11' THEN RETURN('once');
ELSIF dece='12' THEN RETURN('doce');
ELSIF dece='13' THEN RETURN('trece');
ELSIF dece='14' THEN RETURN('catorce');
ELSIF dece='15' THEN RETURN('quince');
ELSIF dece='16' THEN RETURN('dieciseis');
ELSIF dece='17' THEN RETURN('diecisiete');
ELSIF dece='18' THEN RETURN('dieciocho');
ELSIF dece='19' THEN RETURN('diecinueve');
ELSE RETURN NULL;
END IF;

ELSIF SUBSTR(dece,1,1)='2' THEN
IF dece='20' THEN
RETURN('veinte');
ELSE
RETURN('veinti'||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='3' THEN
IF dece='30' THEN
RETURN('treinta');
ELSE
RETURN('treinta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='4' THEN
IF dece='40' THEN
RETURN('cuarenta');
ELSE
RETURN('cuarenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='5' THEN
IF dece='50' THEN
RETURN('cincuenta');
ELSE
RETURN('cincuenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='6' THEN
IF dece='60' THEN
RETURN('sesenta');
ELSE
RETURN('sesenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='7' THEN
IF dece='70' THEN
RETURN('setenta');
ELSE
RETURN('setenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='8' THEN
IF dece='80' THEN
RETURN('ochenta');
ELSE
RETURN('ochenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='9' THEN
IF dece='90' THEN
RETURN('noventa');
ELSE
RETURN('noventa y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSE
RETURN unidades(SUBSTR(dece,2,1));
END IF;

END;


FUNCTION centenas(cent IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN

IF SUBSTR(cent,1,1)='1' THEN
IF cent='100' THEN
RETURN('cien');
ELSE
RETURN('ciento '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='2' THEN
IF cent='200' THEN
RETURN('dos cientos');
ELSE
RETURN('dos cientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='3' THEN
IF cent='300' THEN
RETURN('trescientos');
ELSE
RETURN('trescientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='4' THEN
IF cent='400' THEN
RETURN('cuatrocientos');
ELSE
RETURN('cuatrocientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='5' THEN
IF cent='500' THEN
RETURN('quinientos');
ELSE
RETURN('quinientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='6' THEN
IF cent='600' THEN
RETURN('seiscientos');
ELSE
RETURN('seiscientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='7' THEN
IF cent='700' THEN
RETURN('setecientos');
ELSE
RETURN('setecientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='8' THEN
IF cent='800' THEN
RETURN('ochocientos');
ELSE
RETURN('ochocientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='9' THEN
IF cent='900' THEN
RETURN('novecientos');
ELSE
RETURN('novecientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSE
RETURN decenas(SUBSTR(cent,2,2));
END IF;
END;


BEGIN
numeroch:=TO_CHAR(numero,'999999999999999D00');
numeroch:=LPAD(LTRIM(numeroch),20,'0');
centimos:=SUBSTR(numeroch,INSTR(numeroch,',')+1,2) ;
millares:=SUBSTR(numeroch,INSTR(numeroch,',')-3,3);
unimills:=SUBSTR(numeroch,INSTR(numeroch,',')-6,3);
unimilos:=SUBSTR(numeroch,INSTR(numeroch,',')-9,3);
unibilos:=SUBSTR(numeroch,INSTR(numeroch,',')-12,3);
resultado:=NULL;
resultado1:=NULL;

IF decenas(centimos) IS NOT NULL THEN --los centimos
IF decenas(centimos)='uno' THEN
resultado1:=decenas(centimos)||' centimo';
ELSE
resultado1:=decenas(centimos)||' centimos';
END IF;
END IF;

IF centenas(millares) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:='y '||resultado;
END IF;
IF centenas(millares)='uno' THEN
resultado:=centenas(millares)||' '||resultado;
ELSE
resultado:=centenas(millares)||' '||resultado;
END IF;
END IF;

IF centenas(unimills) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unimills)='un' THEN
resultado:='mil '||resultado;
ELSE
resultado:=centenas(unimills)||' mil '||resultado;
END IF;
END IF;

IF centenas(unimilos) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unimilos)='un' THEN
resultado:=centenas(unimilos)||' millón '||resultado;
ELSE
resultado:=centenas(unimilos)||' millones '||resultado;
END IF;
END IF;
IF centenas(unibilos) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unibilos)='un' THEN
resultado:=centenas(unibilos)||' billon '||resultado;
ELSE
resultado:=centenas(unibilos)||' billones '||resultado;
END IF;
END IF;

IF resultado IS NOT NULL THEN
IF resultado1 IS NOT NULL THEN
resultado1:='con '||resultado1;
END IF;
IF SUBSTR(resultado,LENGTH(resultado)-5,6)='lones' OR SUBSTR(resultado,LENGTH(resultado)-5,6)='illon' THEN
resultado:=resultado||'de euros '||resultado1;
ELSE
IF resultado='un' THEN
resultado:=resultado||'euro ';
ELSE
resultado:=resultado||'euros ';
END IF;
END IF;
END IF;
resultado:=resultado||resultado1;

RETURN(NLS_UPPER(SUBSTR(resultado,1,1))||SUBSTR(re sultado,2));



END;
/
Que lo que hace es convertir una cantidad en numeros (1000€) a letra (Mil EUROS), el problema es que cuando la cantidad es 0, no hace nada, y si pongo el codigo que debería de convertirme el 0, usease,

Cita:
FUNCTION unidades(uni IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF uni='1' THEN RETURN('un');
ELSIF uni='2' THEN RETURN('dos');
ELSIF uni='3' THEN RETURN('tres');
ELSIF uni='4' THEN RETURN('cuatro');
ELSIF uni='5' THEN RETURN('cinco');
ELSIF uni='6' THEN RETURN('seis');
ELSIF uni='7' THEN RETURN('siete');
ELSIF uni='8' THEN RETURN('ocho');
ELSIF uni='9' THEN RETURN('nueve');
ELSIF uni='0' THEN RETURN('cero');<----------------- Esta parte me falla
ELSE RETURN NULL;
END IF;
END;
aquí, el resultado es 0 BILLONES, 0 MILLONES, 0 MIL 0 EUROS CON 0 CENTIMOS....se que es un poco largo pero si teneis tiempo de echarle un vistazo os lo agradecería de sobremanera....

Saludos y Gracias de antemano
  #2 (permalink)  
Antiguo 09/05/2008, 04:52
 
Fecha de Ingreso: marzo-2008
Mensajes: 18
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Conversion Euros

ya está solucionado....al final, y como siempre, la solución era mucho más facil de lo pensado.....

Lo único que hay que poner es, al final, donde se comprueba si no es NULL, la condicion de si es 'cero'.....quedaría así el código completo

Cita:
CREATE OR REPLACE FUNCTION Conversion_Euros(NUMERO IN NUMBER) RETURN VARCHAR2 IS

centimos VARCHAR2(2);
millares VARCHAR2(3);
unimills VARCHAR2(3);
unimilos VARCHAR2(3);
unibilos VARCHAR2(3);
numeroch VARCHAR2(100);
resultado VARCHAR2(1800);
resultado1 VARCHAR2(200);

FUNCTION unidades(uni IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF uni='1' THEN RETURN('un');
ELSIF uni='2' THEN RETURN('dos');
ELSIF uni='3' THEN RETURN('tres');
ELSIF uni='4' THEN RETURN('cuatro');
ELSIF uni='5' THEN RETURN('cinco');
ELSIF uni='6' THEN RETURN('seis');
ELSIF uni='7' THEN RETURN('siete');
ELSIF uni='8' THEN RETURN('ocho');
ELSIF uni='9' THEN RETURN('nueve');
ELSE RETURN NULL;
END IF;
END;


FUNCTION decenas(dece IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
IF SUBSTR(dece,1,1)='1' THEN
IF dece='10' THEN RETURN('diez');
ELSIF dece='11' THEN RETURN('once');
ELSIF dece='12' THEN RETURN('doce');
ELSIF dece='13' THEN RETURN('trece');
ELSIF dece='14' THEN RETURN('catorce');
ELSIF dece='15' THEN RETURN('quince');
ELSIF dece='16' THEN RETURN('dieciseis');
ELSIF dece='17' THEN RETURN('diecisiete');
ELSIF dece='18' THEN RETURN('dieciocho');
ELSIF dece='19' THEN RETURN('diecinueve');
ELSE RETURN NULL;
END IF;

ELSIF SUBSTR(dece,1,1)='2' THEN
IF dece='20' THEN
RETURN('veinte');
ELSE
RETURN('veinti'||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='3' THEN
IF dece='30' THEN
RETURN('treinta');
ELSE
RETURN('treinta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='4' THEN
IF dece='40' THEN
RETURN('cuarenta');
ELSE
RETURN('cuarenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='5' THEN
IF dece='50' THEN
RETURN('cincuenta');
ELSE
RETURN('cincuenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='6' THEN
IF dece='60' THEN
RETURN('sesenta');
ELSE
RETURN('sesenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='7' THEN
IF dece='70' THEN
RETURN('setenta');
ELSE
RETURN('setenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='8' THEN
IF dece='80' THEN
RETURN('ochenta');
ELSE
RETURN('ochenta y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSIF SUBSTR(dece,1,1)='9' THEN
IF dece='90' THEN
RETURN('noventa');
ELSE
RETURN('noventa y '||unidades(SUBSTR(dece,2,1)));
END IF;
ELSE
RETURN unidades(SUBSTR(dece,2,1));
END IF;

END;


FUNCTION centenas(cent IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN

IF SUBSTR(cent,1,1)='1' THEN
IF cent='100' THEN
RETURN('cien');
ELSE
RETURN('ciento '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='2' THEN
IF cent='200' THEN
RETURN('dos cientos');
ELSE
RETURN('dos cientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='3' THEN
IF cent='300' THEN
RETURN('trescientos');
ELSE
RETURN('trescientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='4' THEN
IF cent='400' THEN
RETURN('cuatrocientos');
ELSE
RETURN('cuatrocientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='5' THEN
IF cent='500' THEN
RETURN('quinientos');
ELSE
RETURN('quinientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='6' THEN
IF cent='600' THEN
RETURN('seiscientos');
ELSE
RETURN('seiscientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='7' THEN
IF cent='700' THEN
RETURN('setecientos');
ELSE
RETURN('setecientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='8' THEN
IF cent='800' THEN
RETURN('ochocientos');
ELSE
RETURN('ochocientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSIF SUBSTR(cent,1,1)='9' THEN
IF cent='900' THEN
RETURN('novecientos');
ELSE
RETURN('novecientos '||decenas(SUBSTR(cent,2,2)));
END IF;
ELSE
RETURN decenas(SUBSTR(cent,2,2));
END IF;
END;


BEGIN
numeroch:=TO_CHAR(numero,'999999999999999D00');
numeroch:=LPAD(LTRIM(numeroch),20,'0');
centimos:=SUBSTR(numeroch,INSTR(numeroch,',')+1,2) ;
millares:=SUBSTR(numeroch,INSTR(numeroch,',')-3,3);
unimills:=SUBSTR(numeroch,INSTR(numeroch,',')-6,3);
unimilos:=SUBSTR(numeroch,INSTR(numeroch,',')-9,3);
unibilos:=SUBSTR(numeroch,INSTR(numeroch,',')-12,3);
resultado:=NULL;
resultado1:=NULL;


IF decenas(centimos) IS NOT NULL THEN --los centimos
IF decenas(centimos)='uno' THEN
resultado1:=decenas(centimos)||' centimo de euro';
ELSE
resultado1:=decenas(centimos)||' centimos de euro';
END IF;
END IF;

IF centenas(millares) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:='y '||resultado;
END IF;
IF centenas(millares)='uno' THEN
resultado:=centenas(millares)||' '||resultado;
ELSE
resultado:=centenas(millares)||' '||resultado;
END IF;
END IF;

IF centenas(unimills) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unimills)='un' THEN
resultado:='mil '||resultado;
ELSE
resultado:=centenas(unimills)||' mil '||resultado;
END IF;
END IF;

IF centenas(unimilos) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unimilos)='un' THEN
resultado:=centenas(unimilos)||' millón '||resultado;
ELSE
resultado:=centenas(unimilos)||' millones '||resultado;
END IF;
END IF;
IF centenas(unibilos) IS NOT NULL THEN
IF resultado IS NOT NULL THEN
resultado:=' '||resultado;
END IF;
IF centenas(unibilos)='un' THEN
resultado:=centenas(unibilos)||' billon '||resultado;
ELSE
resultado:=centenas(unibilos)||' billones '||resultado;
END IF;
END IF;

IF resultado IS NOT NULL THEN
IF resultado1 IS NOT NULL THEN
resultado1:='con '||resultado1;
END IF;
IF SUBSTR(resultado,LENGTH(resultado)-5,6)='lones' OR SUBSTR(resultado,LENGTH(resultado)-5,6)='illon' THEN
resultado:=resultado||'de euros '||resultado1;
ELSE
IF resultado='un' THEN
resultado:=resultado||'euro ';
ELSE
resultado:=resultado||'euros ';
END IF;
END IF;
ELSE resultado:= 'cero euros'; <--------- esto es lo único que hay que añadir
END IF;
resultado:=resultado||resultado1;

RETURN(NLS_UPPER(SUBSTR(resultado,1,1))||SUBSTR(re sultado,2));



END;
/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:06.