18.5.1 REST対応SQLサービス参照の理解

REST対応SQLサービス参照を作成して、リモート・データベースに定義されているSQLまたはPL/SQLを実行します。

18.5.1.1 REST対応SQLサービス参照について

REST対応SQLサービス参照を使用して、リモート・データベースに定義されているSQLまたはPL/SQLを実行します。

Oracle REST Data Services (ORDS)の最小要件を満たすOracle APEXインストール環境では、RESTエンドポイントを介して任意のSQLまたはPL/SQLを実行できます。

開発者は、共有コンポーネント内の名前、エンドポイントURLおよび認証情報を定義して、REST対応SQL参照を作成します。APEXは、RESTを介してSQLまたはPL/SQL問合せをORDSに渡し、自己記述型のJSONレスポンスを返します。JSONオブジェクトには、結果セットのメタデータ、結果データおよびページ区切りの詳細が含まれます。

REST対応SQLサービスはAPEXコンポーネント内にワークスペースレベルで格納されるため、ワークスペース内のすべてのアプリケーションで使用できます。開発者は、対話モード・レポート、対話グリッド、クラシック・レポート、フォーム、マスター・ディテール・フォーム、カレンダ、JETチャート、ツリーおよびPL/SQLプロセスに対して、REST対応SQL参照を使用できます。参照は、カレンダ、JETチャート、ツリーおよびPL/SQLプロセスとともに使用することもできます。

18.5.1.2 REST対応SQLサービス参照の要件

REST対応SQLサービス参照を使用するための最小要件を確認します。

REST対応SQLサービス参照を使用するための要件は次のとおりです。

18.5.1.3 MySQLサポートについて

MySQLでは、読取り専用APEXコンポーネントのみがサポートされます。

次の表に、リモートのMySQLデータベースでREST対応SQLサービス参照を使用する場合のサポートされているAPEXコンポーネントおよびサポートされていない機能を示します。

APEXコンポーネント サポートされない機能およびコメント

クラシック・レポート

BLOB列(次を参照)。

対話モード・レポート

  • Pivot View
  • 一部の集計関数(レポートする比率、中央値、個別件数(概数)など)
  • Flashback
  • BLOB列(次を参照)
  • LOVに基づく列表示では静的LOVを使用できません

対話グリッド

  • 編集(DMLサポート)
  • 一部の集計関数(レポートする比率、中央値、個別件数(概数)など)
  • コントロール・ブレークでは主キー列を定義する必要があります
  • 複数値列でのフィルタリング
  • Flashback
  • LOVに基づく列表示では静的LOVを使用できません

ファセット検索およびスマート・フィルタ

複数値ファセット。

カレンダ

ドラッグ・アンド・ドロップ。

フォーム・リージョン

読取り専用フォームのみがサポートされます。DMLはサポートされていません。

チャート

  • ボックス・プロット・チャート
  • 一部の集計関数(レポートする比率、中央値、個別件数(概数)など)

カード

なし

列切替えレポート

なし

リフロー・レポート

なし

共有LOV

なし

マップ・リージョン

MySQLネイティブ・ジオメトリ・タイプはサポートされていません。また、マップ問合せはGeoJSONを返す必要があります。

ツリー

「兄弟順序付け基準」として選択した列は、VARCHARデータ型である必要があります(数値列または日付列以外)。

「コードを実行」ページ・プロセス

MySQLはサポートされていません。REST対応SQLを使用している場合は、リモート・サーバーのリストから選択できません。

自動化

MySQLサーバーは自動化問合せでサポートされていますが、自動化アクションおよび「コードを実行」アクション・タイプ内のターゲットとしてサポートされていません。

対話モード・レポートおよびクラシック・レポートのBLOB列

対話モード・レポートおよびクラシック・レポートのBLOB列は、一般にREST対応SQLをサポートしていないため、サポートされません。BLOB列は、カード・リージョンおよびフォーム表示でサポートされています。

18.5.1.4 REST対応SQLサービス参照とデータベース・リンクとの相違点

REST対応SQLサービス参照がデータベース・リンクとどのように異なるかについて説明します。

REST対応SQLサービス参照とデータベース・リンクは、両方とも開発者によるデータへのリモート・アクセスを可能にします。ただし、これらの機能はリモート・データにアクセスする方法が異なります。データベース・リンクとREST対応SQLサービス参照の主な違いは次のとおりです。

  • データベース・リンク
    • 開発者が同じSQL問合せでリモート表とローカル表を使用できるようにSQLレベルで機能します。
    • SQL*Net上で動作するため、インターネット上でクラウド・インスタンスに接続する場合は、問題が発生することがあります。
  • REST対応SQLサービス参照
    • ワークスペースレベルで機能します。開発者は、REST対応SQLサービスに対する問合せが含まれるAPEXコンポーネントを作成できますが、ローカル表に結合することはできません。
    • クラウド環境で、またはインターネット上で使用しやすいようにJSON over HTTP(s)と連動します。

データベース・リンクおよびREST対応SQLの両方がローカル・データベース内の表からデータをフェッチするよりはるかに非効率なネットワークを介してデータをフェッチします。環境に最適な方法を評価する際に、ページ・ビュー・パフォーマンスへの影響を評価し、適切なリフレッシュ・アルゴリズムを使用して常にローカル表でリモート・データをレプリケートすることを検討してください。

18.5.1.5 エンドポイントURLの動的な移入

「構成プロシージャ」属性で指定されているコールバック・プロシージャを使用して動的にエンドポイントURLのサーバー部分を移入します。

「リモート・サーバーの編集」ページで「構成プロシージャ」属性を編集できます。「リモート・サーバーの編集または削除」を参照してください。

フレキシブル・リモート・サーバーは次のように動作します:

  • REST対応SQL参照が呼び出されると、APEXエンジンによって「構成プロシージャ」属性が評価されます。
  • 「構成プロシージャ」属性に値(データベース内またはPL/SQLコード属性で無名ブロック内に格納されている)がある場合は、APEXエンジンによってそのプロシージャが実行されて、置換パラメータのコレクション(後でエンドポイントURLの変更のために使用される)がフェッチされます。

フレキシブル・リモート・サーバーのユースケース

フレキシブル・リモート・サーバーを使用する一般的なユースケースを次に示します:

  • 環境依存性 - 環境がサーバーまたはアプリケーションのデプロイ場所(本番、テストまたは開発インスタンスなど)に左右される場合は、フレキシブル・リモート・サーバーを選択することをお薦めします。環境ごとに「エンドポイントURL」属性を手動で変更するかわりに、APIを使用してそれを動的に変更できます。

    ヒント:

    APPLICATION_ADMIN.SET_REMOTE_SERVERプロシージャを使用して、デプロイメント・スクリプトでエンドポイントURLを変更することもできます。『Oracle APEX APIリファレンス』SET_REMOTE_SERVERプロシージャを参照してください
  • アプリケーション・データまたはアプリケーション・ユーザーの依存性 - フレキシブル・リモート・サーバーにより、「構成プロシージャ」属性を使用して動的パラメータに応じて実行時にエンドポイントURLを変更できるようになります。これらの動的パラメータは柔軟であり、構成表、「セッション・ステート」内のアイテム、アプリケーション・アイテムまたは置換アイテムに基づいたものにできます。

    構成プロシージャの結果はキャッシュされ、同じリクエスト(ページ・ビューまたはページ処理)内で再使用されます。

ノート:

フレキシブル・リモート・サーバーは、RESTデータ・ソースおよび認証サーバー・タイプ、またはREST対応SQLで使用されるリモート・サーバーの場合のみサポートされています。

フレキシブル・リモート・サーバーの構成

フレキシブル・リモート・サーバーを構成するには、REST対応SQLサービスを編集し、「構成プロシージャ」属性にプロシージャ名を入力します。このプロシージャとしては、データベースに格納されているプロシージャの名前、データベース・パッケージ・プロシージャに格納されているプロシージャの名前、またはPL/SQLコード属性に格納されているプロシージャの名前を指定できます。

このプロシージャのシグネチャには、次の2つのタイプのパラメータが必要です:

  • p_info in apex_plugin.t_remote_server_info
  • p_config in out apex_plugin.t_remote_server_config

パラメータp_configには、構成プロシージャで変更できる次の2つのオプション属性があります:

  • p_config.base_url - base_urlによってエンドポイントURLを変更します。
  • p_config.substitutions - substitutionsによって、apex_t_varchar2を使用して名前と値のペアを割り当てます。Oracle APEXによって、ベースURLまたはエンドポイントURL内の各#NAME#が置換されます。

これら2つの属性を組み合せて、リモート・サーバーで使用される実際のエンドポイントURLを決定します。

ヒント:

構成プロシージャの例を表示するには、「構成プロシージャ」属性のアイテム・ヘルプを参照してください。

次の例では、アプリケーションIDが100の場合にベースURLを変更します:

procedure my_server_config(
  p_info    in  apex_plugin.t_remote_server_info,
  p_config  out apex_plugin.t_remote_server_config )
is
begin
  if v('APP_ID') = 100 then
    p_config.base_url := 'http://example100.com';
  else
    p_config.base_url := 'http://example.com';
  end if;
end;

プレースホルダを使用することもできます。このためには、"name"を数字記号(#)で囲み、substitutionsを使用してそれらのプレースホルダ内の値を置き換えます。次の例を検討してください:

procedure my_server_config(
  p_info    in  apex_plugin.t_remote_server_info,
  p_config  out apex_plugin.t_remote_server_config )
is
begin
  if v('APP_ID') = 100 then
    p_config.base_url := 'http://example100.com';
  else
    p_config.base_url := 'http://example.com';
  end if;
end;

18.5.1.6 REST対応SQLサービスのエクスポートおよびインポート

REST対応SQLサービス参照を作成して、リモートOracleデータベースに定義されているSQLまたはPL/SQLを実行します。

アプリケーションをエクスポートすると、使用されるREST対応SQL参照が、エクスポート・ファイルに追加されます。アプリケーションをエクスポートして別のワークスペースにインポートする場合は、APEXによって、ターゲット・ワークスペースに同じ静的IDのREST対応SQL参照がすでに含まれているかどうかがチェックされます。REST対応SQL参照がすでに存在している場合、アプリケーションは、既存の参照を使用します。参照が存在しない場合は、ターゲット・ワークスペースに作成されます。