Acessando serviços HTTP e RESTful a partir do DB2: apresentando as funções REST definidas pelo usuário para DB2

Trazendo a Web para o mundo dos sistemas de bancos de dados relacionais

Cada vez mais, a Representational State Transfer (REST) tornou-se o modo preferido de se comunicar nos ambientes atuais de arquitetura orientada a serviços. Há muitos serviços e fontes de informação que podem ser endereçados por meio de uma URL e acessados usando HTTP. Por outro lado, há ainda uma quantidade significativa de informações armazenadas em sistemas de gerenciamento de banco de dados relacional (RDBMS) -- como DB2. ®. RDMSes modernos fornecem recursos eficientes de processamento para dados relacionais (por meio de SQL) e dados XML (por meio de SQL/XML ou XQuery).

Michael Schenker, Advisory Software Engineer, IBM

Author Photo: Michael SchenkerMichael Schenker tem mais de sete anos de experiência de trabalho na IBM, e passou a fazer parte da empresa como funcionário em tempo integral no final de 2003. Durante sua carreira, Michael trabalhou em vários produtos relacionados a bancos de dados. Começou a trabalhar como estagiário para integração de informações de DB2 com foco em origens de dados não relacionais. Em 2006, Michael passou a fazer parte da organização de ferramentas de banco de dados e trabalhou na funcionalidade de prestador de serviços na Web para DB2 do IBM Data Studio Developer. Ele obteve muito conhecimento sobre SOA e tecnologias da Web durante esse tempo. Desde 2008, Michael faz parte da equipe de otimizador de DB2 para z/OS, trabalhando em seleção de plano de acesso e ferramentas de teste do otimizador.



Susan Malaika, Senior Technical Staff Member, IBM

Susan Malaika photoSusan Malaika é Senior Technical Staff Member do IBM Information Management Group (que faz parte do IBM Software Group). Suas especialidades incluem XML, Web e bancos de dados. Ela desenvolveu padrões que suportam dados de ambientes de grade no Global Grid Forum. Além de trabalhar como desenvolvedora de produtos IBM, ela também trabalhou como especialista de Internet, analista de dados, e designer e desenvolvedora de aplicativo. Ela também é coautora de um livro sobre a Web e publicou artigos sobre processo de transação e XML. E também é membro da IBM Academy of Technology.



04/Jul/2011

Visão geral

Este artigo apresenta um conjunto de funções definidas pelo usuário (UDFs) para DB2 que permitem que os aplicativos consumam serviços baseados em REST a partir de SQL. Serão abrangidos os seguintes tópicos:

  • Introdução
  • UDFs de REST escalares básicos
    • Enviando valores de cabeçalho HTTP customizados
    • Combinando as funções XML com UDFs de REST de modo a recuperar um feed de notícias da BBC
    • Reunindo os resultados de UDF de REST com uma tabela relacional
    • Segurança— autenticação e criptografia
  • Funções de auxiliar
    • Codificação/decodificação de URL
    • Codificação/decodificação de Base64

Introdução

Qual DB2?

As informações neste artigo se aplicam ao DB2 para Linux®, UNIX® e Windows®, e ao DB2 para z/OS®.

O HTTP foi definido há mais de 20 anos quando a última grande mudança (HTTP 1.1) foi implementada em 1999 (veja RFC2616). A longevidade do HTTP é uma indicação de que ele é estável. O HTTP é o protocolo mais popular da Web. Ao longo do tempo, outros protocolos e padrões de uso, como REST ou WebDAV, foram criados com base no HTTP. Muitos Web sites e aplicativos fornecem interfaces baseadas em HTTP para acessar informações.

Outros formatos usados na Web: JSON

Há muitos outros formatos baseados em texto usados atualmente na Web. Recentemente, o JSON se tornou muito popular. O artigo "Criação de um aplicativo JSON e pureXML, Parte 1: Armazenar e consultar o JSON com o DB2 pureXML" mostra uma maneira em que o JSON pode ser processado no DB2 usando JSONx para converter JSON em XML e vice-versa.

Vários formatos de mensagem (na maioria baseados em XML) evoluíram com o tempo e são usados para trocar dados em conjunto com HTTP, como camada de transporte — SOAP, RSS ou Atom.

Os sistemas de gerenciamento de banco de dados relacional (RDBMSes) também evoluíram, incluindo funcionalidade de processamento e armazenamento além de apenas dados relacionais e SQL, por exemplo, para suporte a XML nativo.

Figura 1. Acessando a Web a partir do DB2 por meio de funções REST
Acessando a Web a partir do DB2 por meio de funções REST

Neste artigo, apresentamos extensões a SQL na forma de funções definidas pelo usuário (UDFs) que acessam recursos endereçáveis por URL via HTTP diretamente a partir de instruções SQL. Os UDFs são chamados de UDFs de REST ou funções REST. Com as novas funções, recursos adicionais, já disponíveis em RDBMS — como agregação SQL ou acesso a XPath — podem ser usados para manipular e armazenar os dados recuperados da Web. Com as funções REST, podem ser emitidas solicitações HTTP GET ou POST simples.

Assinaturas mais complexas (detalhadas) para funções REST também estão disponíveis, permitindo a inspeção dos códigos de resposta HTTP e valores de cabeçalho, o que é útil para depuração. As funções REST detalhadas não são tratadas adicionalmente neste artigo, mas pode-se dar uma olhada nas amostras em sample_tableUDF_Queries.txt para ter uma ideia de como as funções podem ser utilizadas.

As funções REST podem tratar das informações transmitidas via HTTP como dados binários ou de texto. As versões binárias acessam informações como imagens, sons e outros formatos de dados binários, enquanto as versões de texto lidam com páginas HTML e outras informações baseadas em texto, convertendo automaticamente os dados de/para a página de código de banco de dados utilizada. Os dados de texto na Internet geralmente estão em Unicode, enquanto os dados em bancos de dados relacionais costumam ter outras codificações.

Seguindo as etapas descritas neste artigo e no download associado, é possível recuperar dados da Web e juntá-los a dados relacionais armazenados localmente. Além disso, recursos de armazenamento XML nativo de DB2 podem ser aplicados para processar, armazenar e transformar dados baseados em XML (por exemplo, usando a função XMLTABLE para gerar um conjunto de dados relacionais a partir de um documento XML).

Este artigo começa apresentando as UDFs de REST. Depois, fornece exemplos que manipulam informações de texto e binárias na Web. A customização de solicitações REST por meio da configuração de opções de cabeçalho HTTP é descrita. Um exemplo baseado no acesso a alimentações RSS ilustra a integração de dados da Web e de bancos de dados. A manipulação de autenticação e criptografia HTTP é abrangida. O artigo termina com exemplos das funções auxiliares para executar a codificação de URL e de Base64. O artigo inclui um apêndice com o conjunto total de parâmetros de função REST.

Este artigo é acompanhando por um download que inclui as UDFs de REST para DB2 para LUW e DB2 para z/OS e várias amostras. O pacote de download fornece um conjunto escalar básico, bem como algumas funções auxiliares.


Funções escalares REST básicas

As funções escalares básicas fornecem acesso ao conteúdo na Web. As funções REST estão disponíveis para os quatro comandos HTTP mais comuns: GET, POST, PUT e DELETE. Há dois métodos disponíveis: um para manipular o conteúdo binário e um para o conteúdo baseado em texto. O esquema de DB2 para as funções é DB2XML.

Todas as funções REST básicas são escalares e retornam o conteúdo da mensagem de resposta HTTP como BLOB (binário) ou CLOB (texto). As assinaturas de função seguem este padrão:

DB2XML.HTTP<method><type>(url, httpHeader <,
input>)
Tabela 1. Nome do método
métodoGET, POST, PUT, DELETE
tipoBLOB (conteúdo binário) ou CLOB (conteúdo de texto) define o tipo de retorno e o tipo do documento <input>
Tabela 2. Parâmetro de entrada
url(Obrigatório) a URL do recurso que está sendo acessado
httpHeader(opcional) valores de cabeçalho adicional usados com a solicitação
input(POST, PUT apenas) dados enviados com a solicitação, como BLOB ou CLOB

Há um método adicional disponível para executar a solicitação HTTP HEAD . Ele não envia nem recupera dados. Recupere o Web site IBM por meio de HTTP GET:

SELECT 
   DB2XML.HTTPGETCLOB('http://www.ibm.com','') 
FROM SYSIBM.SYSDUMMY1

O resultado é o texto HTML da página da Web IBM como dados de texto CLOB.

Enviando valores de cabeçalho HTTP customizados

Acima, fornecemos uma cadeia de caractere vazia para os valores de cabeçalho HTTP, o que significa que os padrões estão sendo usados ao emitir a mensagem de solicitação. Pode ser necessário fornecer informações de cabeçalho customizadas com uma solicitação (por exemplo, para alterar o tipo de conteúdo ou configurar um campo de cabeçalho "SOAPAction" adicional ao chamar um serviço da Web SOAP).

Com cada método, um documento XML opcional de cabeçalho HTTP pode ser especificado para permitir a definição de valores adicionais de cabeçalho HTTP. O documento de cabeçalho XML deve obedecer ao seguinte formato:

Listagem 1. Formato de cabeçalho HTTP XML
<httpHeader connectionTimeout="10" follwRedirects="true">
	<header name="Accept" value="text/plain,application/xml,*/*;q=0.8" />
	<header name="Accept-Language" value="en-us,en;q=0.5" />
</httpHeader>

Cada campo de cabeçalho customizado é representado por um elemento <header> com atributo de name e value . O elemento-raiz <httpHeader> permite especificar algumas opções adicionais de solicitação por meio de atributos.

Tabela 3. Opções que podem ser especificadas com <httpHeader>
Nome do atributoTipoPadrãoDescrição
connectionTimeoutNúmero inteiroPadrão do sistemaTempo limite em milissegundos
readTimeoutNúmero inteiroPadrão do sistemaTempo limite em milissegundos
followRedirectsOperadores booleanosVerdadeiroDefine se devem ser seguidos os redirecionamentos
useCachesOperadores booleanosVerdadeiroDefine se devem ser usados caches

O documento de cabeçalho XML pode ser fornecido como valor CLOB ou XML nativo (DB2 LUW apenas).

Listagem 2. Chamando um serviço da Web SOAP 1.1 por meio de HTTP POST
SELECT DB2XML.HTTPPOSTCLOB('http://www.webservicex.net//stockquote.asmx',
CAST ('<httpHeader>
       <header name="Content-Type" value="text/xml;charset=utf-8"/>
       <header name="SOAPAction" value="&quot;http://www.webserviceX.NET/GetQuote&quot;"/>
       </httpHeader>' AS CLOB(1K)),
 CAST('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <soap:Body>
             <GetQuote xmlns="http://www.webserviceX.NET/">
                <symbol>IBM</symbol>
             </GetQuote>
          </soap:Body>
       </soap:Envelope>' AS CLOB(10K))
) FROM SYSIBM.SYSDUMMY1;

O resultado é a mensagem de resposta SOAP de serviço da Web como dados de texto CLOB.

Combinando as funções XML a UDFs de REST recuperando uma alimentação de notícias da BBC

Esse exemplo demonstra como recuperar facilmente uma alimentação de notícias da BBC e transformá-la em um conjunto de dados relacionais usando a função XMLTABLE do DB2.

Figura 2. Usando as UDFs de REST e DB2 pureXML para utilizar um feed de notícias
Usando as UDFs de REST e DB2 pureXML para utilizar um feed de notícias

Primeiramente, vamos analisar a alimentação RSS da BBC usando a seguinte instrução:

SELECT DB2XML.HTTPGETCLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','') 
       FROM SYSIBM.SYSDUMMY1;

Agora podemos agrupar uma chamada de função XMLTABLE ao redor para transformar o formato RSS de XML retornado em um conjunto de resultados relacionais.

Listagem 3. Fragmentando o feed de notícias da BBC em um conjunto de dados relacionais
SELECT *
   FROM XMLTABLE('$result/rss/channel/item' 
      PASSING XMLPARSE(
         DOCUMENT 
           DB2XML.HTTPGETBLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','')
      ) as "result"
         COLUMNS 
            title VARCHAR(128) PATH 'title',
            description VARCHAR(1024) PATH 'description',
            link VARCHAR(255) PATH 'link',
			pubDate VARCHAR(20) PATH 'substring(pubDate, 1, 16)'
   ) AS RESULT;

O conjunto de resultados contém quatro colunas: TITLE que contém o título do item de alimentação, DESCRIPTION com a descrição de alimentação, LINK com a URL para o documento de notícias em si e PUBDATE.

Mais exemplos podem ser encontrados no pacote de download deste artigo.

Reunindo os resultados de UDF de REST a uma tabela relacional

Na seção anterior, a função XMLTABLE foi usada para fragmentar os dados XML retornados pela UDF de REST. Nesta seção, o exemplo é levado um passo adiante. O conjunto de resultados fragmentados é reunido a uma tabela de notícias existente com as quatro colunas correspondentes ao título da notícia.

Figura 3. Reunindo os resultados de UDF de REST a uma tabela relacional
Reunindo os resultados de UDF de REST a uma tabela relacional
Listagem 4. Reunindo os resultados de UDF de REST a uma tabela relacional
   SELECT DB2XML.NEWS.*
   FROM XMLTABLE('$result/rss/channel/item' 
      PASSING XMLPARSE(
         DOCUMENT 
           DB2XML.HTTPGETBLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','')
      ) as "result"
         COLUMNS 
            title VARCHAR(128) PATH 'title'
   ) AS RESULT, DB2XML.NEWS
   WHERE RESULT.TITLE = DB2XML.NEWS.TITLE;

Segurança— Autenticação e criptografia

Usando certificados com UDFs de REST

As UDFs de REST aproveitam a Java Secure Socket Extension (JSSE) para obter comunicação SSL (Secure Sockets Layer). A comunicação SSL exige o armazenamento de certificado no cliente a fim de armazenar certificados de servidor. O gerenciamento desse armazenamento pode depender da implementação de JSSE. O IBM JDK tem a sua própria implementação com extensões especiais para z/OS (veja IBM JSSE implementation on z/OS).

As funções REST suportam a autenticação básica de HTTP, bem como a criptografia SSL usando HTTPS.

O exemplo a seguir mostra como mensagens não lidas da sua conta do Google Mail podem ser recuperadas e analisadas em um conjunto de resultados relacionais usando XMLTABLE.

Figura 4. Acessando o Gmail a partir do DB2 com UDFs de REST
Acessando o Gmail a partir do DB2 com UDFs de REST

O acesso ao Gmail é criptografado por SSL e mantido seguro por meio da autenticação básica HTTP ("https" é usado na URL). O Gmail retorna os títulos das mensagens não lidas como alimentação Atom e usamos a função XMLTABLE nesse exemplo para retornar o resultado como conjunto de dados relacionais.

Listagem 5. Recuperando mensagens não lidas do Gmail ao usar autenticação SSL e HTTP
SELECT *
  FROM XMLTABLE('$result/*[local-name()=''feed'']/*[local-name()=''entry'']' 
    PASSING  
       XMLPARSE(DOCUMENT 
 DB2XML.HTTPGETBLOB('https://<username>:<password>@mail.google.com/mail/feed/atom/','')) 
AS "result"
  COLUMNS 
    title VARCHAR(128) PATH '*[local-name()=''title'']',
    summary VARCHAR(1024) PATH '*[local-name()=''summary'']',
    author_name VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''name'']',
    author_email VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''email'']'
) AS RESULT;

O conjunto de resultados consiste em quatro colunas: TITLE, SUMMARY, AUTHOR_NAME e AUTHOR_EMAIL.


Funções de auxiliar

Além das funções REST, encontram-se funções auxiliares para executar codificação/decodificação de URL e de Base64.

Codificação/decodificação de URL

A especificação de URL (RFC1738) define um conjunto de caracteres especiais que precisam ser substituídos por sequências de escape (por exemplo, se usados na cadeia de caractere de consultas de uma URL). O pacote de download possui duas funções para executar a codificação e decodificação de URL. O primeiro parâmetro da função urlEncode é a cadeia de caractere simples. O primeiro parâmetro da função urlDecode é a cadeia de caractere codificada da URL. O segundo parâmetro opcional de ambas as funções é a codificação de conjunto de caracteres a ser usada. Se for fornecido NULL, será usado UTF-8, como recomendado em RFC3986.

Listagem 6. Exemplo de codificação de URL
SELECT DB2XML.URLENCODE(
     'Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com'
	 , NULL) 
       FROM SYSIBM.SYSDUMMY1

Result:	   
--------------------------------------------------------------------
Please+send+and+email+to+report+our+%25+earnings+to+Mark+%26+Lisa+at+marklisa%40xyz.com
Listagem 7. Exemplo de decodificação de URL
SELECT DB2XML.URLDECODE(
'Please+send+and+email+to+report+our+%25+earnings+to+Mark+%26+Lisa+at+marklisa%40xyz.com'
, NULL) 
FROM SYSIBM.SYSDUMMY1

Result:	   
----------------------------------------------------------------------
Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com

Codificação/decodificação de Base64

A codificação Base64 é muito usada na Web para representar dados binários como cadeia de caractere (por exemplo, ao enviar chaves de hash). O pacote de download possui duas funções para executar a codificação e decodificação Base64.

Listagem 8. Exemplo de codificação Base64
SELECT DB2XML.BASE64ENCODE(
 CAST(
 'Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com' 
 AS VARCHAR(100) FOR BIT DATA)) 
 FROM SYSIBM.SYSDUMMY1

Result:
-----------------------------------------------------------------------
UGxlYXNlIHNlbmQgYW5kIGVtYWlsIHRvIHJlcG9ydCBvdXIgJSBlYXJuaW5ncyB0byBNYXJrICYgTGlzYSBhdCBtY
XJrbGlzYUB4eXouY29t
Listagem 9. Exemplo de decodificação Base64
SELECT 
CAST(
   DB2XML.BASE64DECODE(
'UGxlYXNlIHNlbmQgYW5kIGVtYWlsIHRvIHJlcG9ydCBvdXIgJSBlYXJuaW5ncyB0byBNYXJrICYgTGlzYSBhdCBtY
XJrbGlzYUB4eXouY29t') AS VARCHAR(100) FOR MIXED DATA) 
FROM SYSIBM.SYSDUMMY1

Result:
-----------------------------------------------------------------------
Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com

Conclusão

As funções DB2 REST fornecem um modo simples e fácil de acessar recursos na Web de dentro de uma instrução SQL. Apesar da simplicidade das funções, eles são versáteis o suficiente para acessar e consumir dados de muitas fontes. As funções REST apresentadas unem-se com perfeição com os recursos de DB2 pureXML devido ao amplo uso de XML como formato de mensagem na Web. Este artigo explica o uso básico das funções REST e como integrar os dados da Web com os dados do banco de dados. Ele também explica o uso de autenticação e criptografia. São descritas as funções de auxiliar que ajudam na codificação de URL e de Base64.


Agradecimento

Os autores gostariam de agradecer a Ling Ling por revisar o artigo e testar suas instruções.

Apêndice

Tabela 4. Assinaturas de UDF de REST
NomeTipo de retornoAssinaturaInstrução HTTPDescrição
httpGetBlobBLOBhttpGetBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOB(5M)GETRecupera um recurso por URL fornecida por meio de HTTP GET. O recurso é retornado como LOB binário (BLOB).
httpGetClobCLOBhttpGetClob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB(5M)GETRecupera um recurso baseado em texto por URL fornecida por meio de HTTP GET. O recurso é retornado como LOB de caractere (CLOB). A conversão de conjunto de caracteres em página de código de banco de dados é executada, se necessário.
httpPutBlobBLOBhttpPutBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBPUTCria (faz upload) de um recurso binário em URL fornecida usando HTTP PUT. Uma mensagem de resposta é retornada como LOB binário (BLOB) se emitida pelo servidor.
httpPutClobCLOBhttpPutClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBPUTCria (faz upload) de um recurso de texto em URL fornecida usando HTTP PUT. Uma mensagem de resposta é retornada como LOB de caracteres (CLOB) se emitida pelo servidor. É feita a conversão de conjunto de caracteres, se necessário.
httpPostBlobBLOBhttpPostBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOB(5M)POSTAtualiza um recurso binário em URL fornecida usando HTTP POST. A mensagem de resposta é retornada como LOB binário (BLOB).
httpPostClobCLOBhttpPostClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOB(5M)POSTAtualiza um recurso de texto em URL fornecida usando HTTP POST. A mensagem de resposta é retornada como LOB de caracteres (CLOB). É feita a conversão de conjunto de caracteres, se necessário.
httpDeleteBlobBLOBhttpDeleteBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOBDELETEExclui um recurso binário na URL fornecida usando HTTP DELETE. A mensagem de resposta é retornada como LOB binário (BLOB), se for o caso.
httpDeleteClobCLOBhttpDelete(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOBDELETEExclui um recurso de texto na URL fornecida usando HTTP DELETE. A mensagem de resposta é retornada como LOB de caracteres (CLOB), se for o caso. É feita a conversão de conjunto de caracteres, se necessário.
httpBlobBLOBhttpBlob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBqualquer instrução HTTPExecuta uma solicitação HTTP com a instrução fornecida. A mensagem de solicitação pode ser fornecida como LOB binário (BLOB). Uma mensagem de resposta é retornada como LOB binário (BLOB) se emitida pelo servidor.
httpClobCLOBhttpClob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBqualquer instrução HTTPExecuta uma solicitação HTTP com a instrução fornecida. A mensagem de solicitação pode ser fornecida como LOB de caracteres (CLOB). Uma mensagem de resposta é retornada como LOB de caracteres (CLOB) se emitida pelo servidor. É feita a conversão de conjunto de caracteres, se necessário.
httpHeadCLOB/XMLhttpHead(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB (10K)HEADVerifica o cabeçalho HTTP quanto ao recurso solicitado usando HTTP HEAD. Apenas o cabeçalho HTTP é retornado como CLOB/XML.

DB2 para LUW apenas: o documento XML httpHeader também pode ser fornecido como valor de XML nativo em vez de usar CLOB.

Tabela 5. Assinatura das funções de auxiliar
NomeTipo de retornoAssinaturaDescrição
urlEncodeVARCHARurlEncode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)Função auxiliar para executar a codificação de URL do texto fornecido text. O valor encoding define o conjunto de caracteres a ser usado. Ele pode ser definido como NULL, onde UTF-8 é usado como padrão.
urlDecodeVARCHARurlDecode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)Função auxiliar para executar a decodificação de URL do texto fornecido text. O valor encoding define o conjunto de caracteres a ser usado. Ele pode ser definido como NULL, onde UTF-8 é usado como padrão.
base64EncodeVARCHARbase64Encode(text VARCHAR(2732) FOR BIT DATA) RETURNS VARCHAR(4096)Função auxiliar para executar a codificação Base64 dos dados binários fornecidos que retornam os dados como cadeia de caractere codificada em Base64.
base64DecodeVARCHAR FOR BIT DATAbase64Decode(text VARCHAR(4096)) RETURNS VARCHAR(2732) FOR BIT DATAFunção auxiliar para executar a decodificação Base64 dos dados fornecidos codificados em Base64 que retornam os dados como binários.

Download

DescriçãoNomeTamanho
REST UDF download packagedownload.zip169KB

Recursos

Aprender

Obter produtos e tecnologias

  • Faça download de uma versão de teste gratuita do DB2 para Linux, UNIX e Windows.
  • Agora é possível usar o DB2 de graça. Faça o download O DB2 Express-C, uma versão gratuita do DB2 Express Edition para a comunidade que oferece os mesmos recursos principais de dados do DB2 Express Edition e fornece uma base sólida sobre a qual criar e implementar aplicativos.
  • Crie seu próximo projeto de desenvolvimento com a Versão de teste do software IBM, disponível para download diretamente no developerWorks.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management, Desenvolvimento da Web
ArticleID=697123
ArticleTitle=Acessando serviços HTTP e RESTful a partir do DB2: apresentando as funções REST definidas pelo usuário para DB2
publish-date=07042011