HTTPGETBLOB および HTTPGETCLOB

HTTPGETBLOB 関数および HTTPGETCLOB REST 関数は、HTTP GET 要求を介して指定の URL からバイナリーまたはテキスト・ベースのリソースを取り出します。 HTTPGETBLOB はリソースを BLOB(5M) データとして戻します。 HTTPGETCLOB はリソースを CLOB(5M) データとして戻します。 文字セットは、必要な場合にはデータベース・コード・ページに変換されます。

ヒント: HTTP のユーザー定義関数のサンプルは、 Db2 のSQLアプリケーション内で使用し、SQLステートメントを通じて、リモートにあるDb2 のRESTベースのサービスにアクセスすることを目的としています。 Db2 のネイティブRESTサービスと混同しないでください。このサービスは、ウェブ、モバイル、クラウドアプリケーションから Db2 のデータとやりとりする際に、RESTベースのインターフェースを使用することをサポートしています。
構文図を読むビジュアルシンタックスダイアグラムをスキップするHTTPGETBLOBHTTPGETCLOB( url,httpHeader)

スキーマは DB2XML です。

url
アクセスされるリソースの URL を指定します。 この引数は VARCHAR(2048) 値として定義されます。
httpHeader
オプションのヘッダー XML 文書を指定します。 この引数は、CLOB(10K) 値として定義されます。

XML ヘッダー文書は、以下の形式で追加の HTTP ヘッダー値を指定できます。

<httpHeader headerAttribute="headerAttributeValue">
        <header name="name" value="value" />
</httpHeader>
headerAttribute
以下のオプション属性のいずれかを指定します。
connectTimeout
ミリ秒単位で接続タイムアウトしきい値の整数値を指定します。
readTimeout
ミリ秒単位で読み取りタイムアウトしきい値の整数値を指定します。
followRedirects
リダイレクトが続くかどうかを指定します。 これはブール値です。
useCaches
キャッシュを使用するかどうかを指定します。 これはブール値です。
responseMsgFormat
サーバーがユーザー定義関数にエラー・メッセージを返すときに、ユーザー定義関数が呼び出し元に以下の値を戻すことを示す、ヘッダー属性値の errorTagged を指定します。
  • SQLCODE 0
  • サーバーからのエラー・メッセージの形式は、以下のとおりです。
    <error httprc="{HTTP-status-code}">
      {error-message-returned-from-server}
    </error>
headerAttributeValue
headerAttribute の値を指定します。 シングル・スペースで headerAttributeheaderAttributeValue の組み合わせを区切ります。
名前
ヘッダー名。
value
ヘッダー値。

このセクションの例では、以下の要件が満たされていることを前提としています。
  • db2restudf.jar は CLASSPATH に定義されています。
  • REST ユーザー定義関数 (UDF) が作成されました。
  • SQL文で指定されたサーバーは稼働中です。

ほとんどの場合、表示される結果は、出力の関連部分のみを含むように切り捨てられます。

例 1. 以下のSQL文は、 www.ibm.com のウェブページからデータを取得します。

SELECT DB2XML.HTTPGETCLOB(                       
   CAST ('https://www.ibm.com' AS VARCHAR(2048)),
   CAST(NULL AS CLOB(1K)))                       
 FROM SYSIBM.SYSDUMMY1

出力は以下のようになります。

<!doctype html>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width"/>
  <meta charSet="utf-8"/><title>IBM - United States</title>
  <link rel="canonical" href="https://www.ibm.com/us-en"/>
  <meta name="robots" content="index,follow"/>
  <meta name="description" content="For more than a century IBM has been dedicated ..."/>
  <meta name="keywords" content="IBM"/>
...
</html>

例 2 以下のSQLステートメントは、ISBN識別子に基づく書籍に関する情報を、JSON形式で取得します

SELECT DB2XML.HTTPGETCLOB(
   CAST ('https://www.googleapis.com/books/v1/volumes?q=isbn:9781583478608' AS VARCHAR(255)),
   CAST(NULL AS CLOB(1K)))
 FROM SYSIBM.SYSDUMMY1

出力は以下のようになります。

{
 "kind": "books#volumes",
 "totalItems": 1,
 "items": [
  {
   "kind": "books#volume",
   "id": "7qGQvgAACAAJ",
   "etag": "qov9fok2EyI",
   "selfLink": "https://www.googleapis.com/books/v1/volumes/7qGQvgAACAAJ",
   "volumeInfo": {
    "title": "DB2 12 for Z/OS--The #1 Enterprise Database",
    "subtitle": "SECURE, SEAMLESS INTEGRATION for an Analytics, Mobile and Cloud World",
    "authors": [
     "Surekha Parekh"
    ],
    "publisher": "MC Press",
    "publishedDate": "2016-11-01",
    ...
}
  

例 3. 以下のSQLステートメントは、 www.geonames.org ウェブサイトから情報を取得します。 結果はXML形式です。

SELECT DB2XML.HTTPGETCLOB(                                      
         CAST('http://www.geonames.org/countryInfo?lang=' ||
          DB2XML.URLENCODE('en','') ||                      
          '&country=' ||                                    
          DB2XML.URLENCODE('us','') ||                      
          '&type=XML' AS VARCHAR(255)),                         
                CAST(NULL AS CLOB(1K)))                         
FROM SYSIBM.SYSDUMMY1                                         

このステートメントは、以下のような出力を返します


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <geonames>
  <country>
    <countryCode>US</countryCode>
    <countryName>United States</countryName>
    <isoNumeric>840</isoNumeric>
    <isoAlpha3>USA</isoAlpha3>
    <fipsCode>US</fipsCode>
    <continentName>North America</continentName>
    <capital>Washington</capital>
    <areaInSqKm>9629091.0</areaInSqKm>
    <population>327167434</population>
    <currencyCode>USD</currencyCode>
    <languages>en-US,es-US,haw,fr</languages>
    <geonameId>6252001</geonameId>
    <west>-124.733692</west>
    <north>49.384358</north>
    <east>-66.949607</east>
    <south>24.544093</south>
    <postalCodeFormat>#####-####</postalCodeFormat>
  </country>
 </geonames>