Você está na página 1de 4

CREATE OR REPLACE

FUNCTION frt_extenso_monetario( VALOR NUMBER )


RETURN VARCHAR2
IS
/*
VERSAO : 1.1
OBJETIVO : CONVERTER NUMENROS EM EXTENSO MONETARIO
DESENVOLVEDOR: ROBERTO FERNANDES SOBRINHO
ALTERACOES :
*/
VALOR_STRING VARCHAR2(256);
VALOR_CONV VARCHAR2(25);
IND NUMBER;
TRES_DIGITOS VARCHAR2(3);
TEXTO_STRING VARCHAR2(256); 96763090
BEGIN
VALOR_CONV := TO_CHAR( TRUNC((ABS(VALOR) * 100),0) , '0999999999999999999' );
VALOR_CONV := SUBSTR( VALOR_CONV , 1 , 18 ) || '0' || SUBSTR( VALOR_CONV , 19,
2 );
IF TO_NUMBER(VALOR_CONV) = 0 THEN
RETURN('ZERO');
END IF;
FOR IND IN 1..7 LOOP
TRES_DIGITOS := SUBSTR( VALOR_CONV , (((IND-1)*3)+1) , 3 );
TEXTO_STRING := '' ;
-- EXTENSO PARA CENTENA
IF SUBSTR(TRES_DIGITOS,1,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING || 'DUZENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING || 'TREZENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING || 'QUATROCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING || 'QUINHENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING || 'SEISCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING || 'SETECENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING || 'OITOCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING || 'NOVECENTOS ' ;
END IF;
IF SUBSTR(TRES_DIGITOS,1,1) = '1' THEN
IF SUBSTR(TRES_DIGITOS,2,2) = '00' THEN
TEXTO_STRING := TEXTO_STRING || 'CEM ' ;
ELSE
TEXTO_STRING := TEXTO_STRING || 'CENTO ' ;
END IF;
END IF;
-- EXTENSO PARA DEZENA
IF SUBSTR(TRES_DIGITOS,2,1) <> '0' AND TEXTO_STRING IS NOT NULL THEN
TEXTO_STRING := TEXTO_STRING || 'E ';
END IF;
IF SUBSTR(TRES_DIGITOS,2,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'VINTE ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TRINTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'QUARENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'CINQUENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'SESSENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'SETENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'OITENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'NOVENTA ';
END IF;
IF SUBSTR(TRES_DIGITOS,2,1) = '1' THEN
IF SUBSTR(TRES_DIGITOS,3,1) <> '0' THEN
IF SUBSTR(TRES_DIGITOS,3,1) = '1' THEN
TEXTO_STRING := TEXTO_STRING ||'ONZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'DOZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TREZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'CATORZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'QUINZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZESSEIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZESSETE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZOITO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZENOVE ';
END IF;
ELSE
TEXTO_STRING := TEXTO_STRING ||'DEZ ' ;
END IF;
ELSE
-- EXTENSO PARA UNIDADE
IF SUBSTR(TRES_DIGITOS,3,1) <> '0' AND TEXTO_STRING IS NOT NULL THEN
TEXTO_STRING := TEXTO_STRING || 'E ';
END IF;
IF SUBSTR(TRES_DIGITOS,3,1) = '1' THEN
TEXTO_STRING := TEXTO_STRING ||'UM ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'DOIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TRES ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'QUATRO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'CINCO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'SEIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'SETE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'OITO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'NOVE ';
END IF;
END IF;
IF TO_NUMBER( TRES_DIGITOS ) > 0 THEN
IF TO_NUMBER( TRES_DIGITOS ) = 1 THEN
IF IND = 1 THEN
TEXTO_STRING := TEXTO_STRING || 'QUATRILHÃO ' ;
ELSIF IND = 2 THEN
TEXTO_STRING := TEXTO_STRING || 'TRILHÃO ' ;
ELSIF IND = 3 THEN
TEXTO_STRING := TEXTO_STRING || 'BILHÃO ' ;
ELSIF IND = 4 THEN
TEXTO_STRING := TEXTO_STRING || 'MILHÃO ' ;
ELSIF IND = 5 THEN
TEXTO_STRING := TEXTO_STRING || 'MIL ' ;
END IF;
ELSE
IF IND = 1 THEN
TEXTO_STRING := TEXTO_STRING || 'QUATRILHÕES ' ;
ELSIF IND = 2 THEN
TEXTO_STRING := TEXTO_STRING || 'TRILHÕES ' ;
ELSIF IND = 3 THEN
TEXTO_STRING := TEXTO_STRING || 'BILHÕES ' ;
ELSIF IND = 4 THEN
TEXTO_STRING := TEXTO_STRING || 'MILHÕES ' ;
ELSIF IND = 5 THEN
TEXTO_STRING := TEXTO_STRING || 'MIL ' ;
END IF;
END IF;
END IF;
VALOR_STRING := VALOR_STRING || TEXTO_STRING;
-- ESCRITA DA MOEDA CORRENTE
IF IND = 5 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 16 , 3 )) > 0 AND VALOR_STRING IS
NOT NULL THEN
VALOR_STRING := RTRIM(VALOR_STRING) || ', ';
END IF;
ELSE
IF IND < 5 AND VALOR_STRING IS NOT NULL THEN
VALOR_STRING := RTRIM(VALOR_STRING) || ', ';
END IF;
END IF;
IF IND = 6 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 1 , 18 ) ) > 1 THEN
VALOR_STRING := VALOR_STRING || 'REAIS ';
ELSIF TO_NUMBER( SUBSTR( VALOR_CONV , 1 , 18 ) ) = 1 THEN
VALOR_STRING := VALOR_STRING || 'REAL ';
END IF;
IF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) > 0 AND
LENGTH(VALOR_STRING) > 0 THEN
VALOR_STRING := VALOR_STRING || 'E ';
END IF;
END IF;
-- ESCRITA PARA CENTAVOS
IF IND = 7 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) > 1 THEN
VALOR_STRING := VALOR_STRING || 'CENTAVOS ';
ELSIF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) = 1 THEN
VALOR_STRING := VALOR_STRING || 'CENTAVO ';
END IF;
END IF;
END LOOP;
RETURN( RTRIM(VALOR_STRING) );
EXCEPTION
WHEN OTHERS THEN
RETURN( '*** VALOR INVALIDO ***' );
END;
/

Você também pode gostar