Executar WEB Service via procedure

Está semana me perguntaram se teria como chamar um WEB Service pelo SQL Server, nunca havia feito, porém, já havia visto que era possível, aproveitei a pergunta, para realizar a chamada de um WEB Service via SQL Server e colocar em pratica o que já havia lido sobre o assunto.

Vamos ao exemplo, primeiramente é necessário habilitar a utilização de alguns recursos, conforme o exemplo abaixo:

[sourcecode language=”sql”]

SP_CONFIGURE ‘SHOW ADVANCED OPTIONS’, 1
GO
RECONFIGURE;
GO
SP_CONFIGURE ‘OLE AUTOMATION PROCEDURES’, 1
GO
RECONFIGURE;
GO
[/sourcecode]

Agora vamos a procedure que chama o WEB Service, ela é bem simples e foi baseada no exemplo do CODE PROJECT.

Foi utilizado um WEB Service que não fosse necessário autenticação com usuário e senha, o WEB Service via cep, onde é enviado um CEP e é retornado algumas informações referente a esse CEP.

[sourcecode language=”sql”]
CREATE PROCEDURE P_CALLWS @V_PARAM VARCHAR(20) = NULL
AS

DECLARE @V_OBJ INT;
DECLARE @V_URL VARCHAR(200);
DECLARE @V_RESPONSE VARCHAR(8000);

SET @V_URL = ‘https://viacep.com.br/ws/’ + @V_PARAM + ‘/json/’
EXEC SP_OACREATE ‘MSXML2.ServerXMLHttp’, @V_OBJ out
EXEC SP_OAMETHOD @V_OBJ, ‘OPEN’, NULL, ‘GET’, @V_URL, FALSE
EXEC SP_OAMETHOD @V_OBJ, ‘SEND’
exec SP_OAGETPROPERTY @V_OBJ, ‘responseText’, @V_RESPONSE out

SELECT @V_RESPONSE RESULT

EXEC SP_OADESTROY @V_OBJ

RETURN
[/sourcecode]

Feito isso, vamos executar a procedure para vermos o retorno do WEB Service.

[sourcecode language=”sql”]
EXEC P_CALLWS ‘17501441’
[/sourcecode]

O resultado deve ser igual a imagem abaixo caso tenha passado o mesmo CEP como parâmetro.

Result WEBService

7 comentários

  1. Prezado, bom dia,
    Fiz o procedimento em dois locais e obtive resultados diferentes, ambos na versão 2014:

    1) numa instalação local, no meu notebook, funcionou tudo certo, o retorno veio com o resultado esperado.

    2) numa instalação em um servidor, onde está instalado o SQL 2014 também, o resultado retornado é NULL. Mas, executando neste mesmo servidor o webservice, via Browser, tudo ocorre corretamente.

    Sabem o que pode estar ocorrendo? Ou como posso ver o que está ocorrendo? via LOG, etc?

    Obrigado.

      • Ruberlei, boa tarde,

        Primeiramente, obrigado sempre pela pronta resposta.
        Na verdade, eu consegui corrigir o problema, fiz uma correção na URL do webservice e deu tudo certo.

        Porém agora, preciso incrementar esse código da Procedure.

        Primeiramente, preciso executar um webservice que vai popular uma tabela X no meu banco, e após isso, preciso executar um SELECT simples nesta tabela X que foi populada.

        Gostaria de saber o procedimento correto para isso, visto que para fazer o SELECT preciso garantir que o processo executado pelo webservice tenha terminado.

        Obrigado mais uma vez!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.