APEX_WEB_SERVICE APIを使用すると、PL/SQLを使用できるアプリケーション内の任意の場所でWebサービスと対話できるため、Application Expressと他のシステムを統合できます。APIには、SOAPおよびRESTful形式のWebサービスをコールするためのプロシージャおよびファンクションが含まれます。また、Webサービスからのレスポンスを解析し、SOAP対応のbase64エンコーディングにエンコード/デコードするファンクションが含まれます。このAPIには、APIからかWebサービス・タイプの標準プロセスを使用するかにかかわらず、WebサービスをコールするときにCookiesおよびHTTPヘッダーを管理するためのパッケージ・グローバルも含まれます。CookiesおよびHTTPヘッダーは、グローバルを移入することによってWebサービスへのコールを起動する前に設定でき、Webサービスのレスポンスから戻されたCookiesおよびHTTPヘッダーは、他のグローバルから読み取ることができます。
トピック:
APEX_WEB_SERVICE APIを使用して、Webサービスを起動し、PL/SQLを使用できるApplication Express内の任意の場所でレスポンスを調べます。
次のような場合に、APEX_WEB_SERVICE APIを使用します。
AJAXを使用してオンデマンド・プロセスでWebサービスを起動する場合。
認証スキームの一部としてWebサービスを起動する場合。
base64でエンコードされたWebサービスにラージ・バイナリ・パラメータを渡す必要がある場合。
検証の一部としてWebサービスを起動する場合。
トピック:
SOAP形式のWebサービスを起動するプロシージャおよびファンクションがあります。プロシージャは、パラメータp_collection_nameによって指定されたコレクションのレスポンスを格納します。ファンクションは、結果をXMLTYPEとして戻します。レスポンスから特定の値を取得するには、結果がコレクションに格納される場合はPARSE_RESPONSEファンクションを、レスポンスがXMLTYPEとして戻される場合はPARSE_XMLファンクションを使用します。base64でエンコードされた文字データとしてバイナリ・パラメータをWebサービスに渡すには、BLOB2CLOBBASE64ファンクションを使用します。逆に、base64でエンコードされたバイナリ・パラメータを含むレスポンスを変換するには、CLOBBASE642BLOBファンクションを使用します。次に、BLOB2CLOBBASE64ファンクションを使用してパラメータをエンコードし、MAKE_REQUESTプロシージャを使用してWebサービスをコールし、PARSE_RESPONSEファンクションを使用してレスポンスから特定の値を抽出する例を示します。
declare
l_filename varchar2(255);
l_BLOB BLOB;
l_CLOB CLOB;
l_envelope CLOB;
l_response_msg varchar2(32767);
BEGIN
IF :P1_FILE IS NOT NULL THEN
SELECT filename, BLOB_CONTENT
INTO l_filename, l_BLOB
FROM APEX_APPLICATION_FILES
WHERE name = :P1_FILE;
l_CLOB := apex_web_service.blob2clobbase64(l_BLOB);
l_envelope := q'!<?xml version='1.0' encoding='UTF-8'?>!';
l_envelope := l_envelope '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:chec="http://www.stellent.com/CheckIn/">
<soapenv:Header/>
<soapenv:Body>
<chec:CheckInUniversal>
<chec:dDocName>'||l_filename||'</chec:dDocName>
<chec:dDocTitle>'||l_filename||'</chec:dDocTitle>
<chec:dDocType>Document</chec:dDocType>
<chec:dDocAuthor>GM</chec:dDocAuthor>
<chec:dSecurityGroup>Public</chec:dSecurityGroup>
<chec:dDocAccount></chec:dDocAccount>
<chec:CustomDocMetaData>
<chec:property>
<chec:name></chec:name>
<chec:value></chec:value>
</chec:property>
</chec:CustomDocMetaData>
<chec:primaryFile>
<chec:fileName>'||l_filename'||</chec:fileName>
<chec:fileContent>'||l_CLOB||'</chec:fileContent>
</chec:primaryFile>
<chec:alternateFile>
<chec:fileName></chec:fileName>
<chec:fileContent></chec:fileContent>
</chec:alternateFile>
<chec:extraProps>
<chec:property>
<chec:name></chec:name>
<chec:value></chec:value>
</chec:property>
</chec:extraProps>
</chec:CheckInUniversal>
</soapenv:Body>
</soapenv:Envelope>';
apex_web_service.make_request(
p_url => 'http://127.0.0.1/idc/idcplg',
p_action => 'http://www.stellent.com/CheckIn/',
p_collection_name => 'STELLENT_CHECKIN',
p_envelope => l_envelope,
p_username => 'sysadmin',
p_password => 'welcome1' );
l_response_msg := apex_web_service.parse_response(
p_collection_name=>'STELLENT_CHECKIN',
p_xpath=>'//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()',
p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"');
:P1_RES_MSG := l_response_msg;
END IF;
END;
RESTful形式のWebサービスでは、SOAPより単純なアーキテクチャを使用します。通常、RESTful形式のWebサービスへの入力は、名前/値ペアのコレクションです。レスポンスは、XML文書またはカンマ区切りのレスポンスやJSONなどの単純なテキストです。次に、AJAXからコールできるアプリケーション・プロセスで使用されているMAKE_REST_REQUESTの例を示します。
declare
l_clob clob;
l_buffer varchar2(32767);
l_amount number;
l_offset number;
begin
l_clob := apex_web_service.make_rest_request(
p_url => 'http://us.music.yahooapis.com/ video/v1/list/published/popular',
p_http_method => 'GET',
p_parm_name => apex_util.string_to_table('appid:format'),
p_parm_value => apex_util.string_to_table(apex_application.g_x01||':'||apex_application.g_x02));
l_amount := 32000;
l_offset := 1;
begin
loop
dbms_lob.read( l_clob, l_amount, l_offset, l_buffer );
htp.p(l_buffer);
l_offset := l_offset + l_amount;
l_amount := 32000;
end loop;
exception
when no_data_found then
null;
end;
end;
Application Expressでサポートされているいずれかのメソッドを使用してWebサービスを起動すると、WebサービスのレスポンスにCookiesまたはHTTPヘッダーが含まれていた場合、g_response_cookiesおよびg_headersグローバルが移入されます。これらのグローバルは問合せが可能で、コレクションに情報を格納できます。次に、APEX_WEB_SERVICEグローバルを問い合せてCookieおよびHTTPヘッダーのレスポンスをコレクションに格納する例を示します。
declare
i number;
secure varchar2(1);
begin
apex_collection.create_or_truncate_collection('P31_RESP_COOKIES');
for i in 1.. apex_web_service.g_response_cookies.count loop
IF (apex_web_service.g_response_cookies(i).secure) THEN
secure := 'Y';
ELSE
secure := 'N';
END IF;
apex_collection.add_member(p_collection_name => 'P31_RESP_COOKIES',
p_c001 => apex_web_service.g_response_cookies(i).name,
p_c002 => apex_web_service.g_response_cookies(i).value,
p_c003 => apex_web_service.g_response_cookies(i).domain,
p_c004 => apex_web_service.g_response_cookies(i).expire,
p_c005 => apex_web_service.g_response_cookies(i).path,
p_c006 => secure,
p_c007 => apex_web_service.g_response_cookies(i).version );
end loop;
end;
declare
i number;
begin
apex_collection.create_or_truncate_collection('P31_RESP_HEADERS');
for i in 1.. apex_web_service.g_headers.count loop
apex_collection.add_member(p_collection_name => 'P31_RESP_HEADERS',
p_c001 => apex_web_service.g_headers(i).name,
p_c002 => apex_web_service.g_headers(i).value,
p_c003 => apex_web_service.g_status_code);
end loop;
end;
Webサービスを起動するプロセスの前に、グローバルg_request_cookiesおよびg_request_headersを移入することによって、Webサービス・リクエストとともに送信する必要があるCookiesおよびHTTPヘッダーを設定します。次に、グローバルを移入して、リクエストとともにCookiesおよびHTTPヘッダーを送信する例を示します。
for c1 in (select seq_id, c001, c002, c003, c004, c005, c006, c007
from apex_collections
where collection_name = 'P31_RESP_COOKIES' ) loop
apex_web_service.g_request_cookies(c1.seq_id).name := c1.c001;
apex_web_service.g_request_cookies(c1.seq_id).value := c1.c002;
apex_web_service.g_request_cookies(c1.seq_id).domain := c1.c003;
apex_web_service.g_request_cookies(c1.seq_id).expire := c1.c004;
apex_web_service.g_request_cookies(c1.seq_id).path := c1.c005;
if c1.c006 = 'Y' then
apex_web_service.g_request_cookies(c1.seq_id).secure := true;
else
apex_web_service.g_request_cookies(c1.seq_id).secure := false;
end if;
apex_web_service.g_request_cookies(c1.seq_id).version := c1.c007;
end loop;
for c1 in (select seq_id, c001, c002
from apex_collections
where collection_name = 'P31_RESP_HEADERS' ) loop
apex_web_service.g_request_headers(c1.seq_id).name := c1.c001;
apex_web_service.g_request_headers(c1.seq_id).value := c1.c002;
end loop;
このファンクションを使用して、BLOBデータ型を、base64でエンコードされたCLOBに変換します。通常、バイナリをWebサービスへの入力として送信する場合に使用します。
構文
APEX_WEB_SERVICE.BLOB2CLOBBASE64 (
p_blob IN BLOB)
RETURN CLOB;
パラメータ
表22-1では、BLOB2CLOBBASE64ファンクションで使用可能なパラメータについて説明します。
例
次に、apex_application_filesビューからアンロードされたファイルを取得し、BLOBをbase64でエンコードされたCLOBに変換する例を示します。
declare
l_clob CLOB;
l_blob BLOB;
begin
SELECT BLOB_CONTENT
INTO l_BLOB
FROM APEX_APPLICATION_FILES
WHERE name = :P1_FILE;
l_CLOB := apex_web_service.blob2clobbase64(l_BLOB);
end;
このファンクションを使用して、base64でエンコードされたCLOBデータ型をBLOBに変換します。通常、バイナリ・パラメータを含むWebサービスから出力を取得する場合に使用します。
構文
APEX_WEB_SERVICE.CLOBBASE642BLOB (
p_clob IN CLOB)
RETURN BLOB;
パラメータ
表22-2では、CLOBBASE642BLOBファンクションで使用可能なパラメータについて説明します。
例
次に、base64でエンコードされたノードをXML文書からCLOBとして取得し、BLOBに変換する例を示します。
declare
l_base64 CLOB;
l_blob BLOB;
l_xml XMLTYPE;
begin
l_base64 := apex_web_service.parse_xml_clob(l_xml, ' //runReportReturn/reportBytes/text()');
l_blob := apex_web_service.clobbase642blob(l_base64);
end;
このプロシージャを使用して、指定されたSOAPエンベロープとともにSOAP形式のWebサービスを起動し、結果をコレクションに格納します。
構文
APEX_WEB_SERVICE.MAKE_REQUEST (
p_url IN VARCHAR2,
p_action IN VARCHAR2 default null,
p_version IN VARCHAR2 default '1.1',
p_collection_name IN VARCHAR2 default null,
p_envelope IN CLOB,
p_username IN VARCHAR2 default null,
p_password IN VARCHAR2 default null,
p_proxy_override IN VARCHAR2 default null,
p_transfer_timeout IN NUMBER default 180,
p_wallet_path IN VARCHAR2 default null,
p_wallet_pwd IN VARCHAR2 default null );
パラメータ
表22-3では、MAKE_REQUESTプロシージャで使用可能なパラメータについて説明します。
表22-3 MAKE_REQUESTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
WebサービスのURLエンドポイント。 |
|
|
起動する操作に対応するSOAPアクション。 |
|
|
SOAPのバージョン(1.1または1.2)。デフォルトは1.1。 |
|
|
レスポンスを格納するコレクションの名前。 |
|
|
サービスにポストするSOAPエンベロープ。 |
|
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
|
このサービスに基本認証が必要な場合はパスワード。 |
|
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
|
レスポンスを待機する時間(秒単位)。 |
|
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_requestプロシージャを使用して、SOAP形式のWebサービスからムービーのリストを取得します。レスポンスはApplication ExpressコレクションMOVIE_LISTINGSに格納されます。
declare
l_envelope CLOB;
BEGIN
l_envelope := '<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.ignyte.com/whatsshowing"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<tns:GetTheatersAndMovies>
<tns:zipCode>43221</tns:zipCode>
<tns:radius>5</tns:radius>
</tns:GetTheatersAndMovies>
</soap:Body>
</soap:Envelope>';
apex_web_service.make_request(
p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx',
p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies',
p_collection_name => 'MOVIE_LISTINGS',
p_envelope => l_envelope
);
END;
このファンクションを使用して、指定されたSOAPエンベロープとともにSOAP形式のWebサービスを起動し、XMLTYPEで結果を戻します。
構文
APEX_WEB_SERVICE.MAKE_REQUEST (
p_url IN VARCHAR2,
p_action IN VARCHAR2 default null,
p_version IN VARCHAR2 default '1.1',
p_envelope IN CLOB,
p_username IN VARCHAR2 default null,
p_password IN VARCHAR2 default null,
p_proxy_override IN VARCHAR2 default null,
p_transfer_timeout IN NUMBER default 180,
p_wallet_path IN VARCHAR2 default null,
p_wallet_pwd IN VARCHAR2 default null )
RETURN XMLTYPE;
パラメータ
表22-4では、MAKE_REQUESTファンクションで使用可能なパラメータについて説明します。
表22-4 MAKE_REQUESTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
WebサービスのURLエンドポイント。 |
|
|
起動する操作に対応するSOAPアクション。 |
|
|
SOAPのバージョン(1.1または1.2)。デフォルトは1.1。 |
|
|
サービスにポストするSOAPエンベロープ。 |
|
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
|
このサービスに基本認証が必要な場合はパスワード。 |
|
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
|
レスポンスを待機する時間(秒単位)。 |
|
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_requestファンクションを使用して、ムービーのリストを戻すSOAP形式のWebサービスを起動します。結果はXMLTYPEで格納されます。
declare
l_envelope CLOB;
l_xml XMLTYPE;
BEGIN
l_envelope := ' <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.ignyte.com/whatsshowing"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<tns:GetTheatersAndMovies>
<tns:zipCode>43221</tns:zipCode>
<tns:radius>5</tns:radius>
</tns:GetTheatersAndMovies>
</soap:Body>
</soap:Envelope>';
l_xml := apex_web_service.make_request(
p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx',
p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies',
p_envelope => l_envelope
);
END
このファンクションを使用して、名前/値ペア、キャラクタベースのペーロード、バイナリ・ペイロードのいずれかを指定し、レスポンスをCLOBで戻して、RESTful形式のWebサービスを起動します。
構文
APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url IN VARCHAR2,
p_http_method IN VARCHAR2,
p_username IN VARCHAR2 default null,
p_password IN VARCHAR2 default null,
p_proxy_override IN VARCHAR2 default null,
p_transfer_timeout IN NUMBER default 180,
p_body IN CLOB default empty_clob(),
p_body_blob IN BLOB default empty_blob(),
p_parm_name IN apex_application_global.VC_ARR2 default empty_vc_arr,
p_parm_value IN apex_application_global.VC_ARR2 default empty_vc_arr,
p_wallet_path IN VARCHAR2 default null,
p_wallet_pwd IN VARCHAR2 default null )
RETURN CLOB;
パラメータ
表22-5では、MAKE_REST_REQUESTファンクションで使用可能なパラメータについて説明します。
表22-5 MAKE_REST_REQUESTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
WebサービスのURLエンドポイント。 |
|
|
使用するHTTPメソッド(PUT、POST、GET、HEADまたはDELETE)。 |
|
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
|
このサービスに基本認証が必要な場合はパスワード。 |
|
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
|
レスポンスを待機する時間(秒単位)。 |
|
|
CLOBとして送信するHTTPペイロード。 |
|
|
バイナリBLOBとして送信するHTTPペイロード。ファイルのポストなど。 |
|
|
名前/値ペアで使用するパラメータの名前。 |
|
|
名前/値ペアで使用するパラメータの値。 |
|
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_rest_requestファンクションを使用して、パラメータを名前/値ペアとしてサービスに渡すRESTful形式のWebサービスをコールします。サービスからのレスポンスはローカルで宣言されたCLOBで格納されます。
declare
l_clob CLOB;
BEGIN
l_clob := apex_web_service.make_rest_request(
p_url => 'http://us.music.yahooapis.com/ video/v1/list/published/popular',
p_http_method => 'GET',
p_parm_name => apex_util.string_to_table('appid:format'),
p_parm_value => apex_util.string_to_table('xyz:xml'));
END
このファンクションを使用して、コレクションに格納されたWebサービスからのレスポンスを解析し、結果をVARCHAR2型で戻します。
構文
APEX_WEB_SERVICE.PARSE_RESPONSE (
p_collection_name IN VARCHAR2,
p_xpath IN VARCHAR2,
p_ns IN VARCHAR2 default null )
RETURN VARCHAR2;
パラメータ
表22-6では、PARSE_RESPONSEファンクションで使用可能なパラメータについて説明します。
表22-6 PARSE_RESPONSEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
Webサービスのレスポンスが格納されるコレクションの名前。 |
|
|
目的のノードへのXPath式。 |
|
|
目的のノードへのネームスペース。 |
例
次の例では、STELLENT_CHECKINというコレクションに格納されたレスポンスを解析し、値をローカルで宣言されたVARCHAR2変数に格納します。
declare
l_response_msg VARCHAR2(4000);
BEGIN
l_response_msg := apex_web_service.parse_response(
p_collection_name=>'STELLENT_CHECKIN',
p_xpath =>
'//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()',
p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"');
END;
このファンクションを使用して、コレクションに格納されたWebサービスからのレスポンスを解析し、結果をCLOB型で戻します。
構文
APEX_WEB_SERVICE.PARSE_RESPONSE_CLOB (
p_collection_name IN VARCHAR2,
p_xpath IN VARCHAR2,
p_ns IN VARCHAR2 default null )
RETURN CLOB;
パラメータ
表22-7では、PARSE_RESPONSE_CLOBファンクションで使用可能なパラメータについて説明します。
表22-7 PARSE_RESPONSE _CLOBファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
Webサービスのレスポンスが格納されるコレクションの名前。 |
|
|
目的のノードへのXPath式。 |
|
|
目的のノードへのネームスペース。 |
例
次の例では、STELLENT_CHECKINというコレクションに格納されたレスポンスを解析し、値をローカルで宣言されたCLOB変数に格納します。
declare
l_response_msg CLOB;
BEGIN
l_response_msg := apex_web_service.parse_response_clob(
p_collection_name=>'STELLENT_CHECKIN',
p_xpath=>
'//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()',
p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"');
END;
このファンクションを使用して、XMLTYPEとして戻されたWebサービスからのレスポンスを解析し、リクエストされた値をVARCHAR2として戻します。
構文
APEX_WEB_SERVICE.PARSE_XML (
p_xml IN XMLTYPE,
p_xpath IN VARCHAR2,
p_ns IN VARCHAR2 default null )
RETURN VARCHAR2;
パラメータ
表22-8に、PARSE_XMLファンクションで使用可能なパラメータを示します。
表22-8 PARSE_XMLファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
解析するXMLTYPEとしてのXML文書。 |
|
|
目的のノードへのXPath式。 |
|
|
目的のノードへのネームスペース。 |
例
次の例では、make_requestファンクションを使用してWebサービスをコールし、結果をローカルのXMLTYPE変数に格納します。その後、XMLTYPEに格納されたXML文書の特定ノードの取得にparse_xmlファンクションが使用され、その結果をローカルに宣言されたVARCHAR2変数に格納します。
declare
l_envelope CLOB;
l_xml XMLTYPE;
l_movie VARCHAR2(4000);
BEGIN
l_envelope := ' <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.ignyte.com/whatsshowing"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<tns:GetTheatersAndMovies>
<tns:zipCode>43221</tns:zipCode>
<tns:radius>5</tns:radius>
</tns:GetTheatersAndMovies>
</soap:Body>
</soap:Envelope>';
l_xml := apex_web_service.make_request(
p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx',
p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies',
p_envelope => l_envelope );
l_movie := apex_web_service.parse_xml(
p_xml => l_xml,
p_xpath => ' //GetTheatersAndMoviesResponse/GetTheatersAndMoviesResult/Theater/Movies/Movie/Name[1]',
p_ns => ' xmlns="http://www.ignyte.com/whatsshowing"' );
END;
このファンクションを使用して、XMLTYPEとして戻されたWebサービスからのレスポンスを解析し、リクエストされた値をCLOBとして戻します。
構文
APEX_WEB_SERVICE.PARSE_XML_CLOB (
p_xml IN XMLTYPE,
p_xpath IN VARCHAR2,
p_ns IN VARCHAR2 default null )
RETURN VARCHAR2;
パラメータ
表22-9では、PARSE_XML_CLOBファンクションで使用可能なパラメータについて説明します。
表22-9 PARSE_XML_CLOBファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
解析するXMLTYPEとしてのXML文書。 |
|
|
目的のノードへのXPath式。 |
|
|
目的のノードへのネームスペース。 |
例
次の例では、make_requestファンクションを使用してWebサービスをコールし、結果をローカルのXMLTYPE変数に格納します。その後、XMLTYPEに格納されたXML文書の特定ノードの取得にparse_xmlファンクションが使用され、その結果をローカルに宣言されたVARCHAR2変数に格納します。
declare
l_envelope CLOB;
l_xml XMLTYPE;
l_movie CLOB;
BEGIN
l_envelope := ' <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.ignyte.com/whatsshowing"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<tns:GetTheatersAndMovies>
<tns:zipCode>43221</tns:zipCode>
<tns:radius>5</tns:radius>
</tns:GetTheatersAndMovies>
</soap:Body>
</soap:Envelope>';
l_xml := apex_web_service.make_request(
p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx',
p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies',
p_envelope => l_envelope );
l_movie := apex_web_service.parse_xml_clob(
p_xml => l_xml,
p_xpath => ' //GetTheatersAndMoviesResponse/GetTheatersAndMoviesResult/Theater/Movies/Movie/Name[1]',
p_ns => ' xmlns="http://www.ignyte.com/whatsshowing"' );
END;