ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQL開発者ガイド
11gリリース2 (11.2.2)
B66723-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 TimesTenデータベースにおけるPL/SQLの概要

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の機能

TimesTenのPL/SQLサポートにより、次のことができます。

TimesTenのPL/SQLコンポーネントと操作

この項では、アプリケーションとPL/SQLの対話や、PL/SQLコンポーネントとTimesTenの他のコンポーネントの対話の説明など、TimesTenにおけるPL/SQL操作の概要について説明します。この章の内容は次のとおりです。

アプリケーションとTimesTenおよびPL/SQLの対話

図1-1は、PL/SQLコンポーネントと、PL/SQL操作中のPL/SQLコンポーネント同士の対話およびPL/SQLコンポーネントと他のTimesTenコンポーネントとの対話を示しています。

図1-1 TimesTenのPL/SQLコンポーネント

図1-1の説明が続きます
「図1-1 TimesTenのPL/SQLコンポーネント」の説明

アプリケーションは、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でのPL/SQL

TimesTenでのPL/SQLの処理は、Oracle Databaseでの処理と大部分において同じです。TimesTenに含まれているPL/SQLコンパイラと実行エンジンは、元々Oracle Databaseで使用されていたものであるため、PL/SQLコンポーネントとSQLコンパイラおよび実行エンジンの関係は同等です。PL/SQLユニットの格納に使用する表はTimesTenでもOracle Databaseでも同じであり、これは、格納されたPL/SQLユニットの情報検索に使用できるビューについても同様です。

このように基本的には類似しているものの、潜在的な大きな相違点がいくつかあります。その詳細は、以降のサブセクションで説明します。

PL/SQLブロック内の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ブロックを実行した際に実行時エラーが発生する可能性があります。

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での経験がある開発者

Oracle Database PL/SQLでの経験がある開発者は、このドキュメントの大部分(PL/SQLに関する多くの一般概念の説明)は読む必要がありません。重要な部分、特にOracle DatabaseとTimesTenにおけるPL/SQL機能の相違点は、次に含まれています。TimesTen固有の考慮事項については、第2章第3章および第4章の最後、第9章全体で説明します。

TimesTenでの経験がある開発者

このマニュアルの大部分は、以前に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 PL/SQLデモについて

環境を構成した後、TimesTenクイック・スタート・デモ・アプリケーションをコンパイルして実行することで、すべて正しく設定されていることを確認できます。クイック・スタートのようこそページ(install_dir/quickstart.html)の「SAMPLE PROGRAMS」の下にあるリンクで、次の事項の説明を参照してください。