numeros a texto en pl/sql
>> viernes, 5 de febrero de 2010
CREATE OR REPLACE FUNCTION UNIDADES(NUM NUMBER) RETURN VARCHAR2 IS
R VARCHAR2(20);
BEGIN
IF NUM=1 THEN
R:='UNO ';
END IF;
IF NUM=2 THEN
R:='DOS ';
END IF;
IF NUM=3 THEN
R:='TRES ';
END IF;
IF NUM=4 THEN
R:='CUATRO ';
END IF;
IF NUM=5 THEN
R:='CINCO ';
END IF;
IF NUM=6 THEN
R:='SEIS ';
END IF;
IF NUM=7 THEN
R:='SIETE ';
END IF;
IF NUM=8 THEN
R:='OCHO ';
END IF;
IF NUM=9 THEN
R:='NUEVE ';
END IF;
IF NUM=0 THEN
R:='';
END IF;
RETURN(R);
END;
/
CREATE OR REPLACE FUNCTION DECENAS(NUM NUMBER) RETURN VARCHAR2 IS
R VARCHAR2(20);
BEGIN
IF NUM=10 THEN
R:='DIEZ';
END IF;
IF NUM=11 THEN
R:='ONCE';
END IF;
IF NUM=12 THEN
R:='DOCE';
END IF;
IF NUM=13 THEN
R:='TRECE';
END IF;
IF NUM=14 THEN
R:='CATORCE';
END IF;
IF NUM=15 THEN
R:='QUINCE';
END IF;
IF ((NUM>=16)AND(NUM<=19)) THEN
R:='DIESI'||UNIDADES(NUM-10);
END IF;
IF NUM=20 THEN
R:='VEINTE';
END IF;
IF ((NUM>20)AND(NUM<30)) THEN
R:='VEINTI'||UNIDADES(NUM-20);
END IF;
IF ((NUM>=30)AND(NUM<40)) THEN
R:='TREINTA ';
IF NUM>30 THEN
R:=R||'Y '||UNIDADES(NUM-30);
END IF;
END IF;
IF ((NUM>=40)AND(NUM<50)) THEN
R:='CUARENTA ';
IF NUM>40 THEN
R:=R||'Y '||UNIDADES(NUM-40);
END IF;
END IF;
IF ((NUM>=50)AND(NUM<60)) THEN
R:='CINCUENTA';
IF NUM>50 THEN
R:=R||'Y '||UNIDADES(NUM-50);
END IF;
END IF;
IF ((NUM>=60)AND(NUM<70)) THEN
R:='SESENTA ';
IF NUM>60 THEN
R:=R||'Y '||UNIDADES(NUM-60);
dbms_output.put_line(R);
END IF;
END IF;
IF ((NUM>=70)AND(NUM<80)) THEN
R:='SETENTA ';
IF NUM>70 THEN
R:=R||'Y '||UNIDADES(NUM-70);
END IF;
END IF;
IF ((NUM>=80)AND(NUM<90)) THEN
R:='OCHENTA ';
IF NUM>80 THEN
R:=R||'Y '||UNIDADES(NUM-80);
END IF;
END IF;
IF ((NUM>=90)AND(NUM<100)) THEN
R:='NOVENTA ';
IF NUM>90 THEN
R:=R||'Y '||UNIDADES(NUM-90);
END IF;
END IF;
IF ((NUM>=0)AND(NUM<10)) THEN
R:=UNIDADES(NUM);
END IF;
RETURN(R);
END;
/
CREATE OR REPLACE FUNCTION CENTENAS(NUM NUMBER) RETURN VARCHAR2 IS
R VARCHAR2(200);
N NUMBER;
M NUMBER;
BEGIN
IF NUM=100 THEN
R:='CIEN';
ELSIF ((NUM>100)AND(NUM<200)) THEN
dbms_output.put_line(NUM-100);
R:='CIENTO '||DECENAS(NUM-100);
ELSIF ((NUM>=500)AND(NUM<600)) THEN
R:='QUINIENTOS '||DECENAS(NUM-500);
ELSIF ((NUM>=700)AND(NUM<800)) THEN
R:='SETECIENTOS '||DECENAS(NUM-700);
ELSIF ((NUM>=900)AND(NUM<1000)) THEN
R:='NOVECIENTOS'||DECENAS(NUM-900);
ELSIF (((NUM>=200)AND(NUM<500))or((num>=600)AND(NUM<700))or((num>=800)AND(NUM<900))) THEN
M:=MOD(NUM,POWER(10,2));
N:=((NUM-M)/100);
R:=(UNIDADES(N)||'CIENTOS '||DECENAS(M));
ELSIF (NUM<100) THEN
dbms_output.put_line(NUM);
R:=DECENAS(NUM);
END IF;
RETURN(R);
END;
/
CREATE OR REPLACE FUNCTION MILES(NUM NUMBER) RETURN VARCHAR2 IS
R VARCHAR2(200);
N NUMBER;
M NUMBER;
BEGIN
IF NUM>=1000 AND NUM<2000 THEN
R:='MIL '||CENTENAS(NUM-1000);
ELSIF NUM>=2000 AND NUM<10000 THEN
M:=MOD(NUM,POWER(10,3));
dbms_output.put_line(M);
N:=((NUM-M)/1000);
R:=UNIDADES(N)||'MIL '||CENTENAS(M);
ELSIF NUM>=10000 AND NUM<100000 THEN
M:=MOD(NUM,POWER(10,3));
N:=((NUM-M)/1000);
R:=DECENAS(N)||'MIL '||CENTENAS(M);
ELSIF NUM>=100000 AND NUM<1000000 THEN
M:=MOD(NUM,POWER(10,3));
N:=((NUM-M)/1000);
R:=CENTENAS(N)||'MIL '||CENTENAS(M);
ELSIF NUM<1000 THEN
R:=CENTENAS(NUM);
END IF;
RETURN(R);
END;
/
CREATE OR REPLACE FUNCTION MILLONES(NUM NUMBER) RETURN VARCHAR2 IS
R VARCHAR2(200);
N NUMBER;
M NUMBER;
BEGIN
IF NUM>=2000000 AND NUM<10000000 THEN
M:=MOD(NUM,POWER(10,6));
N:=((NUM-M)/1000000);
R:=UNIDADES(N)||'MILLONES '||MILES(M);
ELSIF NUM>=1000000 AND NUM<2000000 THEN
R:='UN MILLON '||MILES(NUM-1000000);
ELSIF NUM<1000000 THEN
R:= MILES(NUM);
END IF;
RETURN(R);
END;
/
------------------------------------PRUEVA--------------------------------------
set serveroutput on
declare
a number:=1564321;
R VARCHAR2(200);
begin
R:=MILLONES(A);
dbms_output.put_line(A||' -->'||R);
end;
/

0 comentarios:
Publicar un comentario