シナリオ: APEXへのIoTデータの接続

Oracle Application Express (APEX)をInternet of Things (IoT)データとともに使用するには、次のステップに従ってアクセスを構成し、データを接続します。

この図は、APEXのIoTデータにアクセスするフローを示しています。

IoTデータへのアクセスの構成

CLIまたはAPIを使用して、APEXへのIoTドメインのアクセスを構成し、IoT APEXへのパスワードを変更できます。

CLIの使用

oci iot domain configure-apex-data-accessを使用して、IoTドメインのAPEXへのアクセスを構成します。<iot-domain-OCID>をIoTドメインのOCIDに置き換え、<your-initial-apex-password>をIoT環境の初期APEXパスワードに置き換えます。
oci iot domain configure-apex-data-access --db-workspace-admin-initial-password "<your-initial-apex-password>" --iot-domain-id <iot-domain-OCID>
ノート

APEXの初期パスワードは、12文字以上である必要があります。

APIの使用

操作ConfigureIotDomainDataAccessを使用して、IoTドメインのAPEXへのアクセスを構成します:
POST /20250531/iotDomains/{iotDomainId}/actions/configureDataAccess
{
    "type": "APEX",
    "dbWorkspaceAdminInitialPassword": "<your-initial-apex-password>"
}
詳細は、「API」タブ「IoTドメインのデータ・アクセスの構成」を参照してください。

APEXへのログイン

  1. 次のURLでAPEXコンソールに移動します:
    https://<data-host-domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com/ords/r/apex/workspace
  2. ワークスペース名およびデータベース・ユーザー名として次のものを使用して、IoTドメインのワークスペースにログインし、次の2つのアンダースコアを確認します: __WKSP:
    <domain-short-id-from-device-host>__WKSP 
  3. 「SQLワークショップ」に移動し、「SQLコマンド」を選択してIoTデータを問い合せます。
    最初は、IoTドメインに2つのデータベース・スキーマがあり、どちらもIoTデバイスのホスト名である<domain-short-id-from-device-host>を使用します。
    • <domain-short-id-from-device-host>__IOT: デジタル・ツイン定義およびテレメトリへの読取り専用アクセス権を持つスキーマ。
    • <domain-short-id-from-device-host>__WKSP: 読取りおよび書込みアクセス権を持つスキーマ。
    ノート

    スキーマ名には、__IOTと__WKSPの2つのアンダースコアが含まれていることに注意してください。
  4. SQLコマンドを入力して実行し、IoTデータを問い合せます。問合せするデータベース表に対して正しいスキーマを選択したことを確認します。次に例を示します。
    1. <domain-short-id-from-device-host>__IOTスキーマを選択します。
    2. 次のコマンドを実行して、タイプを表示したいデータに置き換えます。
    • RAW_DATA
    • HISTORIZED_DATA
    • REJECTED_DATA
    • RAW_COMMAND_DATA
    この例では、RAWデータを問い合せる方法を示します。
    select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>'

    大きいデータ・セットを問い合せるレポートの場合は、時間範囲を使用して、レポートに必要な列のみを選択します。APEXページ・アイテムからの型付き値の使用を参照してください。

  5. 管理者アカウントが作成されると、OracleデータベースとAPEXアプリケーションの2つの異なる場所にユーザーが作成されます。これらは、同じユーザー名とパスワードを持つ異なるユーザーです。パスワードは変更できます。
    1. データベース・ユーザーのパスワードを変更するには、次のSQLALTER USER文および必要なREPLACE句を使用します。
      ALTER USER <workspace-administrator-user-name> IDENTIFIED BY "<new-password>" REPLACE "<old-password>";
    2. APEXユーザーのパスワードを変更するには:
      • APEX管理者は、パスワードを変更できます。管理者としてAPEXにログインした後、「APEXアカウント・パスワードの設定」オプションを選択します。
      • APEXユーザーとして、APEXアプリケーションにログインすると、APEXパスワードを変更するように求められます。
  6. これで、APEXでIoTデータを表示し、APEX管理サービスで新しいユーザー・アカウントを作成できるようになりました。
  7. 大きなスクリーンショットを表示するには、右クリックして新しいブラウザでイメージを開きます。

    APEXでIoTデジタル・ツイン・スキーマを表示します。

APEXページ・アイテムからの型付き値の使用

APEXは、日付ピッカーおよび数値フィールドのページ・アイテム値を、SQLおよびPL/SQLのVARCHAR2文字列としてバインドします。HISTORIZED_DATA.TIME_OBSERVEDをフィルタするレポートの場合、日時文字列をTIMESTAMP値に変換してから、それらを列と比較します。文字列としてバインドされる値を参照してください。

次の例では、開始を含む終了排他的な時間範囲内の履歴化されたサンプル・メタデータを選択します。サンプルのJSON値は取得されません。APEXレポートの例を適応させるには:

  1. <domain-short-id-from-device-host>をIoTドメインの短縮IDに置き換え、IOTの前に2つのアンダースコアを保持します。
  2. アプリケーションで2つの日時ページ・アイテムを作成または使用します。P10_START_TIMEおよびP10_END_TIMEを実際の名前に置き換えます。これらは、IoTによって作成されるアイテムではなく、アイテム名の例です。
  3. レポートを実行する前に、開始値が終了値より前に、両方の項目を移入します。この例では、2026-09-20 10:00:00.000000や2026-09-20 11:00:00.000000など、タイムゾーン・オフセットのない文字列を想定しています。問い合せるデータと同じ時間規則の値を使用します。TO_TIMESTAMP書式マスクは、アイテムによって提供される文字列と一致する必要があります。書式が異なる場合は、マスクを変更します。
SELECT h.id,
       h.digital_twin_instance_id,
       h.content_path,
       h.time_observed
FROM <domain-short-id-from-device-host>__IOT.HISTORIZED_DATA h
WHERE h.time_observed >= TO_TIMESTAMP(
        :P10_START_TIME, 'YYYY-MM-DD HH24:MI:SS.FF6')
  AND h.time_observed < TO_TIMESTAMP(
        :P10_END_TIME, 'YYYY-MM-DD HH24:MI:SS.FF6');

これは、ページ・アイテム・セッション値を使用するAPEXレポート問合せです。別のSQLツールで実行する場合は、そのツールのバインド変数メカニズムを使用してバインド値を指定します。

これが役立つ理由:

  • 2つの境界は、保持されているすべてのサンプルをリクエストするのではなく、レポートで必要な時間範囲に問合せを制限します。排他的な終了境界は、隣接する時間ウィンドウがクエリーされたときに境界サンプルを2回カウントすることを避けます。
  • TO_TIMESTAMPは、各入力文字列を変換し、h.time_observedは変更しません。入力型が一致すると、タイムスタンプ索引の使用を妨げる可能性のある暗黙的な変換が回避されます。特定の実行計画またはレスポンス時間は保証されません。
  • SELECT *のかわりにメタデータ列を選択すると、このレポートで必要ないペイロード値の取得が回避されます。ペイロード列を追加するのは、レポートの内容が必要な場合のみです。

RAWデータ・レポートの場合は、かわりにRAW_DATA.TIME_RECEIVEDに対してバインドされた問合せを使用します。RAWデータの例については問合せ入力タイプおよびタイムスタンプ・フィルタを、既存の列定義についてはIoTドメイン・データベース・スキーマを参照してください。