Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como consultar a cotação do dólar (USD), euro (EUR) ou qualquer outra moeda em tempo real com API e SQLCLR

Visualizações: 1.844 views
Tempo de Leitura: 6 minutos

Fala pessoal!
Nesse post de hoje, vou compartilhar com vocês uma solução que eu desenvolvi para consultar a cotação do dólar (USD), euro (EUR), real (BRL) ou qualquer outra moeda em tempo real (quase) utilizando um WebService (API) e SQLCLR no SQL Server. Isso pode acabar sendo muito útil dependendo da sua área de atuação e é algo que vejo muitas empresas até comprando serviços parecidos com esse.

Se você não sabe o que é SQLCLR, dê uma lida no artigo Introdução ao SQL CLR (Common Language Runtime) no SQL Server antes desse post para entender melhor o que é esse recurso.

O que vamos conseguir fazer ao final desse post:

De onde vêm os dados das cotações?

Para retornar os dados de cotação de moedas, existem vários e vários sites e API’s para consulta. Para esse exemplo, eu optei por utilizar a API do site https://www.currencyconverterapi.com/, que possui plano gratuito para consulta, além de planos pagos, caso você tenha uma necessidade maior de consultas.

A documentação da API pode ser encontrada nesse link aqui.

No plano gratuito, acredito que a maioria das pessoas já serão muito bem atendidas. Inclusive, no próprio site é mencionado que o serviço pode ser utilizado de forma gratuita até para uso comercial.

Limitações do plano gratuito:

  • Pares de moedas por solicitação: 2 (Pode consultar até 2 moedas por vez)
  • Número de solicitações por hora: 100
  • Intevalo de atualização dos dados da cotação: 60 minutos (Ou seja, não adianta tentar atualizar os dados no plano gratuito com frequência menor que 60 minutos)
  • Intervalo de datas na busca histórica: 8 dias (A função fncConverteMoedaHistoricoRange só pode retornar um intervalo de dados de até 8 dias)
  • Consultas históricas: 1 ano (As datas passadas por parâmetros nas funções fncConverteMoedaHistorico ou fncConverteMoedaHistoricoRange não podem ser mais antigas que 365 dias da data atual)

Caso o plano gratuito não consiga te atender, pode procurar algum plano pago e continuar utilizando essa mesma API e essas funções.

Como conseguir a chave de autenticação da API?

Para adquirir a sua chave da API e começar a utilizar os recursos, acesse esse link aqui, preencha o seu e-mail e você irá receber a sua chave de acesso:

Com essa chave, você já pode utilizar a sua API, respeitando os limites do plano que for utilizar, é claro.

Como utilizar as funções criadas

Antes de demonstrar a utilização, achei legal fazer uma breve descrição sobre cada uma dessas funções.

  • fncConverteMoeda: Função que tem como objetivo converter uma moeda para outra, com base na cotação mais atual possível. O retorno dessa função é um número decimal escalar.
  • fncConverteMoedaHistorico: Função que tem como objetivo converter uma moeda para outra, com base na cotação da data informada como parâmetro (lembrando das limitações da API). O retorno dessa função é um número decimal escalar.
  • fncConverteMoedaHistoricoRange: Função que tem como objetivo converter uma moeda para outra, com base na cotação do range de data informada como parâmetro (lembrando das limitações da API). O retorno dessa função é uma tabela, contendo a data da cotação (Datetime) e o valor da cotação (número decimal escalar), onde cada dia é uma linha da tabela.

Exemplos de uso:

Resultado:

Como criar os objetos no banco com T-SQL – Modo Easy/Nutella

Se você não tem o Visual Studio ou não quer se preocupar em entender como as funções foram construídas ou compilar a sua própria versão do assembly, esse código é pra você. Simples, rápido e objetivo.

Código T-SQL para criar as funções:

Muito cuidado ao utilizar o parâmetro TRUSTWORTHY no database, pois em determinada situação, pode ser um grave risco de segurança ao seu ambiente, conforme demonstrei no artigo SQL Server – Entendendo os riscos da propriedade TRUSTWORTHY habilitada em um database. Procure utilizar o recurso de trusted assembly do SQL Server 2017+ ou chave assimétrica, caso possível.

Como compilar o seu projeto SQLCLR no Visual Studio – Modo Hard/Raiz

Se você tem o Visual Studio e quer entender como as funções foram construídas ou compilar a sua própria versão do assembly, esse código é pra você.

Caso você não saiba o que é SQLCLR ou como compilar e publicar o projeto, dê uma lida no artigo Introdução ao SQL CLR (Common Language Runtime) no SQL Server antes desse post para entender melhor o que é esse recurso.

Download da solução do Visual Studio (VS2019)
Download do Projeto SQLCLR_CurrencyConverter

Código-fonte do fncConverteMoeda.cs

Código-fonte do fncConverteMoedaHistorico.cs

Código-fonte do fncConverteMoedaHistoricoRange.cs

E é isso aí, pessoal!
Espero que tenham gostado dessa dica e até a próxima!