Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/05/2008, 04:52
itbmf
 
Fecha de Ingreso: marzo-2008
Mensajes: 18
Antigüedad: 16 años, 2 meses
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;
/