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 'Quatrucentos ' ; 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 'Quatrilho ' ; ELSIF IND = 2 THEN TEXTO_STRING := TEXTO_STRING 'Trilho ' ; ELSIF IND = 3 THEN TEXTO_STRING := TEXTO_STRING 'Bilho ' ; ELSIF IND = 4 THEN TEXTO_STRING := TEXTO_STRING 'Milho ' ; ELSIF IND = 5 THEN TEXTO_STRING := TEXTO_STRING 'Mil ' ; END IF; ELSE IF IND = 1 THEN TEXTO_STRING := TEXTO_STRING 'Quatrilhes ' ; ELSIF IND = 2 THEN TEXTO_STRING := TEXTO_STRING 'Trilhes ' ; ELSIF IND = 3 THEN TEXTO_STRING := TEXTO_STRING 'Bilhes ' ; ELSIF IND = 4 THEN TEXTO_STRING := TEXTO_STRING 'Milhes ' ; 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