Puedes utilizar este....
create or replace FUNCTION "FUN$NUMERO_LETRAS"
(NUMERO_ENTRADA IN NUMBER)
RETURN CHAR IS
NUMERO_LETRAS VARCHAR2(300);
HILERA_ENTEROS VARCHAR2(9);
HILERA_UNIDADES VARCHAR2(1);
HILERA_DECENAS VARCHAR2(1);
HILERA_CENTENAS VARCHAR2(1);
HILERA_DC VARCHAR2(2);
HILERA_DECIMALES VARCHAR2(2);
LETRAS_UNIDADES VARCHAR2(15);
LETRAS_CENTENAS VARCHAR2(15);
LETRAS_DECENAS VARCHAR2(15);
LETRAS_MILES VARCHAR2(15);
LETRAS VARCHAR2(135);
MONTO_ENTERO NUMBER(9);
DECIMALES NUMBER(2);
LARGO_ENTEROS NUMBER(9);
GRUPO NUMBER(1);
VALOR_UNIDADES NUMBER(1);
VALOR_DECENAS NUMBER(1);
VALOR_CENTENAS NUMBER(1);
VALOR_DC NUMBER(2);
POSICION_UNIDADES NUMBER(2);
POSICION_CENTENAS NUMBER(2);
POSICION_DECENAS NUMBER(2);
CADA_DIGITO NUMBER(2);
CALCULADO NUMBER(14);
DEMILLONES BOOLEAN;
NUMERO_ENT NUMBER;
CURSOR DESC_NUMERO(NUM NUMBER) IS
SELECT NUM_CIFRA NUMERO_ESPANOL
FROM NUMEROS
WHERE NUM_NUMERO = NUM;
BEGIN
RETURN CHAR IS
NUMERO_LETRAS VARCHAR2(300);
HILERA_ENTEROS VARCHAR2(9);
HILERA_UNIDADES VARCHAR2(1);
HILERA_DECENAS VARCHAR2(1);
HILERA_CENTENAS VARCHAR2(1);
HILERA_DC VARCHAR2(2);
HILERA_DECIMALES VARCHAR2(2);
LETRAS_UNIDADES VARCHAR2(15);
LETRAS_CENTENAS VARCHAR2(15);
LETRAS_DECENAS VARCHAR2(15);
LETRAS_MILES VARCHAR2(15);
LETRAS VARCHAR2(135);
MONTO_ENTERO NUMBER(9);
DECIMALES NUMBER(2);
LARGO_ENTEROS NUMBER(9);
GRUPO NUMBER(1);
VALOR_UNIDADES NUMBER(1);
VALOR_DECENAS NUMBER(1);
VALOR_CENTENAS NUMBER(1);
VALOR_DC NUMBER(2);
POSICION_UNIDADES NUMBER(2);
POSICION_CENTENAS NUMBER(2);
POSICION_DECENAS NUMBER(2);
CADA_DIGITO NUMBER(2);
CALCULADO NUMBER(14);
DEMILLONES BOOLEAN;
NUMERO_ENT NUMBER;
CURSOR DESC_NUMERO(NUM NUMBER) IS
SELECT NUM_CIFRA NUMERO_ESPANOL
FROM NUMEROS
WHERE NUM_NUMERO = NUM;
BEGIN
SELECT ABS(NUMERO_ENTRADA) INTO NUMERO_ENT FROM DUAL;
MONTO_ENTERO := TRUNC(NUMERO_ENT);
DECIMALES := (NUMERO_ENT - MONTO_ENTERO) * 100;
HILERA_ENTEROS := LPAD(TO_CHAR(MONTO_ENTERO),9,'0');
HILERA_DECIMALES := TO_CHAR(DECIMALES);
LARGO_ENTEROS := LENGTH(HILERA_ENTEROS);
CADA_DIGITO := LARGO_ENTEROS;
WHILE CADA_DIGITO >= 1
LOOP
GRUPO := TRUNC(CADA_DIGITO/3);
POSICION_CENTENAS := (LARGO_ENTEROS - CADA_DIGITO) + 1;
POSICION_DECENAS := POSICION_CENTENAS + 1;
POSICION_UNIDADES := POSICION_CENTENAS + 2;
HILERA_CENTENAS := SUBSTR(HILERA_ENTEROS,POSICION_CENTENAS,1);
HILERA_DECENAS := SUBSTR(HILERA_ENTEROS,POSICION_DECENAS,1);
HILERA_DC := SUBSTR(HILERA_ENTEROS,POSICION_DECENAS,2);
HILERA_UNIDADES := SUBSTR(HILERA_ENTEROS,POSICION_UNIDADES,1);
VALOR_UNIDADES := TO_NUMBER(HILERA_UNIDADES);
VALOR_DECENAS := TO_NUMBER(HILERA_DECENAS);
VALOR_DC := TO_NUMBER(HILERA_DC);
VALOR_CENTENAS := TO_NUMBER(HILERA_CENTENAS);
LETRAS_UNIDADES := NULL;
LETRAS_DECENAS := NULL;
LETRAS_CENTENAS := NULL;
IF VALOR_UNIDADES > 0
OR VALOR_DECENAS > 0
OR VALOR_CENTENAS > 0
THEN
DEMILLONES := FALSE;
CALCULADO := VALOR_CENTENAS * 100;
OPEN DESC_NUMERO(CALCULADO);
FETCH DESC_NUMERO INTO LETRAS_CENTENAS;
IF VALOR_CENTENAS = 1 AND
(VALOR_DECENAS <> 0 OR VALOR_DC <> 0)
THEN
LETRAS_CENTENAS := LETRAS_CENTENAS||'TO';
END IF;
CLOSE DESC_NUMERO;
IF VALOR_DECENAS < 3
THEN
LETRAS_UNIDADES := NULL;
OPEN DESC_NUMERO(VALOR_DC);
FETCH DESC_NUMERO INTO LETRAS_DECENAS;
IF DESC_NUMERO%NOTFOUND
THEN
LETRAS_DECENAS := NULL;
END IF;
ELSE
CALCULADO := VALOR_DECENAS * 10;
OPEN DESC_NUMERO(CALCULADO);
FETCH DESC_NUMERO INTO LETRAS_DECENAS;
CLOSE DESC_NUMERO;
OPEN DESC_NUMERO(VALOR_UNIDADES);
FETCH DESC_NUMERO INTO LETRAS_UNIDADES;
IF DESC_NUMERO%FOUND
THEN
IF VALOR_UNIDADES <> 0
THEN
LETRAS_DECENAS := LETRAS_DECENAS||' Y';
END IF;
END IF;
END IF;
CLOSE DESC_NUMERO;
LETRAS_MILES := NULL;
IF GRUPO = 2 THEN
LETRAS_MILES := 'MIL';
ELSIF GRUPO = 3 THEN
DEMILLONES := TRUE;
IF VALOR_UNIDADES > 1 OR (VALOR_DECENAS <> 0 OR VALOR_CENTENAS <> 0)
THEN
LETRAS_MILES := 'MILLONES';
ELSE
LETRAS_MILES := 'MILLON';
END IF;
END IF;
LETRAS := RTRIM(LETRAS,' ')||' '||
LETRAS_CENTENAS||' '||
LETRAS_DECENAS||' '||
LETRAS_UNIDADES||' '||
LETRAS_MILES;
END IF;
CADA_DIGITO := CADA_DIGITO - 3;
END LOOP;
IF LETRAS IS NULL THEN
LETRAS := 'CERO';
END IF;
--
NUMERO_LETRAS := LETRAS;
RETURN(NUMERO_LETRAS);
END;
DECIMALES := (NUMERO_ENT - MONTO_ENTERO) * 100;
HILERA_ENTEROS := LPAD(TO_CHAR(MONTO_ENTERO),9,'0');
HILERA_DECIMALES := TO_CHAR(DECIMALES);
LARGO_ENTEROS := LENGTH(HILERA_ENTEROS);
CADA_DIGITO := LARGO_ENTEROS;
WHILE CADA_DIGITO >= 1
LOOP
GRUPO := TRUNC(CADA_DIGITO/3);
POSICION_CENTENAS := (LARGO_ENTEROS - CADA_DIGITO) + 1;
POSICION_DECENAS := POSICION_CENTENAS + 1;
POSICION_UNIDADES := POSICION_CENTENAS + 2;
HILERA_CENTENAS := SUBSTR(HILERA_ENTEROS,POSICION_CENTENAS,1);
HILERA_DECENAS := SUBSTR(HILERA_ENTEROS,POSICION_DECENAS,1);
HILERA_DC := SUBSTR(HILERA_ENTEROS,POSICION_DECENAS,2);
HILERA_UNIDADES := SUBSTR(HILERA_ENTEROS,POSICION_UNIDADES,1);
VALOR_UNIDADES := TO_NUMBER(HILERA_UNIDADES);
VALOR_DECENAS := TO_NUMBER(HILERA_DECENAS);
VALOR_DC := TO_NUMBER(HILERA_DC);
VALOR_CENTENAS := TO_NUMBER(HILERA_CENTENAS);
LETRAS_UNIDADES := NULL;
LETRAS_DECENAS := NULL;
LETRAS_CENTENAS := NULL;
IF VALOR_UNIDADES > 0
OR VALOR_DECENAS > 0
OR VALOR_CENTENAS > 0
THEN
DEMILLONES := FALSE;
CALCULADO := VALOR_CENTENAS * 100;
OPEN DESC_NUMERO(CALCULADO);
FETCH DESC_NUMERO INTO LETRAS_CENTENAS;
IF VALOR_CENTENAS = 1 AND
(VALOR_DECENAS <> 0 OR VALOR_DC <> 0)
THEN
LETRAS_CENTENAS := LETRAS_CENTENAS||'TO';
END IF;
CLOSE DESC_NUMERO;
IF VALOR_DECENAS < 3
THEN
LETRAS_UNIDADES := NULL;
OPEN DESC_NUMERO(VALOR_DC);
FETCH DESC_NUMERO INTO LETRAS_DECENAS;
IF DESC_NUMERO%NOTFOUND
THEN
LETRAS_DECENAS := NULL;
END IF;
ELSE
CALCULADO := VALOR_DECENAS * 10;
OPEN DESC_NUMERO(CALCULADO);
FETCH DESC_NUMERO INTO LETRAS_DECENAS;
CLOSE DESC_NUMERO;
OPEN DESC_NUMERO(VALOR_UNIDADES);
FETCH DESC_NUMERO INTO LETRAS_UNIDADES;
IF DESC_NUMERO%FOUND
THEN
IF VALOR_UNIDADES <> 0
THEN
LETRAS_DECENAS := LETRAS_DECENAS||' Y';
END IF;
END IF;
END IF;
CLOSE DESC_NUMERO;
LETRAS_MILES := NULL;
IF GRUPO = 2 THEN
LETRAS_MILES := 'MIL';
ELSIF GRUPO = 3 THEN
DEMILLONES := TRUE;
IF VALOR_UNIDADES > 1 OR (VALOR_DECENAS <> 0 OR VALOR_CENTENAS <> 0)
THEN
LETRAS_MILES := 'MILLONES';
ELSE
LETRAS_MILES := 'MILLON';
END IF;
END IF;
LETRAS := RTRIM(LETRAS,' ')||' '||
LETRAS_CENTENAS||' '||
LETRAS_DECENAS||' '||
LETRAS_UNIDADES||' '||
LETRAS_MILES;
END IF;
CADA_DIGITO := CADA_DIGITO - 3;
END LOOP;
IF LETRAS IS NULL THEN
LETRAS := 'CERO';
END IF;
--
NUMERO_LETRAS := LETRAS;
RETURN(NUMERO_LETRAS);
END;
De: perezrozowilson [mailto:perezrozowilson@...]
Enviado el: Martes, 10 de Junio de 2008 02:55 p.m.
Para: DesarrolloOracleForms@yahoogroups.com
Asunto: [Forms] convertir un valor en letras
hola amigos del grupo, actualmente tengo una forma en la cual genero un
valor el cual deseo poder convertirlo a letras como en un cheque se que
exite un funcion o algo sililar por favor me pueden colaborar
gracias
wilson desde bogota
__________ Información de NOD32, revisión 3174 (20080610) __________
Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com