DBMS_CLOUD REST API
前提条件
開発者は、Oracle Public Cloud、マルチクラウドまたはExadata Cloud@CustomerにデプロイされたAutonomous DatabaseでDBMS_CLOUDプロシージャを使用できます。
デプロイメントの選択肢に応じて、Amazon S3、Azure Blob StorageおよびGoogle Cloud Storageサービス・プロバイダでDBMS_CLOUD REST APIを使用するには、次の前提条件を満たす必要があります。
- Oracle Cloud InfrastructureドキュメンテーションのNAT Gatewayの作成の説明に従って、Autonomous Databaseリソースが存在するVirtual Cloud Network (VCN)でNATゲートウェイを作成します。
- NAT gatewayを作成したら、ルート・ルールおよびエグレス・セキュリティ・ルールの各サブネット(VCN内)を追加して、これらのリソースがゲートウェイを使用してAzure ADインスタンスから公開キーを取得できるようにします:Autonomous Databaseリソースが存在します:
- サブネットの「サブネットの詳細」ページに移動します。
- 「Subnet Information」タブで、サブネットの「Route Table」の名前をクリックして、その「Route Table Details」ページを表示します。
- 既存のルート・ルールの表で、次の特性を持つルールがすでに存在します:
- 宛先: 0.0.0.0/0
- ターゲット・タイプ: NAT Gateway
- ターゲット: VCN内に作成したNATゲートウェイの名前
このようなルールが存在しない場合は、「ルート・ルールの追加」をクリックし、これらの特性を持つルート・ルールを追加します。
- サブネットの「サブネットの詳細」ページに戻ります。
- サブネットの「セキュリティ・リスト」表で、サブネットのセキュリティ・リストの名前をクリックして、その「セキュリティ・リストの詳細」ページを表示します。
- サイド・メニューの「リソース」で、「エグレス・ルール」をクリックします。
- 既存のエグレス・ルールの表で、次の特性を持つルールがすでに存在します:
- 宛先タイプ: CIDR
- 宛先: 0.0.0.0/0
- IPプロトコル: TCP
- ソース・ポート範囲: 443
- 宛先ポート範囲: すべて
そのようなルールが存在しない場合は、「エグレス・ルールの追加」をクリックし、これらの特性を持つエグレス・ルールを追加します。
環境のHTTPプロキシ設定では、データベースがクラウド・サービス・プロバイダにアクセスできるようにする必要があります。
ノート:
HTTPプロキシを含むネットワーク構成は、Exadataインフラストラクチャが「アクティブ化が必要」状態になるまで編集できます。いったんアクティブ化すると、それらの設定は編集できません。すでにプロビジョニングされているExadataインフラストラクチャのHTTPプロキシを設定するには、My Oracle Supportでサービス・リクエスト(SR)が必要です。詳細は、My Oracle Supportでのサービス・リクエストの作成を参照してください。
DBMS_CLOUD REST API
この項では、Autonomous Databaseで提供されるDBMS_CLOUD
REST APIについて説明します。
REST API | 説明 |
---|---|
このファンクションは、Autonomous DatabaseでHTTPレスポンス・ヘッダーをJSONオブジェクト内のJSONデータとして返します。 | |
このファンクションは、Autonomous DatabaseでHTTPレスポンスをTEXT形式(VARCHAR2 またはCLOB )で戻します。通常、ほとんどのクラウドREST APIはJSONレスポンスをテキスト形式で戻します。この関数は、HTTPレスポンスがテキスト形式であることが予想される場合に役立ちます。
|
|
このファンクションは、構成された結果キャッシュ・サイズを返します。 |
|
このファンクションは、Autonomous DatabaseでHTTPリクエストを開始してレスポンスを取得し、レスポンスを終了します。このファンクションは、引数を使用してクラウドREST APIリクエストを送信するためのワークフローを提供し、レスポンス・コードおよびペイロードを返します。 | |
このプロシージャは、現在のセッションの最大キャッシュ・サイズを設定します。 |
DBMS_CLOUD REST APIの概要
アプリケーションでPL/SQLを使用しているときに、クラウドREST APIをコールする必要がある場合、DBMS_CLOUD.SEND_REQUEST
を使用してREST APIリクエストを送信できます。
DBMS_CLOUD
REST APIファンクションを使用すると、DBMS_CLOUD.SEND_REQUEST
を使用してHTTP
リクエストを行い、結果を取得して保存できます。これらのファンクションは、サポートされている次のクラウド・サービスを使用して任意のREST APIをコールできる汎用APIを提供します:
- Oracle Cloud Infrastructure
Oracle Cloud Infrastructure REST APIの詳細は、「APIリファレンスおよびエンドポイント」を参照してください。
- Azure Cloud 脚注1
Azure REST APIの詳細は、Azure REST APIリファレンスを参照してください。
DBMS_CLOUD REST APIの定数
DBMS_CLOUD.SEND_REQUEST
を使用してHTTP
リクエストを行うためのDBMS_CLOUD
定数について説明します。
DBMS_CLOUD
は、GET
、PUT
、POST
、HEAD
およびDELETE
HTTPメソッドをサポートしています。HTTPリクエストに使用されるREST APIメソッドは通常、クラウドREST APIのドキュメントに記載されています。
名前 | タイプ | Value |
---|---|---|
METHOD_DELETE |
VARCHAR2(6) |
'DELETE' |
METHOD_GET |
VARCHAR2(3) |
'GET' |
METHOD_HEAD |
VARCHAR2(4) |
'HEAD' |
METHOD_POST |
VARCHAR2(4) |
'POST' |
METHOD_PUT |
VARCHAR2(3) |
'PUT' |
DBMS_CLOUD REST APIの結果キャッシュ
DBMS_CLOUD.SEND_REQUEST
でcache
パラメータをtrueに設定すると、DBMS_CLOUD
REST APIの結果を保存できます。SESSION_CLOUD_API_RESULTS
ビューは、REST APIの結果を保存するときに使用できる列を示します。
デフォルトでは、DBMS_CLOUD
REST APIコールはセッションの結果を保存しません。この場合、DBMS_CLOUD.SEND_REQUEST
ファンクションを使用して結果を返します。
DBMS_CLOUD.SEND_REQUEST
を使用してcache
パラメータにTRUE
を設定すると、結果が保存され、SESSION_CLOUD_API_RESULTS
ビューで過去の結果を表示できます。DBMS_CLOUD
REST APIリクエストの履歴結果の保存および問合せは、アプリケーションで以前の結果を操作する必要がある場合に役立ちます。
たとえば、最近のDBMS_CLOUD
REST APIの結果を問い合せるには、SESSION_CLOUD_API_RESULTS
ビューを使用します:
SELECT timestamp FROM SESSION_CLOUD_API_RESULTS;
DBMS_CLOUD.SEND_REQUEST
を使用してDBMS_CLOUD
REST APIの結果を保存すると、保存されたデータは同じセッション(接続)内でのみ使用可能です。セッションが終了すると、保存されたデータは使用できなくなります。
DBMS_CLOUD.GET_API_RESULT_CACHE_SIZE
およびDBMS_CLOUD.SET_API_RESULT_CACHE_SIZE
を使用して、DBMS_CLOUD
REST APIキャッシュ・サイズを表示および設定し、キャッシュを無効にします。
DBMS_CLOUD REST APIの結果のcache_scopeパラメータ
DBMS_CLOUD.SEND_REQUEST
を使用してDBMS_CLOUD
REST APIの結果を保存すると、cache_scope
の値に基づいてSESSION_CLOUD_API_RESULTS
の結果へのアクセスが提供されます。
デフォルトでは、cache_scope
は'PRIVATE'
であり、セッションの現在のユーザーのみが結果にアクセスできます。cache_scope
を'PUBLIC'
に設定すると、すべてのセッション・ユーザーが結果にアクセスできます。cache_scope
のデフォルト値の指定では、各ユーザーは、実行者権限で起動するプロシージャによって生成されたDBMS_CLOUD.SEND_REQUEST
REST APIの結果のみを表示できます。セッションでDBMS_CLOUD.SEND_REQUEST
を起動する場合、cache_scope
の値に基づいて、現在のユーザーがキャッシュ内の結果を表示できるかどうかを決定する3つの可能性があります:
-
ユーザーが
DBMS_CLOUD.SEND_REQUEST
を最上位レベルの文として直接実行し、DBMS_CLOUD.SEND_REQUEST
をコールすると、REST APIの結果は同じユーザー名で保存されます。この場合、cache_scope
に設定されたデフォルト値の'PRIVATE'
ですべての結果にアクセスできます。 -
ユーザーがラッパー実行者権限プロシージャを記述し、現在のユーザーとして
DBMS_CLOUD.SEND_REQUEST
によるコールでプロシージャをコールすると、REST APIの結果は同じユーザー名で保存されます。この場合、cache_scope
に設定されたデフォルト値の'PRIVATE'
ですべての結果にアクセスできます。 -
ユーザーがラッパー定義者権限プロシージャを記述し、そのプロシージャを別のユーザーが所有します。プロシージャ内で
DBMS_CLOUD.SEND_REQUEST
をコールすると、結果はプロシージャ所有者のユーザー名で保存されます。この場合、別の定義者権限ユーザーが
DBMS_CLOUD.SEND_REQUEST
を起動すると、REST APIの結果はその定義者プロシージャの所有者を使用して保存されます。この場合、デフォルトでは、cache_scope
が'PRIVATE'
であると、実行者セッションでは結果を表示できません。定義者プロシージャの所有者が、起動しているセッション・ユーザーに結果を使用できるようにする場合は、
DBMS_CLOUD.SEND_REQUEST
でcache_scope
を'PUBLIC'
に設定する必要があります。
DBMS_CLOUD REST API SESSION_CLOUD_API_RESULTSビュー
DBMS_CLOUD.SEND_REQUEST
でcache
パラメータをtrueに設定すると、DBMS_CLOUD
REST APIの結果を保存できます。SESSION_CLOUD_API_RESULTS
ビューは、REST APIの結果を保存するときに使用できる列を示します。
SESSION_CLOUD_API_RESULTS
ビューは、DBMS_CLOUD.SEND_REQUEST
を使用して結果をキャッシュする場合に作成されるビューです。ユーザー・セッションに属する履歴結果を問い合せることができます。セッションが終了すると、SESSION_CLOUD_API_RESULTS
のデータはパージされます。
列 | 説明 |
---|---|
URI |
DBMS_CLOUD REST APIリクエストURL
|
TIMESTAMP |
DBMS_CLOUD REST APIレスポンス・タイムスタンプ
|
CLOUD_TYPE |
DBMS_CLOUD REST APIクラウド・タイプ(Oracle Cloud InfrastructureやAZURE_BLOBなど)
|
REQUEST_METHOD |
DBMS_CLOUD REST APIリクエスト・メソッド(GET 、PUT 、HEAD など) |
REQUEST_HEADERS |
DBMS_CLOUD REST APIリクエスト・ヘッダー
|
REQUEST_BODY_TEXT |
DBMS_CLOUD REST APIリクエスト本文(CLOB ) |
RESPONSE_STATUS_CODE |
DBMS_CLOUD REST APIレスポンス・ステータス・コード(200(OK) 、404(Not Found) など) |
RESPONSE_HEADERS |
DBMS_CLOUD REST APIレスポンス・ヘッダー
|
RESPONSE_BODY_TEXT |
DBMS_CLOUD REST APIレスポンス本文(CLOB ) |
SCOPE |
|
GET_RESPONSE_HEADERSファンクション
このファンクションは、HTTPレスポンス・ヘッダーをJSONオブジェクト内のJSONデータとして返します。
構文
DBMS_CLOUD.GET_RESPONSE_HEADERS
(
resp IN DBMS_CLOUD_TYPES.resp)
RETURN JSON_OBJECT_T;
Parameters
パラメータ | 説明 |
---|---|
resp |
|
例外
例外 | エラー・コード | 説明 |
---|---|---|
invalid_response |
ORA-20025 |
無効なレスポンス・タイプ・オブジェクトが |
GET_RESPONSE_TEXTファンクション
このファンクションは、HTTPレスポンスをTEXT
形式(VARCHAR2
またはCLOB
)で戻します。通常、ほとんどのクラウドREST APIはJSONレスポンスをテキスト形式で戻します。この関数は、HTTPレスポンスがテキスト形式であることが予想される場合に役立ちます。
構文
DBMS_CLOUD.GET_RESPONSE_TEXT
(
resp IN DBMS_CLOUD_TYPES.resp)
RETURN CLOB;
Parameters
パラメータ | 説明 |
---|---|
resp |
|
例外
例外 | エラー・コード | 説明 |
---|---|---|
invalid_response |
ORA-20025 |
無効なレスポンス・タイプ・オブジェクトが |
GET_API_RESULT_CACHE_SIZEファンクション
このファンクションは、構成された結果キャッシュ・サイズを返します。キャッシュ・サイズの値は、現在のセッションにのみ適用されます。
構文
DBMS_CLOUD.GET_API_RESULT_CACHE_SIZE
()
RETURN NUMBER;
SEND_REQUESTファンクションおよびプロシージャ
このファンクションおよびプロシージャは、HTTPリクエストを開始してレスポンスを取得し、レスポンスを終了します。このファンクションは、引数を使用してクラウドREST APIリクエストを送信するワークフローを提供します。ファンクションは、レスポンス・コードおよびペイロードを返します。このプロシージャを使用する場合は、SESSION_CLOUD_API_RESULTS
ビューに保存された結果から結果およびレスポンスの詳細を表示できます。
構文
DBMS_CLOUD.SEND_REQUEST
(
credential_name IN VARCHAR2,
uri IN VARCHAR2,
method IN VARCHAR2,
headers IN CLOB DEFAULT NULL,
async_request_url IN VARCHAR2 DEFAULT NULL,
wait_for_states IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
timeout IN NUMBER DEFAULT 0,
cache IN PL/SQL BOOLEAN DEFAULT FALSE,
cache_scope IN VARCHAR2 DEFAULT 'PRIVATE',
body IN BLOB DEFAULT NULL)
RETURN DBMS_CLOUD_TYPES.resp;
DBMS_CLOUD.SEND_REQUEST
(
credential_name IN VARCHAR2,
uri IN VARCHAR2,
method IN VARCHAR2,
headers IN CLOB DEFAULT NULL,
async_request_url IN VARCHAR2 DEFAULT NULL,
wait_for_states IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
timeout IN NUMBER DEFAULT 0,
cache IN PL/SQL BOOLEAN DEFAULT FALSE,
cache_scope IN VARCHAR2 DEFAULT 'PRIVATE',
body IN BLOB DEFAULT NULL);
Parameters
パラメータ | 説明 |
---|---|
|
対応するクラウド・ネイティブAPIで認証するための資格証明の名前。 |
uri |
リクエストを作成するためのHTTP URI。 |
method |
HTTPリクエスト・メソッド: 詳細は、DBMS_CLOUD REST APIの定数を参照してください。 |
headers |
JSON形式の対応するクラウド・ネイティブAPIのHTTPリクエスト・ヘッダー。認証ヘッダーが自動的に設定され、カスタム・ヘッダーのみが渡されます。 |
|
非同期リクエストURL。 URLを取得するには、APIのリストからリクエストAPIを選択します(https://docs.cloud.oracle.com/en-us/iaas/api/を参照)。次に、左ペインでリクエストのAPIに移動して検索します。たとえば、「Database Services API」→「Autonomous Database」→「StopAutonomousDatabase」です。このページには、APIホームが表示されます(ベース・エンドポイントも表示されます)。次に、作業リクエストのWorkRequestリンク用に取得した相対パスをベース・エンドポイントに追加します。 |
wait_for_states |
待機状態は次のタイプのステータスです:
|
timeout |
パラメータ デフォルト値は |
cache |
デフォルト値は |
cache_scope |
すべてのユーザーがこのリクエスト結果のキャッシュにアクセスできるかどうかを指定します。有効な値: |
body |
|
例外
例外 | エラー・コード | 説明 |
---|---|---|
invalid_req_method |
ORA-20023 |
|
invalid_req_header |
ORA-20024 |
|
使用上のノート
-
Oracle Cloud Infrastructureを使用している場合は、
credential_name
に署名キー・ベースの資格証明値を使用する必要があります。詳細は、CREATE_CREDENTIALプロシージャに関する項を参照してください。 -
オプションのパラメータ
async_request_url
、wait_for_states
およびtimeout
を使用すると、長時間実行リクエストを処理できます。この非同期形式のsend_request
を使用すると、ファンクションはwait_for_states
で指定された完了ステータスを待機してから返されます。送信リクエストでこれらのパラメータを使用して、予期される戻り状態をwait_for_states
パラメータで渡し、async_request_url
パラメータを使用して関連する作業リクエストを指定すると、リクエストはすぐに戻りません。かわりに、リクエストは、戻り状態が予想される状態のいずれかになるか、timeout
を超えるまで(timeout
はオプション)、async_request_url
を調査します。timeout
が指定されていない場合、リクエストは、wait_for_states
で検出された状態が発生するまで待機します。
SET_API_RESULT_CACHE_SIZEプロシージャ
このプロシージャは、現在のセッションの最大キャッシュ・サイズを設定します。キャッシュ・サイズの値は、現在のセッションにのみ適用されます。
構文
DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE
(
cache_size IN NUMBER);
Parameters
パラメータ | 説明 |
---|---|
cache_size |
最大キャッシュ・サイズを指定された値 キャッシュ・サイズが デフォルトのキャッシュ・サイズは |
例外
例外 | エラー・コード | 説明 |
---|---|---|
invalid API result cache size |
ORA-20032 |
最小値は0、最大値は10000です。この例外は、入力値が0より小さいか10000より大きい場合に表示されます。 |
例
EXEC DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE
(101);