Apache Iceberg表の問合せ

Autonomous AI Databaseでは、Apache Iceberg表の問合せがサポートされています。

Apache Iceberg表の問合せについて

Autonomous AI Databaseでは、Apache Iceberg表の問合せがサポートされています。

サポートされる構成

サポートされている構成の互換性マトリックスを次に示します。

カタログ オブジェクト・ストア カタログ承認(REST) ストレージ認証 メモ
Unity(データブリック) Amazon S3、Azure ADLS Gen2 OAuth2サービス・プリンシパル(/oidc/v1/token) - 推奨、PAT - クイック・テスト S3アクセス/シークレット・キー、ADLS Gen2 SASキー
  • UniFormが必要です(Delta to Iceberg-readable)。統合によってまだサポートされていないIceberg RESTを介したネイティブIceberg。 …/api/2.1/unity-catalog/icebergを介してDelta+UniFormを使用します。

  • オブジェクト・ストア資格証明の自動販売はサポートされていません。
ポラリス(スノーフレーク) Amazon S3、Azure ADLS Gen2 OAuth2 (クライアント資格証明)またはPolarisでサポートされているトークン S3アクセス/シークレット・キー、ADLS Gen2 SASキー オブジェクト・ストア資格証明の自動販売はサポートされていません。
AWS Glue Amazon S3 該当なし(AWSアカウント認証を使用) S3アクセス/秘密鍵。 オブジェクト・ストア資格証明の自動販売はサポートされていません。S3およびGlueには同じ資格証明を使用する必要があります。S3とGlueは同じAWSリージョンに存在する必要があります。
JSONメタデータ(カタログ外オプション) Amazon S3、Azure ADLS Gen2、OCI Object Store 該当なし(RESTなし) S3アクセス/シークレット・キー、ADLS Gen2 SASキー、OCIネイティブ資格証明 ADBをテーブルのmetadata.json (ルート・マニフェスト)にポイントします。Point-in-Timeスナップショット。スキーマ変更または新規スナップショット後に外部表を再作成します。
Hadoop (カタログ外) OCIオブジェクト・ストレージ 該当なし(RESTなし) OCIネイティブ資格情報 データおよびメタデータ・ファイルを含むレイクハウス・フォルダを指します。

Apache Iceberg表の問合せの制限事項

この章では、Apache Iceberg表の問合せの制限事項を示します。

カタログと相互運用性
  • Unity Native Iceberg(REST): サポートされていません。

    回避策: Delta + UniFormを使用して、Unity CatalogのIceberg RESTエンドポイントを介してIceberg読取り可能なビューを公開します。

  • 動作保証されたRESTカタログ: ADBは、Iceberg読取りアクセス用にSnowflake PolarisおよびDatabricks Unity Catalog (UniFormのみ)で動作保証されています。
認証および資格証明:
  • カタログ資格証明の自動販売: サポートされません。

    自動ロール仮定やSTSによって発行された一時資格証明など、クラウドネイティブのロールベースの自動販売はサポートされていません。明示的なアクセス/秘密鍵または静的トークンを使用します。)

  • AWS ARN資格証明: サポートされません。IAMロールARNおよびARN経由のAssumeRoleは受け入れられません。
表セマンティクスおよびDML
  • パーティション化されたIceberg表はサポートされていません。非パーティション表のみが許可されます。
  • 行レベルの更新(読取りマージ):サポートされません。Icebergメタデータがファイルの削除を参照している場合、問合せは失敗します。
スキーマとメタデータの進化
  • 固定外部表のスキーマは作成で決定され、メタデータ内のIcebergスキーマ・バージョンと一致する必要があります。Icebergスキーマが更新された場合は、外部表を再作成する必要があります
スナップショットと時間移動
  • 問合せ時移動なし:スナップショット、バージョンまたはタイムスタンプによる問合せはサポートされていません。
  • Non_catalogのみ:新しいスナップショットは自動的に選択されません。特定のスナップショットを読み取るには、そのスナップショットのmetadata.jsonをターゲットにし、外部表を再作成します。
AWS Glue
  • 資格証明の位置合せ: AWS S3およびAWS Glueには、同じ資格証明を使用する必要があります。
  • リージョンの共同配置: S3バケットとAWS Glueカタログは同じAWSリージョンにある必要があります。

Apache Iceberg表の問合せに関連する概念

次の概念を理解すると、Apache Iceberg表の問合せに役立ちます。

Icebergカタログ

Icebergカタログは、表メタデータ(表スナップショット、表スキーマおよびパーティション化情報など)を管理するサービスです。Iceberg表の最新のスナップショットを問い合せるには、問合せエンジンはまずカタログにアクセスし、最新のメタデータ・ファイルの場所を取得する必要があります。AWS Glue、Hive、Nessie、Hadoopなど、使用可能なカタログ実装はすでに数多くあります。自律型AIデータベースは、AWS Glueカタログと、Sparkで使用されるHadoopCatalog実装をサポートしています。

詳細は、オプティミスティック同時実行性を参照してください。

メタデータ・ファイル

メタデータ・ファイルは、表のスナップショット、パーティション化スキームおよびスキーマ情報を追跡するJSONドキュメントです。メタデータファイルは、マニフェストリストとマニフェストファイルの階層へのエントリポイントです。マニフェストは、パーティショニングや列の統計などの情報とともにテーブルのデータファイルを追跡します。詳細は、Iceberg Table Specificationを参照してください。

トランザクション

Icebergでは、copy-on-writeまたはmerge-on-readのいずれかを使用して表に対する行レベルの更新がサポートされています。Copy-on-writeでは、更新された行を反映する新しいデータ・ファイルが生成され、merge-on-readでは、読取り時にデータ・ファイルとマージする必要がある新しい削除ファイルが生成されます。Oracleでは、copy-on-writeがサポートされています。削除ファイルが検出されると、氷山表に対する問合せは失敗します。詳細については、RowLevelOperationModeを参照してください。

スキーマ展開

Icebergはスキーマの進化をサポートしています。スキーマの変更は、スキーマIDを使用してIcebergメタデータに反映されます。Oracle外部表には、表の作成時に最新のスキーマ・バージョンによって決定される固定スキーマがあります。アイスバーグ問合せは、問合せ対象のメタデータが表作成時に使用されたものとは異なるスキーマ・バージョンを指している場合、失敗します。詳細は、スキーマの進化を参照してください。

パーティション化

Icebergは、コストのかかるデータ・レイアウトの変更なしに表のメタデータの処理/変更に依存する、非表示のパーティション化やパーティションの展開などの高度なパーティション化オプションをサポートしています。

Icebergの資格証明: RESTカタログとオブジェクト・ストア

このトピックでは、Apache Icebergが、RESTカタログとオブジェクト・ストアの2つの資格証明を使用してデータを管理およびアクセスする方法について説明します。また、Apache Icebergなどのデータ・レイク表形式で表情報を管理する2つの異なる方法を参照することもできます。

カタログ管理表とダイレクト・メタデータの外部表

次の項では、カタログ管理の外部表をダイレクト・メタデータ外部表と比較し、主な違いを強調表示します。

  • カタログ管理(Unity/Polaris/AWS Glue)

    内容: RESTカタログを介して解決されるメタデータ、スキーマおよび現在のスナップショット。

    動作:カタログの最新のスナップショット(集中管理された権限、タグおよび系統)を自動的に反映します。

    最適:エンタープライズ・データ製品、クロスエンジンの共有、一貫したガバナンス、検出性(カタログは信頼できる唯一の情報源)です。

    • ダイレクト・メタデータ(metadata.jsonを介したファイル・システム)

      内容:外部表は、特定のmetadata.jsonを直接指します。

      動作:修正された再現可能なスナップショット。自動的には進歩せず、ガバナンスはオブジェクト・ストアACLに限定されます。

      最適:実験、テスト、監査。

RESTとオブジェクト・ストアの資格証明

RESTカタログ資格証明

Apache Iceberg RESTカタログに接続する場合は、REST資格証明が必要です。RESTカタログは、RESTfulエンドポイントを公開して、Iceberg表のメタデータを管理します。認証には、多くの場合、REST資格証明はOAuthベースであるため、client IDおよびsecretを使用してトークン・エンドポイントからベアラー・トークンを取得する必要があります。

REST Icebergカタログを使用する場合は、次の2つの資格証明が必要です。
  • rest_auth_cred: カタログ・サービス(UnityやPolarisなど)で認証します。

  • credential_name: Icebergのデータおよびメタデータが存在するオブジェクト・ストアに対して認証します。
ノート

資格証明の保留は現時点ではサポートされていません。資格証明の自動送信とは、アクセス資格証明(ユーザー名とパスワード、APIキー、トークンなど)が必要になったときに、構成ファイルまたはスクリプトに静的に格納するのではなく、多くの場合、自動またはオンデマンドで配布またはフェッチする制御されたプロセスを指します。

オブジェクト・ストア資格証明

オブジェクト・ストア資格証明は、Apache Iceberg表がOracle Cloud Infrastructure (OCI) Object StorageやAmazon S3などのクラウド・オブジェクト・ストレージに直接格納されている場合に使用されます。

資格証明により、Autonomous AI Databaseは、クラウド・オブジェクト・ストアから直接ファイル(Parquetデータやメタデータ・マニフェストなど)にアクセスして読み取ることができます。

ノート

OCI/S3バケット内のParquet/メタデータ・ファイルを直接指す外部表を定義する場合は、オブジェクト・ストア資格証明を使用します。

Apache Iceberg表の問合せの一般的なワークフロー

Apache Iceberg表の問合せを開始する前に、ワークフローに精通している必要があります。この項では、5つの主なステップを持つエンドツーエンドの設定ワークフローとして表示されるデータにアクセスするための外部表の設定方法について説明します。

  1. アクセス・モデルの決定:
    • カタログ管理: このモデルは、継続的に更新され、管理されたカタログをデータ・メタデータの信頼できる唯一の情報源として機能させる場合に使用します。この中央カタログは、データの一貫性とガバナンスを維持するのに役立ちます。
    • ダイレクト・メタデータ: このモデルは、メタデータの固定スナップショット(metadata.json経由)を操作する場合に使用します。このモデルは、よりシンプルですが静的で、自動更新やガバナンスがないため、本番環境にはお薦めしません。
  2. 必要なものの収集:
    • カタログ管理: カタログ・エンドポイント(該当する場合)、正確な表パスおよび実際のデータ・ファイルが存在するオブジェクト・ストアの場所にアクセスできる必要があります。
    • ダイレクト・メタデータ: ルートmetadata.jsonファイルを指すURIと、これらのデータ・ファイルのオブジェクト・ストアの場所のみが必要です。
  3. 資格証明の準備:
    • カタログ管理設定の場合は、カタログにアクセスするための資格証明を取得します。
    • オブジェクト・ストア資格証明は、データ・ファイルとメタデータ・ファイルの両方を読み取るモデルに関係なく常に必要です。
      ノート

      自動資格証明の自動販売およびカタログ・アクセス用のAWS AssumeRoleはサポートされていません。
  4. 外部表の作成:
    • 「カタログ管理」では、表はカタログを介してデータを問い合せ、オブジェクト・ストア内のファイルにアクセスします。
    • Direct-Metadataでは、表はカタログに関与することなく、特定のmetadata.jsonファイルを直接指します。
  5. クイック・チェックと期待事項:

    COUNT(*)などの単純な問合せを実行して、表の設定を確認し、データに正しくアクセスできることを確認します。

プロバイダのクイックスタート

この章では、様々なクラウド・データ・プロバイダで外部データ・アクセスを設定するプロセスについて説明します。

トピック:

Databricks Unityカタログ

この項では、DatabricksをUniFormを介してオープン・テーブル・フォーマットにリンクするワークフローについて説明し、Icebergをサポートする環境でのDelta Lakeデータへのアクセスを容易にします。

Databricks Unityカタログ(UniFormパス)

前提条件:
  • Icebergクライアントが読み取ることができるように、UniFormで作成されたDelta表。
  • Azure ADLS Gen2またはAWS S3の表ファイル。
  • 外部アクセス用のUnityカタログ権限(外部データ・アクセスの有効化など)。プリンシパルにEXTERNAL USE SCHEMAを付与します。
  • 認証: OAuth2 (推奨)または個人アクセス・トークン(クイック・テスト用)。
ノート

Iceberg REST経由のネイティブIcebergは、当社の統合によってまだサポートされていませんDelta with UniForm (Iceberg-readable)を使用し、Unity Iceberg REST (https://<workspace-host>/api/2.1/unity-catalog/iceberg)を介して公開します。

データブリックにUniForm (アイスバーグ読取り可能)表を作成します:

次のプロシージャは、指定されたUnityカタログおよびスキーマ内のデータブリックに、customers_icebergという名前のUniForm (アイスバーグ読取り可能)表を作成します。
USE CATALOG <your_catalog>;
USE SCHEMA  <your_schema>;

CREATE TABLE customers_iceberg (
  id   INT,
  name STRING
)
TBLPROPERTIES(
  'delta.columnMapping.mode'='name',
  'delta.enableIcebergCompatV2'='true',
  'delta.universalFormat.enabledFormats'='iceberg'
);

INSERT INTO customers_iceberg (id, name) VALUES
  (1,'Alice'), (2,'Bob'), (3,'Carol');

オブジェクト・ストア資格証明(ADLS Gen2)

次の手順では、セキュアな外部クラウド・ストレージ・アクセスのためにストレージ・アカウント・キーまたはSASトークンのいずれかを使用して、オブジェクト・ストア・アクセス(Azure Data Lake Storage Gen2)の資格証明を設定します。
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('AZURE_BLOB_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'AZURE_BLOB_CRED',
    username        => '<storage-account-or-sas-username>',
    password        => '<storage-key-or-sas-token>'
  );
END;
/

OAuth2を使用したRESTカタログ資格証明の作成

次のプロシージャは、Databricksサービス・プリンシパル(クライアントIDおよびシークレット)を使用したセキュアな認証のためのOAuth2資格証明を設定します。
-- Databricks service principal (client_id / client_secret)
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('UNITY_OAUTH'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'UNITY_OAUTH',
    username        => '<client_id>',
    password        => '<client_secret>'
  );
END;
/

BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
    table_name      => 'CUSTOMERS_ICEBERG',
    credential_name => 'AZURE_BLOB_CRED',
    format          => '{
      "access_protocol": {
        "protocol_type": "iceberg-rest",
        "protocol_config": {
          "iceberg_catalog_type": "unity",
          "rest_catalog_endpoint": "https://<workspace-host>/api/2.1/unity-catalog/iceberg",
          "rest_authentication": {
            "rest_auth_cred": "UNITY_OAUTH",
            "rest_auth_endpoint": "https://<workspace-host>/oidc/v1/token"
          },
          "table_path": ["<your_catalog>","<your_schema>","customers_iceberg"]
        }
      }
    }'
  );
END;
/
SELECT COUNT(*) FROM CUSTOMERS_ICEBERG;

個人アクセス・トークン(PAT)を使用したRESTカタログ資格証明の作成

この手順では、PAT資格証明を作成し、それを使用して外部表を作成することにより、PATをクイック・テストに使用する方法を示します。
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('UNITY_PAT'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'UNITY_PAT',
    username        => 'token',
    password        => '<dapiXXXXXXXXXXXXXXXXXXXXXXXX>'
  );
END;
/

BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
    table_name      => 'CUSTOMERS_ICEBERG',
    credential_name => 'AZURE_BLOB_CRED',
    format          => '{
      "access_protocol": {
        "protocol_type": "iceberg-rest",
        "protocol_config": {
          "iceberg_catalog_type": "unity",
          "rest_catalog_endpoint": "https://<workspace-host>/api/2.1/unity-catalog/iceberg",
          "rest_authentication": { "rest_auth_cred": "UNITY_PAT" },
          "table_path": ["<your_catalog>","<your_schema>","customers_iceberg"]
        }
      }
    }'
  );
END;
/
SELECT COUNT(*) FROM CUSTOMERS_ICEBERG;

スノーフレークポラリス

このトピックでは、OAuth2認証を使用してREST APIを介してApache Polaris Iceberg表へのセキュア・アクセスを許可するSnowflake Polaris (RESTカタログ)について説明します。

Snowflake Polaris (RESTカタログ)

前提条件:
  • Polaris Icebergのカタログとエンドポイントがアカウントで利用可能です。
  • オブジェクト・ストアでアクセス可能な表ファイル(該当する場合はS3/ADLS)。
  • 認証: OAuth2推奨(クライアント資格証明)または別のPolarisでサポートされているトークン・メカニズム。

OAuth2資格証明を作成します:

次のプロシージャは、Apache Polaris Icebergカタログへのアクセスを認証するために、POLARIS_OAUTHという名前のOAuth2資格証明を作成します。

BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('POLARIS_OAUTH'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'POLARIS_OAUTH',
    username        => '<client_id>',
    password        => '<client_secret>'
  );
END;
/

ストレージ資格証明の作成

次の手順では、AWSアクセス・キーIDおよびシークレット・アクセス・キーを使用してオブジェクト・ストレージ(例: Amazon S3)にアクセスするためのS3_CREDという名前のストレージ資格証明を作成します。

-- Storage credential for your object store (example: S3)
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('S3_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'S3_CRED',
    username        => '<aws_access_key_id>',
    password        => '<aws_secret_access_key>'
  );
END;
/

外部表の作成

次のプロシージャは、Polarisカタログによって管理されるIceberg形式を使用して格納されたデータにアクセスする、DatabricksのSALES_POLARISという外部表を定義します。
BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
    table_name      => 'SALES_POLARIS',
    credential_name => 'S3_CRED',
    format          => '{
      "access_protocol": {
        "protocol_type": "iceberg-rest",
        "protocol_config": {
          "iceberg_catalog_type": "polaris",
          "rest_catalog_endpoint": "<https://<your-polaris-endpoint>/...>",
          "rest_authentication": {
            "rest_auth_cred": "POLARIS_OAUTH",
            "rest_auth_endpoint": "<https://<your-oauth-token-endpoint>>"
          },
          "table_path": ["<db>","<schema>","<table>"]
        }
      }
    }'
  );
END;
/

クイック機能チェック

次のプロシージャは、問合せを実行して、外部表が正しく設定され、アクセス可能であることを確認します。
SELECT COUNT(*) FROM SALES_POLARIS;
ノート

エンドポイントおよびトークンURLプレースホルダは、Polaris構成によって異なるため保持します。

AWS Glueカタログ

このトピックでは、AWS資格情報を使用して、登録済みのIcebergテーブルでGlue Data Catalog経由で Amazon S3データにアクセスする方法について説明します。

前提条件:
  • Iceberg表が登録されているGlueデータ・カタログ(アクセス可能なS3オブジェクト)。

    Glueのリージョン名(us-east-1など)。

  • 認証: S3のアクセス・キー/シークレット。カタログ構成を介した接着アクセス。

  • AWS ARNによる資格情報の送信はサポートされていません。明示的な資格証明を指定する必要があります。

ストレージ資格証明を作成します。

次のプロシージャは、Amazon S3バケットに格納されているデータへのアクセスを有効にするために、データブリックにS3_CREDという名前のストレージ資格証明を作成します。

-- S3 credential
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('S3_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'S3_CRED',
    username        => '<aws_access_key_id>',
    password        => '<aws_secret_access_key>'
  );
END;
/

外部Iceberg表の作成

DatabricksにORDERS_GLUEという名前の外部Iceberg表を作成します。
BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
    table_name      => 'ORDERS_GLUE',
    credential_name => 'S3_CRED',
    format          => '{
      "access_protocol": {
        "protocol_type": "iceberg",
        "protocol_config": {
          "iceberg_catalog_type": "aws_glue",
          "iceberg_glue_region": "us-east-1",
          "table_path": ["<database>","<table>"]
        }
      }
    }'
  );
END;
/

クイック機能チェック

次のプロシージャは、問合せを実行して、外部表ORDERS_GLUE内のすべての行をカウントし、接続およびデータ・アクセシビリティを検証します。
SELECT COUNT(*) FROM ORDERS_GLUE;

Hadoop/ファイルシステム(ダイレクト・メタデータ・ファイル)

このトピックでは、ADLS、S3、OCIなどのオブジェクト・ストアから直接Iceberg表のメタデータ・ファイルにアクセスするためのストレージ資格証明を作成する方法について説明します。ここでは、カタログ・サービスを使用せずに、ファイル・システム(通常はHadoop互換ファイル・システム)に直接格納されているIceberg表の直接メタデータ管理のタイプの分類について説明します。

例: JSONメタデータを使用したIceberg表の問合せ

前提条件:
  • 表のIcebergルート・マニフェスト(metadata.json)には、オブジェクト・ストア(ADLS/S3/OCI)でアクセスできます。
  • このパスはポイントインタイムです。新しいスナップショットをたどるには、外部表を再作成します。

ストレージ資格証明の作成

このプロシージャは、STORE_CREDという既存の資格証明が存在する場合は、まず削除を試行します(エラーは無視されます)。次に、STORE_CREDという名前の新しい資格証明を作成します。

-- Storage credential for wherever the metadata.json lives
BEGIN
  BEGIN DBMS_CLOUD.DROP_CREDENTIAL('STORE_CRED'); EXCEPTION WHEN OTHERS THEN NULL; END;
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'STORE_CRED',
    username        => '<user-or-key>',
    password        => '<secret-or-token>'
  );
END;
/

外部表の作成

CUSTOMERS_METAという名前の外部表が作成されます。
BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
    table_name      => 'CUSTOMERS_META',
    credential_name => 'STORE_CRED',
    file_uri_list   => 'https://<bucket-or-container>/<path>/metadata.json',
    format          => '{"access_protocol":{"protocol_type":"iceberg"}}'
  );
END;
/

クイック機能チェック

次のプロシージャは、外部表のすべての行をカウントする問合せを実行します。


SELECT COUNT(*) FROM CUSTOMERS_META;

例: OCI上のHadoopカタログを使用したIceberg表の問合せ

この例では、OCIデータ・フローを使用して作成されたIceberg表db.icebergTablePyを問い合せます。ここで、SparkはIcebergカタログにHadoopCatalog実装を使用します。HadoopCatalogは、バケットmy-iceberg-bucket内のレイクハウス・フォルダicebergを使用し、Icebergメタデータをこのディレクトリの下の$database_name/$table_nameサブフォルダに配置します。また、最新のメタデータ・ファイル・バージョンのバージョン番号を含むversion-hint.textファイルも使用します。

次のように、表db.icebergTablePyの外部表を作成します。
BEGIN
  DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
    table_name       => 'iceberg_parquet_time_dim3',
    credential_name  => 'OCI_CRED',
    format           => '{
      "access_protocol": {
        "protocol_type": "iceberg",
        "protocol_config": {
          "iceberg_catalog_type": "hadoop",
          "iceberg_lakehouse": "https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
          "iceberg_table_path": "db.icebergTablePy"
        }
      }
    }'
  );
END;
/

参照

このセクションでは、この章を通して引用されているリンクの参照先の一覧を示します。