データベース開発者の概念

Oracle Database開発者は、データベース・アプリケーションを作成およびメンテナンスします。この項では、データベース開発者の作業内容と使用可能な開発ツールの概要について説明します。

データベース開発者の業務

Oracle開発者は、Oracleテクノロジ・スタックを使用するアプリケーションのデータベース・コンポーネントの作成、またはメンテナンスの責任があります。

Oracle開発者は、新しいアプリケーションを開発するか、既存アプリケーションをOracle Database環境で動作するように変換します。このため、開発者はデータベース管理者と緊密に連携し、知識や情報を共有する必要があります。

Oracleデータベース開発者は、次のタスクを担当します。

関連情報:

データベース開発者向けのツール

Oracleでは、データベース・アプリケーションを開発するためのいくつかのツールを提供しています。この項では、一般的に使用されるいくつかの開発ツールについて説明します。

SQL Developer

SQL Developerは、データベース開発者がSQL*Plusを使用して基本的なタスクを編集および開発するのに便利な方法です。SQL Developerは、Javaで記述されたSQL*Plusのグラフィカル版で、SQLおよびPL/SQLの開発を支援します。標準的なデータベース認証を使用してOracleデータベース・スキーマに接続できます。SQL Developerでは、次のことを実行できます。

SQL Developerは、デフォルトのOracle Databaseインストールに含まれており、無償でダウンロードできます。

関連項目: SQL Developerの使用方法を学習するには、『Oracle AI Database Oracle AI Database開発スタート・ガイド』および『Oracle SQL Developerユーザーズ・ガイド』を参照してください

Oracle APEX AIアプリケーション・ジェネレータ

Oracle APEX AI Application Generatorは、Oracle Database用のWebアプリケーション開発ツールです。Oracle APEX AIアプリケーション・ジェネレータでは、ユーザー・インタフェースのテーマ、ナビゲーション・コントロール、フォーム・ハンドラ、柔軟なレポートなどの組込み機能を使用することにより、アプリケーション開発を加速できます。

Oracle APEXは、データベースとともにインストールされ、表のデータおよびPL/SQLコードで構成されます。アプリケーションを実行すると、ブラウザにより、Oracle APEX PL/SQLコールに変換されるURLリクエストが送信されます。データベースでPL/SQLが処理された後、その結果がHTMLとしてブラウザに送り返されます。このサイクルはページをリクエストまたは送信するたびに発生します。

Oracle APEXは、埋込みPL/SQLゲートウェイで使用できます。このゲートウェイは、データベース内のOracle XML DB HTTPサーバーで実行され、動的アプリケーションの作成に必要なインフラストラクチャを提供します。図23-1に示すように、埋込みタイプPL/SQLゲートウェイは中間層をなくすことで、シンプルなアプリケーション・アーキテクチャを実現しています。

図1: 埋込みPL/SQLゲートウェイを使用したAPEX

画像cncpt317.gifの説明

Oracle JDeveloper

Oracle JDeveloperは、最新の業界標準Java、XML、Webサービス、およびSQLを使用するサービス指向アプリケーションを構築するための統合開発環境(IDE)です。Oracle JDeveloperは、アプリケーションをモデル化、コーディング、デバッグ、テスト、プロファイリング、チューニングおよびデプロイするための機能を統合して、ソフトウェア開発全域を支援します。

Oracle JDeveloperでは、各種アプリケーション開発ツールのウィンドウを使用します。たとえば、Javaアプリケーションを作成する場合、Javaビジュアル・エディタやコンポーネント・パレットなどのツールを使用できます。これらのツールに加えて、Oracle JDeveloperでは、プロジェクト・コンテンツを整理および表示するための様々なナビゲーション機能を提供しています。

関連情報:

Oracle Developer Tools for Visual Studio

Oracle Developer Tools for Visual Studio .NETは、Visual Studio .NET環境と統合された一連のアプリケーション・ツールです。Oracle Developer Tools for Visual Studio .NETのツールを使用すると、Oracleの機能にGUIでアクセスでき、様々なアプリケーション開発タスクを実行することができ、開発の生産性と操作性が向上します。

Oracle Developer Toolsは、Visual Basic、C#、およびその他の.NET言語を使用した.NETストアド・プロシージャのプログラマーおよび実装をサポートしています。これらのプロシージャは、.NET言語で記述され、SQLまたはPL/SQL文を含みます。

データベース開発者のためのトピック

この項では、他の箇所で説明されていないデータベース開発者に不可欠な話題について説明します。

アプリケーション設計およびチューニングの原則

Oracle開発者は、セキュリティおよびパフォーマンス目標を達成できるよう、データベース・アプリケーションを設計、作成、およびチューニングする必要があります。

アプリケーション設計およびチューニングに関する次の原則が、ガイドラインとして役立ちます。

関連情報:

正しい問合せの原則

実際のアプリケーション問合せは非常に複雑で、多くの結合がある可能性があり、これらは、本番システムで実行されているSQLで長期間実行されて気付かれないエラーが発生した場合でも、誤った結果の戻りを明示的に指定して、隅々まで正しくないことが多々あります。この項では、これらの一般的なSQLエラーの最も重要なものについて体系的に分析し、回避する方法について説明します。

クエリーは非常に複雑に見えます。WITH句、SELECTリストおよびWHERE句で、多数の表を参照し、他のビュー上に構築されたビューを含めて、副問合せを使用できます。その複雑さの下では、良い問合せは依然として1つの明確な質問に答えます。この質問は、通常、特定のタイプのビジネス・エンティティに関するデータの必要性を反映しています。問合せによって返される各行は、そのエンティティの1つのインスタンスを表す必要があります。GROUP BY問合せの場合、各行は、同じエンティティのインスタンスに対する集計を表す必要があります。

ほとんどのシステムでは、問合せに十分な重要な各ビジネス・エンティティ・タイプには、そのエンティティを表す行を持つ対応する表があります。その意味では、よく記述された問合せの多くは、どれほど複雑に見えても、最終的に単一の表の行に関する質問です。通常、周囲の複雑さは存在します。これは、正規化されたデータベースが、親表や祖父母表などの関連表にエンティティの属性を格納するためです。

たとえば、正規化された設計では、通常、顧客の名前がCUSTOMERS表に1回格納されます。ORDERS表にはCUSTOMER_IDのみが格納されるため、CUSTOMERSに結合できます。ORDER_ITEMS表にはORDER_IDが格納されているため、ORDERSに結合でき、CUSTOMER_IDは繰り返されません。ORDER_ITEMSのサブセットを各アイテムの顧客名とともにリストする場合は、最初にORDERS (親)に、次にCUSTOMERS (祖父母)に、一意の結合のシーケンスが必要です。適切に正規化されたOLTPシステムでは、結果セットが1対1で1つのプライマリ表の行のサブセットにマップされていても、問合せで単一のエンティティ・タイプに関する詳細情報を取得するためにこのような結合が多数必要になる場合があります。

このプライマリ表を、行幅表(RWT)と呼びます。正しい問合せでは、他の結合は、通常、親表や祖父母表などから一意に一致した参照データを追加して、各RWT行を「拡大」する必要があります。これらの結合は、RWT行の数を乗算しないでください。RWTから論理的に開始するすべての結合に対するこの構造を持つ問合せは、行拡張のみの問合せ(RWOQ)です。ノート:フィルタリングでは、RWT行を破棄できます。内部結合およびWHERE述語では、RWTから行を削除できます。「Row-widened」は、問合せがすべてのRWT行を保持することを意味しません。これは、フィルタ処理後、集計の前に、各問合せ結果行が残りのRWT行に厳密に1対1対応することを意味します。

問合せが戻すエンティティまたは集計を表す単一表からの一意結合のチェーンを介して問合せ内の他のすべての表にアクセス可能な場合、その開始表はRWTで、問合せはRWOQです。一意キーを使用して1対1を事前集計結果行にマップする表が保証されない場合、問合せはRWOQではありません。実際には、ほとんどの非RWOQは、問合せによって結果行が明確に定義されたビジネス上の重要なエンティティにマップされないため、アプリケーションで正しく解釈できない結果を生成します。たとえば、このような行から値を合計すると、同じエンティティに対して同じ値が複数回追加され、合計は無意味になります。

Oracle Databaseリリース26ai以降、JOIN TO ONE機能は、正しいRWOQの記述に非常に役立ちます。すべての結合にJOIN TO ONEを使用すると、データベースは解析時に問合せがRWOQであることをチェックし、FROM句の左端の表をRWTとして処理します。これは、オブジェクトがRWOQ以外の動作を非表示にする可能性のあるビューではなく実表であると想定しています。データベースが解析時にJOIN TO ONE結合の一意性を証明できない場合、ランタイム・チェックを実行して、推定されるRWTからの各結合が実行時に検出されたデータに対して一意であることを検証します。実際の結果で一意でない結合が検出されると、ランタイム・エラーが発生します。ほとんどのRWOQは、JOIN TO ONE形式に変換できます。JOIN TO ONE形式に変換できない問合せでは、通常、変換時に不規則な結合が表示されます。変換された問合せが実行時エラーなしで実行されると、問合せに必要な1行ごとのエンティティ・プロパティがあることが確認されます。

RWOQの詳細、SQLでの微妙な正確性の問題の防止に役立つ理由、およびJOIN TO ONEによる問題の強制方法については、『Oracle AI Database開発ガイド』を参照してください。

クライアント側のデータベース・プログラミング

プリコンパイラまたはJavaトランスレータを使用してソース・コードにSQL文を入れるかAPIを使用することで、アプリケーションがデータベースとやりとりできます。

手続き型データベース・アプリケーションでSQLを使用するには、2つの基本テクニックがあり、1つはPL/SQLおよびJavaを使用したサーバー側のプログラミングで、もう1つはJava Database Connectivity (JDBC)やOracle Call Interface (OCI)などプリコンパイラおよびAPIを使用したクライアント側のプログラミングです。

関連情報:

プログラミング環境の選択方法を学習するには、『Oracle AI Database開発ガイド』を参照

確認するには、「サーバー側プログラミング: PL/SQLとJava」を参照してください

埋込みSQL

以前は、クライアント/サーバー・プログラムとデータベースの対話には埋込みSQLが使用されていました。

Oracleプリコンパイラ

一般に、クライアント/サーバー・プログラムは、Oracleプリコンパイラを使用して記述されます。プリコンパイラは、高レベルのプログラムにSQL文を埋め込むためのプログラミング・ツールです。

たとえば、Oracle Pro*C/C++プリコンパイラを使用すると、CまたはC++のソース・ファイルにSQL文を埋め込むことができます。Oracleプリコンパイラは、COBOLおよびFORTRANにも使用できます。

プリコンパイラには、次のような複数の利点があります。

SQL文を含むクライアント・アプリケーションがホスト・プログラムになります。このプログラムは、ホスト言語で記述されます。ホスト・プログラムでは、完全なSQL文と完全なC文を混合して使用でき、Cの変数または構造をSQL文に使用することもできます。SQL文を埋め込む場合は、文をEXEC SQLキーワードで開始して、セミコロンで終了する必要があります。EXEC SQL文は、Pro*C/C++によりランタイム・ライブラリSQLLIBへのコールに変換されます。

多くの埋込みSQL文は、新しい句の追加またはプログラム変数の使用によってのみ、対話型の文と異なります。次の例では、対話型と埋込み型のROLLBACK文を比較しています。

ROLLBACK;           -- interactive
EXEC SQL ROLLBACK;  -- embedded

これらの文は同じ働きをしますが、前者は対話型SQL環境(SQL Developerなど)で、また後者はPro*C/C++プログラムで使用します。

プリコンパイラはホスト・プログラムを入力として受け取り、埋込みSQL文を標準のデータベース・実行時ライブラリ・コールに変換し、ソース・プログラムを生成します。このプログラムは、通常の方法でコンパイル、リンクおよび実行できます。図23-2に、プリコンパイラを使用したプログラム開発の典型的なステップを示します。

図2: プリコンパイラを使用したプログラム開発

画像cncpt253.gifの説明

関連項目: Pro*C/C++プリコンパイラの詳細は、『Pro*C/C++開発者ガイド』を参照してください

クライアント側のAPI

現在は、多くの開発者がAPIを使用してデータベース・アプリケーションにSQLを埋め込みます。

たとえば、Oracle Databaseと通信するプログラムの有効化によく使用されるOpen Database Connectivity(ODBC)およびJDBCという2つのAPIがあります。その他、クライアント側のプログラミングによく使用されるOracle Call Interface(OCI)およびOracle C++ Call Interface(OCCI)という2つのAPIもあります。

OCIおよびOCCI

プリコンパイラのかわりとして、OracleではOCI APIおよびOCCI APIを提供しています。

OCIでは、Cなどのホスト・プログラミング言語を使用して、データベース内のデータおよびスキーマを操作できます。OCCIは、C++言語との使用に適したオブジェクト指向インタフェースです。どちらのAPIを使用する場合も、開発者はシステム固有のサブプログラムを起動して、Oracle Databaseにアクセスし、SQLの実行を制御できます。

場合によっては、レベルの高いインタフェースよりも、OCIの方が高いパフォーマンスを示すことや、機能が豊富なことがあります。OCIおよびOCCIでは、次のような多くの機能を提供しています。

OCIおよびOCCIには、動的ランタイム・ライブラリ(OCILIB)という形式で、標準データベース・アクセスおよび検索関数のライブラリが用意されています。このライブラリは、実行時にアプリケーション内でリンクを設定できます。このように、非データベース・アプリケーションと同様の方法でOCIまたはOCCIプログラムをコンパイルおよびリンクすると、別の処理やプリコンパイル作業が不要になります。図23-3に、開発プロセスを示します。

図3: OCIまたはOCCIを使用した開発プロセス

画像cncpt307.gifの説明

関連情報:

ODBCおよびJDBC

ODBCは、アプリケーションをデータベースに接続し、SQL文を準備して実行するための標準APIです。

ODBCは、プログラミング言語、データベース、およびオペレーティング・システムに依存しません。ODBCの目的は、任意のアプリケーションが任意のデータベースのデータにアクセスできるようにすることです。

データベース・ドライバは、アプリケーションとデータベースの間にあるソフトウェアです。このドライバは、アプリケーションによるAPIコールをデータベースが処理可能なコマンドへと変換します。ODBCドライバを使用することで、スプレッドシートに格納されているデータなど、あらゆるデータ・ソースにアプリケーションからアクセスできます。ODBCドライバは、ODBC標準とデータベースの間のマッピングをすべて実行します。

Oracleが提供するOracle ODBCドライバを使用すると、ODBCに準拠したアプリケーションはOracle Databaseにアクセスできます。たとえば、Visual Basicで記述されたアプリケーションでは、ODBCを使用してOracle Database表の問合せや更新を実行できます。

JDBCは、JavaアプリケーションがOracle Databaseと対話するための下位レベルのJavaインタフェースです。ODBCと同様、JDBCもベンダーに依存しないAPIです。Sun社により定義されるJDBC標準は、java.sqlインタフェースを介して実装されます。

JDBC標準では、個々のプロバイダが独自のJDBCドライバを使用して標準を実装および拡張できます。Oracleでは、クライアント側のプログラミング用に次のJDBCドライバを提供しています。

次のスニペットは、JDBC OCIドライバを使用してStatementオブジェクトを作成し、dual表に問合せを実行するJavaプログラムのスニペットです。

// Create a statement
Statement stmt = conn.createStatement();

// Query dual table
ResultSet rset = stmt.executeQuery("SELECT 'Hello World' FROM DUAL");

関連項目: JDBCについてさらに学習するには、Oracle AI Database開発ガイドおよびOracle AI Database Java開発スタート・ガイドを参照してください。

グローバリゼーション・サポート

Oracle Databaseのグローバリゼーション・サポートにより、各国語でデータを格納、処理、取得できます。

グローバリゼーション・サポートを使用すると、世界中から同時にアクセスして実行できる多言語アプリケーションやソフトウェアの開発が可能になります。

グローバル・データベース・アプリケーションを記述する開発者は、次のことを実行する必要があります。

たとえば、アプリケーションはネイティブ・ユーザーが使用する言語およびロケールのプリファレンスに基づいてユーザー・インタフェースの内容をレンダリングしたり、データを処理する必要がある場合があります。たとえば、アプリケーションは、ユーザーに設定の変更を求めることなく、マルチバイトの漢字データを処理し、該当する地域の形式でメッセージや日付を表示して、7ビットASCIIデータを処理する必要があります。

グローバリゼーション・サポート環境

グローバリゼーション・サポート環境には、クライアント・アプリケーションとデータベースが含まれます。言語に依存する処理は、クライアントとサーバーの上でパラメータおよび環境変数を設定することによって制御します(クライアントとサーバーは別々の場所に存在する場合もあります)。ノート:以前のリリースでは、Oracleではグローバリゼーション・サポート機能は各国語サポート(NLS)機能と呼ばれていました。実際、NLSはグローバリゼーション・サポートの一種で、NLSを使用して、各国語を選択し、特定の文字セットでデータを格納できます。

Oracle Databaseでは、次の機能に対するグローバリゼーション・サポートを提供しています。

文字セット

グローバリゼーション・サポートの主要なコンポーネントである文字セットは、コンピュータ画面に文字を表示するときに使用されるエンコーディング・スキームです。

アプリケーション開発においては、次の違いが重要です。

特定の文字グループ(アルファベット文字、表意文字、記号、句読点、制御文字等)を文字セットとしてエンコードできます。エンコードされた文字セットでは、セット内の各文字について、コード・ポイントまたはエンコード値と呼ばれる一意の数値コードが割り当てられます。グローバル環境では、異なる文字セット間でデータの変換が必要になる可能性があるため、このコード・ポイントは重要となります。

コンピュータ業界では、様々にエンコードされた文字セットが使用されている。これらのセットでは、使用可能な文字数、使用可能な文字および各文字に割り当てられているコード・ポイントなどが異なります。Oracle Databaseでは、各国の仕様、国際仕様およびベンダー固有のエンコードされた文字セット規格のほとんどすべてがサポートされています。

Oracle Databaseでは、次のクラスのエンコードされた文字セットをサポートしています。

関連項目:文字セットの移行について学習するには、『Oracle AI Databaseグローバリゼーション・サポート・ガイド』を参照してください

ロケール固有の設定

ロケールとは、システムまたはプログラムが実行されている言語的および文化的環境のことです。NLSパラメータは、クライアントとデータベースの両方におけるロケール固有の動作を指定します。

データベース・セッションでは、クライアントにかわって文を実行するとき、NLSの設定が使用されます。たとえば、データベースでは、クライアントの地域の書式で3桁区切りを使用します。一般的に、クライアント・ホストのNLS_LANG環境変数によって、サーバー・セッションとクライアント・アプリケーションの両方のロケールが指定されています。プロセスは次のとおりです:

  1. クライアント・アプリケーションは起動すると、環境設定に従ってクライアントのNLS環境を初期化します。

    Oracle Developerアプリケーションの表示形式の設定など、ローカルで実行されるすべてのNLS操作にこれらの設定が使用されます。

  2. クライアントは、データベースに接続すると、NLS_LANGで定義された情報をデータベースに伝達します。

  3. データベース・セッションは、クライアントから伝達された設定に基づいてNLS環境を初期化します。

    クライアントにより設定が指定されていなかった場合、セッションは初期化パラメータ・ファイルの設定を使用します。データベースが初期化パラメータの設定を使用するのは、クライアントがNLS設定をまったく指定しなかった場合のみです。クライアントが一部のNLS設定を指定した場合、残りのNLS設定はデフォルトの設定になります。

クライアント・アプリケーションにかわって開始された各セッションは、他のセッションと同じまたは異なるロケールで実行されます。たとえば、一方のセッションではドイツ語ロケールが使用され、別のセッションではフランス語ロケールが使用される場合があります。また、各セッションで同じまたは異なる言語要件が指定されます。

次の表に、異なるNLS_LANG設定を使用する2つのクライアントを示します。ユーザーは、各ホスト上でSQL*Plusを起動して同じデータベースにhrとしてログオンし、同時に同じ問合せを実行します。各セッションの結果は、浮動小数点数に関するロケール固有のNLS設定のために異なります。

表1ロケール固有のNLS設定

t クライアント・ホスト 1 クライアント・ホスト 2
t0
$ NLS_LANG=American_America.US7ASCII
$ export NLS_LANG 
$ NLS_LANG=German_Germany.US7ASCII
$ export NLS_LANG
t1
$ sqlplus /nolog 
SQL> CONNECT hr@proddb 
Enter password: ******* 
SQL> SELECT 999/10 FROM DUAL;
  
999/10  
----------  
99.9
$ sqlplus /nolog  
SQL> CONNECT hr@proddb  
Enter password: *******  
SQL> SELECT 999/10 FROM DUAL; 
  
999/10  
----------  
99,9

関連項目: NLS設定について学習するには、『Oracle AI Databaseグローバリゼーション・サポート・ガイド』を参照してください。

Oracle Globalization Development Kit

Oracle Globalization Development Kit (GDK)には、包括的なプログラミングAPIが含まれています。

APIはJavaとPL/SQLのどちらでも使用でき、サンプル・コード、グローバル・アプリケーションの作成中に発生する設計、開発およびデプロイメント上の様々な問題に対処するドキュメントが含まれています。GDKは、開発プロセスを簡略化し、グローバル環境サポートに使用されるインターネット・アプリケーションの開発コストを削減します。

GDKは主に、GDK for JavaとGDK for PL/SQLの2つの部分で構成されています。GDK for Javaは、Javaアプリケーションにグローバリゼーション・サポートを提供します。GDK for PL/SQLは、PL/SQLプログラミング環境にグローバリゼーション・サポートを提供します。これらの2つの要素で提供される機能は同じではありません。

関連項目: 『Oracle AI Databaseグローバリゼーション・サポート・ガイド』

非構造化データ

非構造化データは、小さな論理構造に細分化されていないデータです。

従来のリレーショナル・モデルは、単純な表に格納できる単純な構造化データを処理します。Oracle Databaseでは、標準構成要素に分解できない非構造化データもサポートしています。非構造化データには、テキスト、グラフィック・イメージ、ビデオ・クリップ、サウンド・ウェーブなどが含まれます。

Oracle Databaseには、非構造化コンテンツを処理するためのデータ型が組み込まれています。これらのデータ型は、データベースではシステム固有の型として表示され、SQLを使用して問い合せることができます。

Oracle DatabaseにおけるXMLの概要

Oracle XML DBは、高パフォーマンスのXML操作、格納および取得に関連する一連のOracle Databaseテクノロジである。Oracle XML DBは、SQLデータ・モデルとXMLデータ・モデルの相互運用が可能な方法でサポートするシステム固有のXMLを提供します。

Oracle XML DBは、アプリケーションで処理されたデータの一部または全部をXMLで表現されているJavaまたはPL/SQLアプリケーションに適しています。たとえば、多数のXML文書を収集、生成、検証および検索する必要があるアプリケーションなどに適しています。

Oracle XML DBでは、次のような多くの機能を提供しています。

次の例では、XMLType型のorders表を作成します。

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

また、前述の例で、ホスト・コンピュータ上の物理ディレクトリに対するデータベース内の論理名となるSQLディレクトリ・オブジェクトも作成します。このディレクトリにXMLファイルが格納されます。次に、purOrder.xmlファイルからorders表にXMLコンテンツを挿入します。

Oracle XML Developer's Kit (XDK)には、XML文書(ファイル・システム上にありますかデータベース内に存在するかは不問)を読取り、操作、変換および表示するための基本的なビルディング・ブロックが含まれています。APIおよびツールは、Java、CおよびC++で使用できます。本番のOracle XDKには、商用再配布ライセンスが付属します。

例23-1 XMLType

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders
  VALUES (XMLType(BFILENAME('XMLDIR','purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));

関連情報:

Oracle DatabaseにおけるJSONの概要

Oracle Databaseは、問合せや索引付けなど、JavaScript Object Notation (JSON)データに対するネイティブ・サポートを提供します。

この項では、次のトピックについて説明します:

JSONとは

JavaScript Object Notation (JSON)は、オブジェクト、配列およびスカラー・データを表すことができる、言語に依存しない、テキストベースのデータ書式です。JSONデータは様々なプログラミング言語で解析および生成できます。

一般に、JSONはデータ交換言語として機能します。多くの場合、構造化されたデータをシリアライズし、通常はサーバーとWebアプリケーション間でネットワークを介して交換するために使用されます。JSONは、HTML組込みJavaScriptで記述されたアプリケーションを実行するWebブラウザで主要なデータ形式です。

JavaScriptオブジェクトは、プロパティ名と関連付けられたJSON値の0個以上のペアの連想配列。JSONオブジェクトは、JavaScriptオブジェクト・リテラルで、カンマ区切りの名前と値のペア、コロンで区切られた各ペアの名前と値を含み、中カッコので囲まれたプロパティ・リストとして記述されます。オブジェクト・プロパティはキーと呼ばれる場合があります。オブジェクト・プロパティの名前/値のペアは、オブジェクト・メンバーと呼ばれることがあります。

例23-2 JSONオブジェクト

この例は、発注書を表すJSONオブジェクトを示しており、最上位のプロパティ名はPONumber、Reference、Requestor、User、Costcenter、ShippingInstruction、Special Instructions、AllowPartialShipmentおよびLineItemsです。

{ "PONumber"             : 1600,
  "Reference"            : "ABULL-20140421",
  "Requestor"            : "Alexis Bull",
  "User"                 : "ABULL",
  "CostCenter"           : "A50",
  "ShippingInstructions" : { "name"   : "Alexis Bull",
                             "Address": { "street"  : "200 Sporting Green",
                                          "city"    : "South San Francisco",
                                          "state"   : "CA",
                                          "zipCode" : 99236,
                                          "country" : "United States of America" },
                             "Phone" : [ { "type" : "Office", "number" : "909-555-7307" },
                                         { "type" : "Mobile", "number" : "415-555-1234" } ] },
  "Special Instructions" : null,
  "AllowPartialShipment" : false,
  "LineItems"            : [ { "ItemNumber" : 1,
                               "Part"       : { "Description" : "One Magic Christmas",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 13131092899 },
                               "Quantity"   : 9.0 },
                             { "ItemNumber" : 2,
                               "Part"       : { "Description" : "Lethal Weapon",
                                                "UnitPrice"   : 19.95,
                                                "UPCCode"     : 85391628927 },
                               "Quantity"   : 5.0 } ] }

前述の例では、ほとんどのプロパティに文字列値があります。PONumber、zipCode、ItemNumberおよびQuantityには数値があります。Shipping InstructionsおよびAddressには値としてオブジェクトがあります。LineItemsには値として配列があります。

ノート: JSONのより包括的な概要は、『Oracle XML DB開発者ガイド』を参照してください

JSONとXML

一般に、JSONとXMLは両方ともデータ交換言語として使用されます。リレーショナル・データとは異なり、JSONデータとXMLデータは両方とも、データを定義するスキーマなしで、データベース内で格納、索引付けおよび問合せを行うことができます。

通常、JSONデータのほうがXMLデータより、JSONデータの生成、解析および処理が簡単です。ユーザーにとっても、理解および使用することが簡単です。次の表では、JSONとXMLの相違点についてさらに説明します。

表2 JSONとXMLの相違点

機能 JSON XML
単純な構造化データで役立つ はい はい。ただし、半構造化されたデータと複雑な構造化データもサポートします
複合コンテンツで役立つ いいえ はい
属性、ネームスペース、継承および置換が不足している はい いいえ
順序付けに重点を置く いいえ はい
主にデータではなくドキュメントを目的とする いいえ はい
日付データ型を含む いいえ はい

注意: XMLおよびJSONのより包括的な比較の詳細は、Oracle AI Database JSON開発者ガイドを参照

JSONに対するネイティブ・データベース・サポート

JSONは、リレーショナル・データベース機能が不足している非SQLデータベースにも広範囲に格納されます。一方、Oracle Databaseは、トランザクション、索引付け、宣言的問合せおよびビューなどの機能を使用して、JSONをネイティブにサポートしています。

OCI、.NETおよびJDBCの使用など、他のデータベース・データへのアクセスと同じ方法で、データベースに格納されたJSONデータにアクセスできます。JSONデータの保存には、問合せおよびDML処理用に最適化された独自のバイナリ形式であるJSONデータ型を使用することをお薦めします。JSONデータ型は、SQLデータ型が許可されているほとんどの場合に、PL/SQLプログラム・ユニットの列型またはパラメータ型を含めて使用できます。

Oracle SQLを使用して、JSONデータで次のような操作を実行できます。

テキストのJSONデータでは常にUnicode文字セット(UTF8またはUTF16)が使用されます。Oracle Databaseでは、JSONデータの解析および問合せ時にUTF8を内部で使用します。このような処理に入力されるデータまたはこのような処理から出力されるデータをUTF8とは異なる文字セットにする必要がある場合は、適切な文字セット変換が自動的に実行されます。ノート: Oracle DatabaseでのJSONサポートのより包括的な概要については、Oracle AI Database JSON開発者ガイドを参照してください

LOBの概要

ラージ・オブジェクト(LOB)データ型を使用すると、非構造化データの大きなブロックが、バイナリまたは文字形式で格納され、操作できるようになります。

ラージ・オブジェクト(LOB)データ型では、データに対する効率的、ランダム、かつピース単位のアクセスができます。

内部LOB

内部LOBは、データを外部ファイルではなく、データベース自体に格納します。

内部LOBは、次のとおりです。

データベースは、他のデータ型とは異なる方法でLOBを格納します。LOB列を暗黙的に作成すると、LOBセグメントおよびLOB索引が作成されます。LOBセグメントとLOB索引は常に一緒に格納され、これらを含む表領域は、表を含む表領域と異なる場合があります。

ノート:データベースは、少量のLOBデータを個別のLOBセグメントにではなく、表自体に格納できる場合もあります。

LOBセグメントは、データをチャンクと呼ばれる単位で格納します。チャンクは、論理的に連続するデータ・ブロックのセットであり、LOBに割り当てられる最小単位のデータです。表の行には、LOB索引を指すLOBロケータと呼ばれるポインタが格納されます。表に問合せが実行されると、データベースはLOB索引を使用して、LOBチャンクの場所をすばやく特定します。

データベースは、他のデータと異なる方法でLOBセグメントの読取り一貫性を管理します。UNDOデータを使用して変更を記録するかわりに、データベースはビフォア・イメージをセグメント自体に格納します。トランザクションによってLOBに変更が加えられると、データベースは新しいチャンクを割り当て、古いデータを元の場所に残します。トランザクションがロールバックされると、データベースも古いチャンクを指す索引まで変更をロールバックします。

関連情報:

外部LOB

BFILE (バイナリ・ファイル・ラージ・オブジェクトまたはLOB)は、外部ラージ・オブジェクトです。

BFILEは、データベースによりオペレーティング・システム内のファイルへのポインタが格納されるため、外部LOBになります。外部データは、読取り専用です。

BFILEは、ディレクトリ・オブジェクトを使用してデータを検索します。使用領域量は、ディレクトリ・オブジェクト名の長さ、およびファイル名の長さによって決まります。

バイナリ・ファイルがデータベースの外部にあるため、BFILEでは内部LOBと同じ読取り一貫性メカニズムを使用しません。ファイル内のデータが変更されると、同じバイナリ・ファイルからの読取りが繰り返されると、異なる結果が生成される可能性があります。

SecureFiles

SecureFiles LOB記憶域は、2つの記憶域タイプの1つです。もう1つは、BasicFiles LOB記憶域です。

SECUREFILE LOBパラメータでは、圧縮と複製解除(拡張圧縮オプションの一部)、および暗号化(拡張セキュリティ・オプションの一部)を含む特定の拡張機能を使用できます。Oracle Database 12c以降では、SecureFilesはLOBのデフォルトの記憶域メカニズムです。

関連情報:

Oracle Textの概要

Oracle Text (Text)は、Oracle Databaseに統合された全テキスト検索テクノロジです。Oracle Textは、ファイル・システム、データベースまたはWeb上に格納されているすべてのドキュメントまたはテキスト形式のコンテンツに索引を付けます。これらのドキュメントは、テキスト形式のコンテンツ、メタデータまたは属性に基づいて検索できます。

Oracle Textには、次の利点があります。

ユースケースとして、電子機器を販売するオークション・サイトのカタログ索引を作成する必要があるとします。新しい在庫が毎日追加されます。品物の説明、入札日、価格をともに格納する必要があります。アプリケーションは、複合問合せに対して適切な時間で応答する必要があります。最初に、catalog表を作成し、データを入力します。次に、Oracle Textを使用してCTXCAT索引を作成し、この索引は、SELECT ... WHERE CATSEARCH文のCATSEARCH演算子を使用した問合せが可能です。図23-4に、catalog表、そのCTXCAT索引、およびCATSEARCH演算子を使用して索引を問い合せているカタログ・アプリケーションとの関係を示します。

図4: カタログ問合せアプリケーション

画像ccapp017.gifの説明

関連情報:

Oracle Spatial and Graphの概要

Oracle Spatial and Graph (Spatial and Graph)には、空間データおよび空間分析と、物理グラフ・アプリケーション、論理グラフ・アプリケーション、ネットワーク・グラフ・アプリケーション、ソーシャル・グラフ・アプリケーションおよびセマンティック・グラフ・アプリケーション用の高度な機能が含まれています。

空間機能は、Oracleデータベースでの空間特性コレクションの格納、取得、更新、および問合せを容易にするスキーマおよびファンクションを提供します。空間データの一例は、ロード・マップです。空間データは、オブジェクトの地球上の位置(緯度や経度など)をマップ上に示します。地図のレンダリングでは、この空間データにより、オブジェクトの位置を2次元の紙面に投影します。地理情報システム(GIS)では、このような地表面と相関する空間データを格納、取出しおよびレンダリングができます。Oracleデータベースにこの空間データが格納されており、Spatial and Graphを使用すれば、このデータの操作および取得とこのデータの他のデータへの関連付けができます。

関連項目: 『Oracle Spatial開発者ガイド』

SQLプロパティ・グラフの概要

Oracle Databaseのプロパティ・グラフ機能は、Oracle Databaseの強力なグラフ・サポートを提供します。

プロパティ・グラフ機能を使用すると、製品推奨、不正検出、リスク分析、ターゲット・マーケティングなどのアプリケーションについて、顧客データ、ソーシャル・ネットワーク、財務トランザクションなどのデータ・セット内の複雑な関係を調べ、検出できます。この高パフォーマンスグラフ機能は、60近くの事前構築済アルゴリズムを備えた、高度なグラフ問合せ言語サポート、開発者API、および分析機能を提供します。

PGQL (Property Graph Query Language)サポートなどのプロパティ・グラフ機能は、Oracle Database 12.2以降で使用できます。Oracle Databaseリリース26ai以降では、SQL:2023標準で定義されているSQLを使用してプロパティ・グラフを作成および問い合せることができることもできます。

Oracle Graph Server and Clientは、Oracle Databaseのプロパティ・グラフ機能と連携するソフトウェア・パッケージです。グラフ分析アルゴリズムを実行するためのグラフ・ツール、クライアント・ライブラリおよびOracle Graph Serverが含まれています。

関連項目