HTTPGETBLOB および HTTPGETCLOB
HTTPGETBLOB 関数および HTTPGETCLOB REST 関数は、HTTP GET 要求を介して指定の URL からバイナリーまたはテキスト・ベースのリソースを取り出します。 HTTPGETBLOB はリソースを BLOB(5M) データとして戻します。 HTTPGETCLOB はリソースを CLOB(5M) データとして戻します。 文字セットは、必要な場合にはデータベース・コード・ページに変換されます。
ヒント: HTTP のユーザー定義関数のサンプルは、 Db2 のSQLアプリケーション内で使用し、SQLステートメントを通じて、リモートにあるDb2 のRESTベースのサービスにアクセスすることを目的としています。 Db2 のネイティブRESTサービスと混同しないでください。このサービスは、ウェブ、モバイル、クラウドアプリケーションから Db2 のデータとやりとりする際に、RESTベースのインターフェースを使用することをサポートしています。
スキーマは 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 の値を指定します。 シングル・スペースで headerAttribute と headerAttributeValue の組み合わせを区切ります。
- 名前
- ヘッダー名。
- 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>
