Ir para o conteúdo principal

Procedure - Retorna número ordinal por extenso

SQL: 

create or alter procedure retorna_extenso_ordinais (numero integer) returns (RETORNO varchar(200)) as
begin
  select case :numero
              when 1 then 'Primeiro'
              when 2 then 'Segundo'
              when 3 then 'Terceiro'
              when 4 then 'Quarto'
              when 5 then 'Quinto'
              when 6 then 'Sexto'
              when 7 then 'Sétimo'
              when 8 then 'Oitavo'
              when 9 then 'Nono'
              when 10 then 'Décimo'
              when 11 then 'Décimo primeiro'
              when 12 then 'Décimo segundo'
              when 13 then 'Décimo terceiro'
              when 14 then 'Décimo quarto'
              when 15 then 'Décimo quinto'
              when 16 then 'Décimo sexto'
              when 17 then 'Décimo sétimo'
              when 18 then 'Décimo oitavo'
              when 19 then 'Décimo nono'
              when 20 then 'Vigésimo'
              when 21 then 'Vigésimo primeiro'
              when 22 then 'Vigésimo segundo'
              when 23 then 'Vigésimo terceiro'
              when 24 then 'Vigésimo quarto'
              when 25 then 'Vigésimo quinto'
              when 26 then 'Vigésimo sexto'
              when 27 then 'Vigésimo sétimo'
              when 28 then 'Vigésimo oitavo'
              when 29 then 'Vigésimo nono'
              when 30 then 'Trigésimo'
              when 31 then 'Trigésimo primeiro'
              when 32 then 'Trigésimo segundo'
              when 33 then 'Trigésimo terceiro'
              when 34 then 'Trigésimo quarto'
              when 35 then 'Trigésimo quinto'
              when 36 then 'Trigésimo sexto'
              when 37 then 'Trigésimo sétimo'
              when 38 then 'Trigésimo oitavo'
              when 39 then 'Trigésimo nono'
              when 40 then 'Quadragésimo'
              when 41 then 'Quadragésimo primeiro'
              when 42 then 'Quadragésimo segundo'
              when 43 then 'Quadragésimo terceiro'
              when 44 then 'Quadragésimo quarto'
              when 45 then 'Quadragésimo quinto'
              when 46 then 'Quadragésimo sexto'
              when 47 then 'Quadragésimo sétimo'
              when 48 then 'Quadragésimo oitavo'
              when 49 then 'Quadragésimo nono'
              when 50 then 'Quinquagésimo'
              when 51 then 'Quinquagésimo primeiro'
              when 52 then 'Quinquagésimo segundo'
              when 53 then 'Quinquagésimo terceiro'
              when 54 then 'Quinquagésimo quarto'
              when 55 then 'Quinquagésimo quinto'
              when 56 then 'Quinquagésimo sexto'
              when 57 then 'Quinquagésimo sétimo'
              when 58 then 'Quinquagésimo oitavo'
              when 59 then 'Quinquagésimo nono'
              when 60 then 'Sexagésimo'
              when 61 then 'Sexagésimo primeiro'
              when 62 then 'Sexagésimo segundo'
              when 63 then 'Sexagésimo terceiro'
              when 64 then 'Sexagésimo quarto'
              when 65 then 'Sexagésimo quinto'
              when 66 then 'Sexagésimo sexto'
              when 67 then 'Sexagésimo sétimo'
              when 68 then 'Sexagésimo oitavo'
              when 69 then 'Sexagésimo nono'
              when 70 then 'Septuagésimo '
              when 71 then 'Septuagésimo primeiro'
              when 72 then 'Septuagésimo segundo'
              when 73 then 'Septuagésimo terceiro'
              when 74 then 'Septuagésimo quarto'
              when 75 then 'Septuagésimo quinto'
              when 76 then 'Septuagésimo sexto'
              when 77 then 'Septuagésimo sétimo'
              when 78 then 'Septuagésimo oitavo'
              when 79 then 'Septuagésimo nono'
              when 80 then 'Octogésimo'
              when 81 then 'Octogésimo primeiro'
              when 82 then 'Octogésimo segundo'
              when 83 then 'Octogésimo terceiro'
              when 84 then 'Octogésimo quarto'
              when 85 then 'Octogésimo quinto'
              when 86 then 'Octogésimo sexto'
              when 87 then 'Octogésimo sétimo'
              when 88 then 'Octogésimo oitavo'
              when 89 then 'Octogésimo nono'
              when 90 then 'Nonagésimo'
              when 91 then 'Nonagésimo primeiro'
              when 92 then 'Nonagésimo segundo'
              when 93 then 'Nonagésimo terceiro'
              when 94 then 'Nonagésimo quarto'
              when 95 then 'Nonagésimo quinto'
              when 96 then 'Nonagésimo sexto'
              when 97 then 'Nonagésimo sétimo'
              when 98 then 'Nonagésimo oitavo'
              when 99 then 'Nonagésimo nono'
              when 100 then 'Centésimo'
         end
    from rdb$database INTO :RETORNO;

/*
200.º    ducentésimo
300.º    trecentésimo ou tricentésimo
400.º    quadringentésimo
500.º    quingentésimo
600.º    sexcentésimo ou seiscentésimo
700.º    septingentésimo ou setingentésimo
800.º    octingentésimo ou octogentésimo
900.º    noningentésimo ou nongentésimo
1.000.º    milésimo
10.000.º    décimo milésimo
100.000.º    centésimo milésimo
1.000.000.º    milionésimo
1.000.000.000.º    bilionésimo
1.000.000.000.000.º    trilionésimo
1.000.000.000.000.000.º    quatrilionésimo
1.000.000.000.000.000.000.º    quintilionésimo
1.000.000.000.000.000.000.000.º    Sextilionésimo
1.000.000.000.000.000.000.000.000.º    Septilionésimo
1.000.000.000.000.000.000.000.000.000.º    Octilionésimo
1.000.000.000.000.000.000.000.000.000.000.º    Nonilionésimo
1.000.000.000.000.000.000.000.000.000.000.000.º    Decilionésimo*/

  suspend;
end

Chamada da procedure: 

SELECT * 
  FROM retorna_extenso_ordinais(23)

Retorno: 

Vigésimo terceiro