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