日本語PDF

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

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

この項では、次の項目について説明します。

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

Oracle開発者は、Oracleテクノロジ・スタックを使用するアプリケーションのデータベース・コンポーネントの作成およびメンテナンスを担当します。

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

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

  • アプリケーションに必要なデータ・モデルの実装

  • スキーマ・オブジェクトの作成

  • データ整合性のルールの実装

  • 新しい開発プロジェクトのプログラミング環境の選択

  • サーバー側のPL/SQLまたはJavaサブプログラム、およびSQL文を使用するクライアント側の手続き型コードの記述

  • 選択した開発ツールを使用したアプリケーション・インタフェースの作成

  • グローバル・アプリケーション開発用のグローバリゼーション・サポート環境の構築

  • 本番環境での開発、テスト、教育およびデプロイメント用の異なるデータベースへのアプリケーションのインスタンス化

関連項目:

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

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

SQL Developer

SQL Developerは、データベース開発者がSQL*Plusを使用して基本的なタスクを編集および開発するのに便利な方法です。

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

  • スキーマ・オブジェクトの参照、作成、編集、削除

  • SQL文の実行

  • PL/SQLプログラム・ユニットの編集およびデバッグ

  • データの操作およびエクスポート

  • レポートの作成および表示

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

関連項目:

SQL Developerの使用方法の詳細は、『Oracle Database 2日で開発者ガイド』および『Oracle SQL Developerユーザーズ・ガイド』を参照

Oracle Application Express

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

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

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

図19-1 埋込み型PL/SQLゲートウェイを使用したApplication Express

図19-1の説明が続きます
「図19-1 埋込み型PL/SQLゲートウェイを使用したApplication Express」の説明

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のツールを使用すると、ユーザーはGUIを介してOracle機能にアクセスして、様々なアプリケーション開発タスクを実行でき、生産性および操作性が向上します。

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

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

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

この項では、次の項目について説明します。

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

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

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

  • Oracle Databaseの機能の学習

    開発者としてOracle Databaseを使用するアプリケーションの開発にかかる時間を最小限に抑えるには、データベースのアーキテクチャおよび機能を利用する必要があります。たとえば、Oracle Databaseのデータ並行性制御およびマルチバージョン読取りの一貫性について理解していないと、アプリケーションでデータの整合性を損なったり、アプリケーションの実行が遅くなったり、スケーラビリティが低下するおそれがあります。トランザクション・ガードおよびアプリケーション・コンティニュイティの機能を理解すると、不要な例外処理コードを記述しなくて済みます。

  • バインド変数の使用(使用しない妥当な理由がある場合を除く)

    問合せにバインド変数を使用すると、データベースは問合せを一度コンパイルした後で、問合せ計画共有プールに格納します。同じ文を再度実行する場合、データベースはソフト解析を実行し、計画を再利用できます。これに対し、ハード解析は、時間がかかる上、多くのリソースを消費します。バインド変数を使用してソフト解析を可能にすることで、効率は大幅に向上し、また、データベースはそのように設計されています。

  • クライアントではなく、データベース・サーバーでの整合性制約の実装

    主キーと外部キーを使用すると、複数のアプリケーションでデータを再利用できます。クライアント側で規則をコーディングすると、データベースに対する実行中、他のクライアントはこれらの規則にアクセスできません。

  • 代表的なデータおよびセッション・アクティビティが利用可能なテスト環境の構築

    稼働中の本番環境をシミュレートするテスト環境の構築には、複数の利点があります。たとえば、アプリケーションのベンチマークを実施でき、拡張性およびパフォーマンスが十分かどうかを確認できます。また、テスト環境を使用して、データベースの変更によるパフォーマンスへの影響を測定したり、アップグレードおよびパッチが正常に動作するかどうかを確認できます。

  • 高いパフォーマンス目標に沿ったデータ・モデルの設計

    通常、汎用データ・モデルを使用すると、パフォーマンスは低下します。データ・モデルは、最も一般的な問合せに最大限効率よく応答できるように綿密に設計します。たとえば、データ・モデルでは、最高のパフォーマンスを示す索引のタイプを使用する必要があります。論理および物理構造の変更は困難または不可能な場合があるため、デプロイ後のチューニングはお薦めしません。

  • 明確なパフォーマンス目標の定義およびメトリックの履歴レコードの保管

    開発での重要な要素として、アプリケーションのパフォーマンスおよび拡張性の正確な判断があります。たとえば、予想されるユーザー負荷、1秒当たりのトランザクション、許容レスポンス時間などのメトリックを使用します。このため、パフォーマンス・メトリックの履歴レコードを保管しておくことをお薦めします。この方法で、事前および事後にパフォーマンスを監視できます。

  • アプリケーション・コードのインスツルメント処理

    開発の際、アプリケーションにデバッグ・コードを追加することをお薦めします。トレース・ファイルが生成可能である場合、パフォーマンス上の問題をデバッグおよび診断するときに便利です。

関連項目:

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

プリコンパイラまたはJavaトランスレータを使用してソース・コードにSQL文を配置したり、APIを使用してアプリケーションとデータベース間の対話を実現できます。

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

関連項目:

プログラミング環境の選択方法の詳細は、Oracle Database開発ガイドを参照してください

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

埋込みSQL

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

Oracleプリコンパイラ

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

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

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

  • 同等のOCIアプリケーションに比べて一般的にコードの記述量が少ないことによる生産性の向上

  • 高度にカスタマイズされたアプリケーションを作成可能

  • リソース使用、SQL文実行および各種のランタイム・インジケータの緊密な監視

  • プリコンパイラにより各埋込みSQL文がOracle Databaseランタイム・ライブラリのコールへと自動変換されることによる時間の節約

  • Object Type Translatorによる、Pro*C/C++アプリケーションで使用可能なCデータ型へのOracle Databaseのオブジェクト型およびコレクションのマップ

  • オブジェクト型とコレクションのコンパイル時におけるタイプ・チェック機能、データベース型からCデータ型への自動型変換

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

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

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

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

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

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

図19-2の説明が続きます
「図19-2 プリコンパイラを使用したプログラム開発」の説明

関連項目:

Pro*C/C++プリコンパイラの詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。

SQLJ

SQLJは、SQL文をJavaソース・コードに埋め込むためのANSI SQL-1999規格です。SQLJは、クライアント側でJavaからSQLへのデータ・アクセスに使用されるJava Database Connectivity(JDBC)APIにかわるシンプルなAPIを提供します。

SQLJインタフェースは、Java版のPro*インタフェースです。SQL文をJavaソース・コードに挿入します。その後、Javaソース・ファイルをSQLJトランスレータに送信すると、SQLJトランスレータによって埋込みSQLが純粋なJDBCベースのJavaコードに変換されます。

関連項目:

SQLJ

クライアント側の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では、次のような多くの機能を提供しています。

  • Oracle Database全体で使用可能なすべてのSQL DDLDML、問合せおよびトランザクション制御機能のサポート

  • ディスク領域が問題になる場合のアプリケーションをデプロイする方法であるインスタント・クライアント

  • Cアプリケーションからのスレッド管理、接続プール、グローバリゼーション・ファンクションおよびデータのダイレクト・パス・ロード

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

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

図19-3の説明が続きます
「図19-3 OCIまたはOCCIを使用した開発プロセス」の説明
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 Thinドライバ

    このPure Javaドライバは、Oracleクライアントがインストールされていないクライアント側にインストールします。これはプラットフォームに依存せず、アプレットおよびアプリケーションの両方で使用できます。

  • JDBC OCIドライバ

    このドライバは、Oracleクライアントがインストールされているクライアント側にインストールします。これはアプリケーションでのみ使用できます。JDBC OCIドライバは、CおよびJavaの両方で記述されており、JDBCコールをOCIコールに変換します。

次のスニペットは、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 Database開発者ガイドおよびOracle Database 2日でJava開発者ガイドを参照してください

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

Oracle Databaseグローバリゼーション・サポートを使用すると、ネイティブ言語でデータを格納、処理および取得できます。

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

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

  • Oracle Databaseグローバリゼーション・サポートのアーキテクチャ(各キャラクタ・セット、地域、言語、言語ソート定義の特性など)の理解

  • 中間層プログラミング環境のグローバリゼーション機能(データベースのロケール・モデルとの対話および同期方法など)の理解

  • 異なるオペレーティング・システム、キャラクタ・セット、およびロケール要件で実行されている複数のクライアントを同時にサポートするコードの設計と記述

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

関連項目:

グローバリゼーションの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照

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

グローバリゼーション・サポート環境には、クライアント・アプリケーションとデータベースが含まれます。言語に依存する処理は、クライアントとサーバー上でパラメータおよび環境変数を設定することによって制御します(クライアントとサーバーは別々の場所に存在する場合もあります)。

注意:

以前のリリースでは、Oracleではグローバリゼーション・サポート機能は各国語サポート(NLS)機能と呼ばれていました。実際、NLSはグローバリゼーション・サポートの一種で、NLSを使用して、各国語を選択し、特定のキャラクタ・セットでデータを格納できます。

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

  • ネイティブ言語および地域

  • 日付、時間、数字、および通貨のローカル形式

  • 暦法(グレゴリオ暦、和暦、元号暦、タイ仏教暦など)

  • Unicodeなどの複数のキャラクタ・セット

  • キャラクタ・セマンティクス

キャラクタ・セット

キャラクタ・セットはグローバリゼーション・サポートの主要なコンポーネントであり、コンピュータ画面に文字を表示するときに使用されるコード体系です。

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

  • データベース・キャラクタ・セットによって、データベースで表現される言語が決定します。このキャラクタ・セットは、データベースの作成時に指定します。

    注意:

    データベースを作成した後でキャラクタ・セットを変更すると、一般的に、時間およびリソースの面で大きなコストがかかります。この操作では、データベース全体のエクスポートおよび再インポートによる、すべての文字データの変換が必要になる場合があります。

  • クライアント・キャラクタ・セットは、クライアント・アプリケーションによって入力および表示されるデータに使用されるキャラクタ・セットです。クライアントとデータベースのキャラクタ・セットは異なる場合もあります。

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

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

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

  • シングルバイト・キャラクタ・セット

    各文字が占めるバイト数は、1バイトです。7ビット・キャラクタ・セットの例には、US7ASCIIなどがあります。8ビット・キャラクタ・セットの例には、WE8DECなどがあります。

  • マルチバイト・キャラクタ・セット

    1文字が2バイト以上を占めます。一般的に、マルチバイト・キャラクタ・セットは、アジア言語に使用されます。

  • Unicode

    ユニバーサル・エンコードされたキャラクタ・セットでは、1つのキャラクタ・セットで任意の言語の情報を格納できます。Unicodeでは、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に一意のコード値が指定されます。

関連項目:

キャラクタ・セットの移行の詳細は、Oracle 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設定のために異なります。

表19-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 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 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では、次のような多くの機能を提供しています。

  • XML文書をデータベース内で表すことができ、SQLによるアクセスを可能にするシステム固有のXMLTypeデータ型

  • XMLスキーマ、XPath、XQuery、XSLT、DOMなどのXML標準のサポート

  • 高度に構造化されたデータから完全な非構造化データまで、すべての形式のXMLデータをサポートするXMLIndex

次の例では、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には、商用再配布ライセンスが付属します。

例19-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オブジェクト・リテラルで、カンマで区切られた名前と値のペア、コロンで区切られた各ペアの名前と値が含まれ、中カッコで囲まれたプロパティ・リストとして記述されます。オブジェクト・プロパティはキーと呼ばれる場合があります。オブジェクト・プロパティの名前と値のペアは、オブジェクト・メンバーと呼ばれる場合があります。

例19-2 JSONオブジェクト

この例は、発注書を表すJSONオブジェクトを示しており、最上位のプロパティ名はPONumberReferenceRequestorUserCostcenterShippingInstructionSpecial InstructionsAllowPartialShipmentおよび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 } ] }

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

注意:

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

JSONおよびXML

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

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

表19-2 JSONとXMLの相違点

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

注意:

XMLおよびJSONの比較の詳細は、Oracle Database JSON開発者ガイドを参照

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

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

データベースに格納されたJSONデータには、他のデータベース・データへのアクセスと同じ方法(OCI、.NETおよびJDBCの使用を含む)でアクセスできます。SQLデータ型XMLTypeを使用して格納されるXMLデータとは異なり、JSONデータは、 VARCHAR2BLOBまたはCLOBを使用して格納されます。Oracle SQLを使用して、JSONデータで次のような操作を実行できます。

  • 非JSONリレーショナル・データとのJSONデータの結合

  • SQL関数json_objectおよびjson_arrayを使用したリレーショナル・データからのJSONドキュメントの生成。

  • SQL関数json_tableを使用したJSONデータのリレーショナル・フォーマットへの投影

  • 列にJSONデータのみを格納するための、is_jsonによるチェック制約の作成。データベースは、このチェック制約を使用して、列がJSON固有の操作(簡略構文など)のためのJSONであることを確認します。

  • PL/SQLオブジェクトとしてのJSONドキュメントの操作。

  • Oracle JSONパス式を引数として受け入れ、ターゲットのJSONデータと照合するための、SQL関数json_queryおよびjson_valueの使用

  • JSONデータの索引付け。

  • 外部表に格納されたJSONデータの問合せ

  • Oracle GoldenGateを使用した、JSONデータが含まれる列を持つ表のレプリケート。

テキストのJSONデータでは常にUnicodeキャラクタ・セット(UTF8またはUTF16)が使用されます。Oracle Databaseでは、JSONデータの解析および問合せ時にUTF8を内部で使用します。このような処理に入力されるデータまたはこのような処理から出力されるデータをUTF8とは異なるキャラクタ・セットにする必要がある場合は、適切なキャラクタ・セット変換が自動的に実行されます。

例19-3 JSON列を持つ表の作成、ロードおよび問合せ

この例では、JSON列po_documentを持つ表j_purchaseorderを作成し、単純なJSONデータを挿入します。一部のデータが省略されています(...)。

CREATE TABLE j_purchaseorder
   (id          RAW (16) NOT NULL,
    date_loaded TIMESTAMP WITH TIME ZONE,
    po_document CLOB
      CONSTRAINT ensure_json CHECK (po_document IS JSON));

INSERT INTO j_purchaseorder
  VALUES (SYS_GUID(),
          SYSTIMESTAMP,
          '{"PONumber"             : 1600,
            "Reference"            : "ABULL-20140421",
            "Requestor"            : "Alexis Bull",
            "User"                 : "ABULL",
            "CostCenter"           : "A50",
            "ShippingInstructions" : {...}
            "Special Instructions" : null,
            "AllowPartialShipment" : true,
            "LineItems"            : [...]}');

次の問合せでは、JSON列po_documentのオブジェクトに対するPONumberを抽出します。

SELECT po.po_document.PONumber FROM j_purchaseorder po;

注意:

Oracle DatabaseでのJSONサポートのより包括的な概要については、Oracle Database JSON開発者ガイドを参照

LOBの概要

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

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

内部LOB

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

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

  • テキスト・ファイルまたはXMLファイルなどの大量のテキストをデータベース・キャラクタ・セットで格納するCLOB(文字LOB)

  • Unicodeデータを格納するNCLOB(各国語キャラクタ・セットLOB)

  • 大量のバイナリ情報をビット・ストリームとして格納し、キャラクタ・セットの変換を行わないBLOB(バイナリ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には、次の利点があります。

  • Oracle Textを使用すると、テキスト検索と通常のデータベース検索を1つのSQL文にまとめることができます。Oracle Textの索引はデータベースにあり、Oracle Textの問合せはOracle Databaseプロセス内で実行されます。オプティマイザは、どのような問合せについても最善の実行計画を選択でき、テキストと構造化された基準を使用する非定型問合せに最高のパフォーマンスを提供します。

  • Oracle Textは、XMLデータにも使用できます。特に、XMLIndexとOracle Textの索引機能を組み合せることで、XML索引と全テキスト索引の両方の利点を活用できます。

  • Oracle TextのSQL APIにより、単純で直感的な方法でOracle Text索引を作成、メンテナンスしてテキスト検索を実行できます。

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

図19-4に、catalog表とそのCTXCAT索引、およびCATSEARCH演算子を使用して索引を問い合せているカタログ・アプリケーションとの関係を示します。

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

図19-4の説明が続きます
「図19-4 カタログ問合せアプリケーション」の説明

関連項目:

Oracle Spatial and Graphの概要

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

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