TimesTenでは、データベースでSQLにプロシージャ構造を統合できるプログラミング言語、PL/SQL(Procedural Language Extension to SQL)がサポートされています。TimesTen 11g リリース2(11.2.2)は、Oracle Databaseリリース11.2.0.2のPL/SQL言語を実装しています。そのため、このリリースのOracle DatabaseにあるほとんどのPL/SQL機能はTimesTenにも含まれており、基本的に同様に操作できます。(相違点については、第9章「TimesTen PL/SQLサポート: リファレンスの概要」を参照してください。)
この章では、TimesTen PL/SQLについて簡単に説明します。内容は次のとおりです。
TimesTenのPL/SQLサポートにより、次のことができます。
PL/SQLプログラミング言語を最大限に活用します。
次のAPIを使用するクライアント・アプリケーションからPL/SQLを実行します。
ODBC
JDBC
Oracle Call Interface (OCI)
Oracle Pro*C/C++
Oracle Data Provider for .NET (ODP.NET)
TTClasses (TimesTen C++ライブラリ)
PL/SQLからTimesTen SQLを実行します。
スタンドアロンのプロシージャ、ファンクション、パッケージまたはパッケージ本体を作成、変更または削除します。
PL/SQLパッケージを使用して、データベース機能を拡張したり、PL/SQLからSQL機能にアクセスできるようにします。
PL/SQLアプリケーションで例外とエラーを処理します。
データベースで接続属性を設定して、PL/SQL環境をカスタマイズします。
セッション・パラメータを変更して、PL/SQL環境を管理できるようにします。
PL/SQLシステム・ビューを使用して、データベース内のPL/SQLメタデータを表示します。
この項では、アプリケーションとPL/SQLの対話や、PL/SQLコンポーネントとTimesTenの他のコンポーネントの対話の説明など、TimesTenにおけるPL/SQL操作の概要について説明します。この章の内容は次のとおりです。
図1-1は、PL/SQLコンポーネントと、PL/SQL操作中のPL/SQLコンポーネント同士の対話およびPL/SQLコンポーネントと他のTimesTenコンポーネントとの対話を示しています。
アプリケーションは、ODBC、JDBC、OCI、Pro*C、ODP.NETまたはTTClassesのいずれかのAPIを使用して、データベースにリクエストを送信します。ODBCはTimesTenにネイティブのAPIであるため、他の各APIは、最終的にODBC層をコールします。
ODBCドライバはTimesTen SQLパーサーをコールして、各受信リクエストを調査し、SQLとPL/SQLのどちらであるかを確認します。次に、リクエストはTimesTen内の適切なサブシステムに渡されます。PL/SQLソースおよびSQL文は、それぞれPL/SQLサブシステムおよびSQLサブシステムによってコンパイル、最適化および実行されます。
PL/SQLコンパイラはPL/SQLソースから実行可能なコードを生成し、SQLコンパイラはSQL文に対して同様の処理をします。各コンパイラによって中間コードが生成されると、これらのコードは、適切なPL/SQLまたはSQL実行エンジンで実行可能になります。この実行可能コード(PL/SQLブロックに関するメタデータを含む)は、データベース内の表に格納されます。
PL/SQLブロックが実行されると、PL/SQL実行エンジンが起動されます。PL/SQLブロックでSQLが起動されると、PL/SQL実行エンジンはTimesTen SQLコンパイラおよびTimesTen SQL実行エンジンをコールしてSQL実行を処理します。
注意: TimesTenにPL/SQLを導入した場合でも、PL/SQLを使用しないアプリケーションにはほとんど影響がありません。アプリケーションでSQLが直接実行される場合、リクエストは、以前のリリースと同じ方法でTimesTen ODBCドライバからTimesTen SQLコンパイラおよび実行エンジンに渡されます。 |
TimesTenでのPL/SQLの処理は、Oracle Databaseでの処理と大部分において同じです。TimesTenに含まれているPL/SQLコンパイラと実行エンジンは、元々Oracle Databaseで使用されていたものであるため、PL/SQLコンポーネントとSQLコンパイラおよび実行エンジンの関係は同等です。PL/SQLユニットの格納に使用する表はTimesTenでもOracle Databaseでも同じであり、これは、格納されたPL/SQLユニットの情報検索に使用できるビューについても同様です。
このように基本的には類似しているものの、潜在的な大きな相違点がいくつかあります。その詳細は、以降のサブセクションで説明します。
Oracle Databaseと同様に、TimesTenのPL/SQLブロックにSQL文を含めることができます。次の例の無名ブロックについて考えてみます。
Command> create table tab2 (x number, last_name VARCHAR2 (25) INLINE NOT NULL); Command> declare > x number; > begin > select salary into x from employees where last_name = 'Whalen'; > insert into tab2 values(x, 'Whalen'); > end; > / PL/SQL procedure successfully completed.
TimesTenのPL/SQLコンパイラは、Oracle Database SQLパーサーのコピーをコールして、そのSQL文の構文を分析および検証します。Oracle Databaseパーサーは、この処理のためにTimesTenに実装されています。この処理の実行中、PL/SQLはSQL文の一部をリライトする場合があります(たとえば、INTO
句を削除したり、PL/SQL変数をバインドに置き換えるなど)。この処理は、TimesTenでもOracle Databaseでも同じです。リライトされたSQL文は、PL/SQLブロックの実行可能コードに含められます。このPL/SQLブロックが実行されると、これらのSQL文はコンパイルされ、TimesTen SQLサブシステムによって実行されます。
Oracle Databaseでは、PL/SQLコンパイラとSQLコンパイラで同じSQLパーサーが使用されます。これに対して、TimesTenでは異なるSQLパーサーが使用されます。TimesTen PL/SQLはOracle Database SQLパーサーを使用しますが、TimesTen SQLはネイティブのTimesTen SQLパーサーを使用します。通常、エンド・ユーザーはこの違いを意識する必要はありませんが、場合によっては意識する必要があります。特に次の点に注意してください。
TimesTen PL/SQLプログラムのSQL文は、Oracle Database SQL構文に従う必要があります。TimesTen SQLは基本的にOracle Database SQLのサブセットですが、TimesTen SQLで使用できてOracle Database SQLでは使用できない式がいくつかあります。このようなTimesTenに固有のSQL操作は、EXECUTE IMMEDIATE
文またはDBMS_SQL
パッケージを介して動的SQLを使用する方法を除いて、PL/SQLでは使用できません。「PL/SQLでの動的SQL(EXECUTE IMMEDIATE文)」を参照してください。
Oracle Databaseで許可されるSQL文は、それがTimesTenでは実行できないSQL文であっても有効とみなされ、PL/SQLコンパイラで受け入れられます。TimesTenではサポートされないSQL機能を使用した場合、PL/SQLブロックのコンパイルは正常に行われることがありますが、そのPL/SQLブロックを実行した際に実行時エラーが発生する可能性があります。
Oracle Databaseでは、PL/SQLブロックがSQL文を起動することも、SQL文がPL/SQLファンクションを起動することもできます。たとえば、ストアド・プロシージャは、WHERE
句内にユーザーが記述したPL/SQLファンクションを含むUPDATE
文を起動することができます。
TimesTenの場合、SQL文からPL/SQLファンクションを起動することはできません。
また、TimesTenはトリガーをサポートしていません。(トリガーに対するXLA、高可用性、非同期のTimesTen代替手段については、『Oracle TimesTen In-Memory Database C開発者ガイド』のXLAおよびTimesTenのイベント管理に関する説明を参照してください。)
このドキュメントは、主に次の開発者を対象としています。
Oracle DatabaseおよびOracle Database PL/SQLの経験があり、TimesTenでPL/SQLを使用する方法について学習する必要がある開発者。このような読者は、Oracle DatabaseでのPL/SQLと、TimesTenでのPL/SQLの相違点を学習する必要があります。
TimesTenの経験はあるがPL/SQLに関する詳しい知識がない開発者。このような読者は、PL/SQLについての一般的な情報が必要です。
それぞれの対象読者にとって特に重要なこのドキュメントの参照先は、次のとおりです。
Oracle Database PL/SQLでの経験がある開発者は、このドキュメントの大部分(PL/SQLに関する多くの一般概念の説明)は読む必要がありません。重要な部分、特にOracle DatabaseとTimesTenにおけるPL/SQL機能の相違点は、次に含まれています。TimesTen固有の考慮事項については、第2章、第3章および第4章の最後、第9章全体で説明します。
「PL/SQLのプロシージャおよびファンクションの実行方法」: TimesTenおよびOracle Databaseで実行方法の比較を示します。
「TimesTenにおける相違点: トランザクション動作」: TimesTenでのトランザクション終了時のカーソル動作について説明します。
「TimesTenにおける相違点: データ型に関する考慮事項」: TimesTenに固有の変換、およびTimesTenがサポートしない型について説明します。
「TimesTenにおける相違点: 例外処理およびエラー動作」: エラーのサポート、処理およびレポートの相違点について説明します。
第6章「PL/SQLのインストールおよび環境」: TimesTenの接続属性について説明します。
第8章「TimesTenが提供するPL/SQLパッケージ」: TimesTenがサポートするOracle Database PL/SQLパッケージのサブセットについて説明します。
第9章「TimesTen PL/SQLサポート: リファレンスの概要」: TimesTen PL/SQLとOracle Database PL/SQLの間の相違点への対処を詳細に説明します。
このマニュアルの大部分は、以前にPL/SQLを経験したことがない読者、特にPL/SQLに関する知識のないTimesTenユーザーを対象として作成されており、このマニュアルのほぼ全体が役に立ちます。特に、第2章「TimesTenにおけるPL/SQLのプログラミング機能」はこのような読者が始める際に役立つほか、第5章「PL/SQLでのTimesTen SQLの使用」では追加の例がいくつか紹介されています。
第9章「TimesTen PL/SQLサポート: リファレンスの概要」は、TimesTen PL/SQLとOracle Database PL/SQLの相違点について説明しているため、関係がない可能性があります。
環境を構成した後、TimesTenクイック・スタート・デモ・アプリケーションをコンパイルして実行することで、すべて正しく設定されていることを確認できます。クイック・スタートのようこそページ(install_dir
/quickstart.html
)の「SAMPLE PROGRAMS」の下にあるリンクで、次の事項の説明を参照してください。
デモ・スキーマおよび設定: build_sampledb
スクリプト(UNIXの場合.sh
、またはWindowsの場合.bat
)によって、サンプル・データベースおよびデモ・スキーマを作成します。デモの使用を開始する前に、これを使用する必要があります。
デモ環境および設定: 通常、TimesTenの設定に使用するttenv
スクリプトのスーパーセットであるttquickstartenv
スクリプト(UNIXの場合.sh
または.csh
、Windowsの場合.bat
)によって、デモ環境を設定します。いずれかのデモをコンパイルおよび実行するセッションに入るたびに、これを使用する必要があります。
デモおよび設定: quickstart/sample_code
ディレクトリの下にあるサブディレクトリには、PL/SQL用のデモが提供されています。デモの実行方法については、サブディレクトリにあるREADMEファイルを参照してください。
デモの内容: 各デモの概要は、SAMPLE PROGRAMSの下にある「PL/SQL」をクリックすると表示されます。