『Oracle Database PL/SQL言語リファレンス』のPL/SQLの言語要素に関する説明では、Oracleでサポートされている言語要素が示されています。
この章では、これらの言語要素の概要を示し、TimesTenにおけるサポートについて説明します。 また、TimesTenサポートに関するその他の考慮事項についても説明します。
表10-1に、『Oracle Database PL/SQL言語リファレンス』のPL/SQLの言語要素に関する説明と同じ、PL/SQLの言語要素を示します。 PL/SQLの言語要素の詳細は、そのドキュメントを参照してください。 各要素について、次の内容を示します。
1列目は言語要素です。
2列目は要素の簡単な説明です。
3列目は、要素がTimesTenでサポートされているかどうかを示します。
4列目は例とコメントです。このドキュメントまたは他のドキュメントに記載されている、追加説明や例へのリンクも含まれています。
表10-1 PL/SQLの言語要素
| 要素名 | 説明 | サポート | 例/コメント | 
|---|---|---|---|
| 代入文 | 変数、パラメータまたは要素の現在の値を設定します。 | Y | 「PL/SQLの変数および定数」を参照してください。 | 
| AUTONOMOUS_TRANSACTIONプラグマ | ルーチンを自律型としてマークします。 | N | TimesTenでは、自律型トランザクションはサポートされていません。 | 
| ブロック宣言 | PL/SQLソース・プログラムの基本単位。 | Y | 「PL/SQLブロック」を参照してください。 | 
| CASE文 | 式を評価し、複数の値と比較します。比較結果が | Y | 「PL/SQL制御構造」を参照してください。 | 
| CLOSE文 | カーソルまたはカーソル変数をクローズします。 | Y | (特に)例2-13「カーソルを使用した従業員情報の取得」を参照してください。 | 
| コレクション定義 | すべて同じ型の要素の順序付きグループであるコレクションを指定します。 | Y | たとえば、連想配列(索引付き表)、ネストした表、VARRAYなどがあります。 TimesTenではこれらの型がサポートされていますが、PL/SQLと他の言語で作成されたアプリケーションの間でこれらの型を渡すことはできません。 「コレクションの使用」を参照してください。 | 
| コレクション・メソッド | コレクションに対して動作し、ドット表記法を使用してコールされる組込みサブプログラム。 | Y | 『Oracle Database PL/SQL言語リファレンス』のコレクション・メソッドの使用に関する説明を参照してください。 コレクション・メソッドには、COUNT、DELETE、EXISTS、EXTEND、FIRST、LAST、LIMIT、NEXT、PRIOR、TRIMなどがあります。 | 
| コメント | 説明のためにコードに含められるテキスト。 | Y | 1行コメントと複数行コメントがサポートされています。 | 
| COMMIT文 | 現在のトランザクションを終了し、トランザクションで加えられたすべての変更を確定します。 | Y | TimesTen SQL文。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCOMMITに関する説明を参照してください。 重要: TimesTenでは、COMMIT文およびROLLBACK文によってすべてのカーソルがクローズされます。 | 
| 定数と変数の宣言 | PL/SQLコードで使用する定数と変数を、PL/SQLブロック、サブプログラムまたはパッケージの宣言部で指定します。 | Y | 「PL/SQLの変数および定数」を参照してください。 | 
| CONTINUE文 | ループの現在の反復を終了し、制御を次の反復に渡します。 | Y | 「CONTINUE文」を参照してください。 | 
| カーソル属性 | カーソルまたはカーソル変数に追加され、データ操作文の実行に関する有用な情報を戻します。 | Y | 明示カーソルとカーソル変数には、%FOUND、%ISOPEN、%NOTFOUNDおよび%ROWCOUNTという4つの属性があります。 暗黙カーソル(SQL)には、さらに%BULK_ROWCOUNTおよび%BULK_EXCEPTIONSという属性があります。 「%ROWCOUNT属性および%NOTFOUND属性の使用」および「SQL%BULK_ROWCOUNTでのFORALLの使用」を参照してください。 また、『Oracle Database PL/SQL言語リファレンス』のカーソル属性に関する説明も参照してください。 | 
| カーソル宣言 | カーソルを宣言します。 複数行の問合せを実行するために、TimesTenによって、処理情報が格納される名前のない作業領域がオープンされます。 カーソルを使用して、作業領域に名前を付けたり、情報にアクセスしたり、行を個別に処理できます。 | Y | 「PL/SQLプログラムでのカーソルの使用」を参照してください。 | 
| カーソル変数(REF CURSOR) | SQL結果セット上のカーソルへのハンドルとして機能します。 | Y | TimesTenでは、OUT REF CURSORは1文に1つのみがサポートされています。 「PL/SQL REF CURSOR」を参照してください。 | 
| DELETE文 | 表から行を削除します。 | Y | TimesTen SQL文。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のDELETEに関する説明を参照してください。 | 
| EXCEPTION_INITプラグマ | ユーザー定義の例外をTimesTenエラー番号に関連付けます。 | Y | 『Oracle Database PL/SQL言語リファレンス』のEXCEPTION_INITプラグマに関する説明を参照してください。 | 
| 例外定義 | 実行時エラーまたは警告状態である例外を指定します。 事前定義の例外とユーザー定義の例外があります。 | Y | 事前定義の条件は暗黙的に発生します。 ユーザー定義の例外は、RAISE文によって明示的に発生します。 発生した例外を処理するには、例外ハンドラと呼ばれる個別のルーチンを作成します。 第4章「エラーと例外の処理」を参照してください。 | 
| EXECUTE IMMEDIATE文 | 動的SQL文を1回の操作で作成して実行します。 | Y | TimesTenでは、この文を使用してSQL DMLとDDL文を実行できますが、PL/SQLを実行することはできません。 「PL/SQLでの動的SQL(EXECUTE IMMEDIATE文)」を参照してください。 | 
| EXIT文 | ループを終了し、制御をループの最後に渡します。 | Y | 例7-3を参照してください。 | 
| 式定義 | オペランド(変数、定数、リテラル、演算子など)と演算子を組み合せた式を指定します。 最も単純な式は1つの変数です。 | Y | |
| FETCH文 | 複数行の問合せの結果セットからデータ行を取得します。 | Y | 例2-13を参照してください。 | 
| FORALL文 | 入力コレクションをSQLエンジンに送信する前にバルク・バインドします。 | Y | 「FORALL操作およびBULK COLLECT操作」を参照してください。 | 
| ファンクションの宣言と定義 | PL/SQLブロックまたはパッケージで宣言および定義できる、単一値を戻すサブプログラムまたはストアド・プログラムを指定します。 | Y | ファンクションまたはプロシージャは、無名ブロックで実行する必要があります。ファンクションまたはプロシージャは、TimesTenでは、CALL文またはその他のSQL文から実行することはできません。 TimesTen SQLでCREATE FUNCTION文を使用してストアド・ファンクションを作成します。「PL/SQLのプロシージャおよびファンクション」を参照してください。 また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE FUNCTIONに関する説明も参照してください。 後述の「プロシージャの宣言と定義」も参照してください。 | 
| GOTO文 | 文ラベルまたはブロック・ラベルに無条件に分岐します。 | Y | 『Oracle Database PL/SQL言語リファレンス』のGOTO文に関する説明を参照してください。 | 
| IF文 | 関連付けられているブール式の値に応じて、一連の文を実行するかスキップします。 | Y | 「条件制御」を参照してください。 | 
| INLINEプラグマ | サブプログラムのコールをインライン化するかどうかを指定します。 | Y | 『Oracle Database PL/SQL言語リファレンス』のINLINEプラグマに関する説明を参照してください。 | 
| INSERT文 | 1つ以上のデータ行を表に挿入します。 | Y | TimesTen SQL文。 「INSERT文を使用する例」を参照してください。 また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のINSERTに関する説明も参照してください。 | 
| リテラル宣言 | 数値、文字列、またはブール値を指定します。 | Y | 例: 数値リテラル: 135 文字列リテラル: 'TimesTen' | 
| LOCK TABLE文 | 指定されたロック・モードでデータベース表をロックします。 | N | TimesTenでは、LOCK TABLE文はサポートされていません。 | 
| LOOP文 | 一連の文を複数回実行します。 たとえば、FORループまたはWHILEループを実装する場合に使用できます。 | Y | 例2-8「WHILEループの使用」を参照してください。 また、『Oracle Database PL/SQL言語リファレンス』のLOOP文に関する説明も参照してください。 | 
| MERGE文 | 1つ以上のソースから行を選択して、更新したりターゲット表に挿入できます | Y | TimesTen SQL文。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のMERGEに関する説明を参照してください。 | 
| NULL文 | 何も操作を行いません。 アクションを何も実行しないで制御を次の文に渡します。 | Y | 『Oracle Database PL/SQL言語リファレンス』のNULL文に関する説明を参照してください。 例3-3でもNULL文が使用されています。 | 
| オブジェクト型宣言 | SQLで作成され、データベースに格納されるカスタム・オブジェクト型を指定します。 | N | オブジェクト型は、データベース・レベルではサポートされていません。 たとえば、CREATE TYPEはサポートされていません。 | 
| OPEN文 | カーソルに関連付けられた問合せを実行します。 問合せを処理するためのデータベース・リソースを割り当て、結果セットを識別します。 | Y | 例2-13「カーソルを使用した従業員情報の取得」を参照してください。 | 
| OPEN-FOR文 | カーソル変数(REF CURSOR)に関連付けられたSELECT文を実行します。 結果セット内の最初の行の前にカーソル変数を配置します。 | Y | 例3-4「動的な複数行問合せの結果セットからの行のフェッチ」を参照してください。 | 
| パッケージ宣言 | 関連するPL/SQLの型、項目およびサブプログラムを論理的にグループ化するデータベース・オブジェクトであるパッケージを指定します。 | Y | TimesTen SQL文のCREATE PACKAGEとCREATE PACKAGE BODY。 これらの文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のSQL文に関する説明を参照してください。 また、「PL/SQLパッケージ」も参照してください。 | 
| プロシージャの宣言と定義 | PL/SQLブロックまたはパッケージで宣言および定義できる、特定のアクションを実行するサブプログラムまたはストアド・プログラムを指定します。 | Y | プロシージャまたはファンクションは、無名ブロックで実行する必要があります。ファンクションまたはプロシージャは、TimesTenでは、CALL文またはその他のSQL文から実行することはできません。 TimesTen SQLでCREATE PROCEDURE文を使用してストアド・プロシージャを作成します。「PL/SQLのプロシージャおよびファンクション」を参照してください。また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE PROCEDUREに関する説明も参照してください。 前述の「ファンクションの宣言と定義」も参照してください。 | 
| RAISE文 | PL/SQLブロックまたはサブプログラムの通常の実行を停止し、制御を例外ハンドラに渡します。 | Y | 「RAISE文の使用」を参照してください。 | 
| レコード定義 | データベース行と同様に様々な型のデータ値が格納される複合変数であるレコードを定義します。 | Y | 「レコードの使用」を参照してください。 | 
| RESTRICT_REFERENCESプラグマ | パッケージ指定またはオブジェクト型指定内のサブプログラム(通常はファンクション)が、データベース表またはパッケージ変数の読取りや書込みを行わないことを示します。 | N | TimesTenでは、このプラグマは無視されます。 | 
| RETURN文 | サブプログラムの実行を即座に完了し、制御をコール元に戻します。 実行は、サブプログラムのコール後の文から再開します。 | Y | 『Oracle Database PL/SQL言語リファレンス』のRETURN文に関する説明を参照してください。 | 
| RETURNING INTO句 | この句が属している文によって戻された値を格納する変数を指定します。 | Y | TimesTenの句。 「RETURNING INTO句」および「RETURNING INTOを使用する例」を参照してください。 | 
| ROLLBACK文 | 現在のトランザクション中に加えられたデータベースの変更を元に戻します。 | Y | TimesTen SQL文。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のROLLBACKに関する説明を参照してください。 重要: TimesTenでは、COMMIT文およびROLLBACK文によってすべてのカーソルがクローズされます。 | 
| %ROWTYPE属性 | データベース表内の行を表すレコード型を指定します。 | Y | 例2-2を参照してください。 | 
| SAVEPOINT文 | トランザクション処理の現在の位置に名前を付けてマークします。 | N | TimesTenでは、SAVEPOINTはサポートされていません。 | 
| SELECT INTO文 | 表の1行から値を取得し(SELECT)、その値を変数またはレコードに格納します。 BULK COLLECT句(次の表10-2を参照)とともに使用すると、結果セット全体を1回で取得できます。 | Y | 例2-3「SELECT INTOを使用した変数への値の代入」を参照してください。 また、『Oracle Database PL/SQL言語リファレンス』のPL/SQLを使用したデータの問合せに関する説明も参照してください。 | 
| SERIALLY_REUSABLEプラグマ | サーバーへの1回のコールの間のみ、パッケージ状態が必要であることを示します。 | N | TimesTenでは、SERIALLY_REUSABLEプラグマはサポートされていません。 | 
| SET TRANSACTION文 | 読取り専用トランザクションまたは読取り/書込みトランザクションを開始します。 | N | TimesTenでは、SET TRANSACTION文はサポートされていません。 | 
| SQLカーソル | SELECT文の結果セットの処理に使用される、明示的または暗黙的カーソル。 | Y | 「PL/SQLプログラムでのカーソルの使用」を参照してください。 | 
| SQLCODEファンクション | 直前に発生した例外の番号コードを戻します。 | Y | エラー条件が同じ場合、組込みファンクションのSQLCODEによって戻されるエラー・コードはTimesTenとOracleで同じですが、SQLERRMの戻り値は異なることがあります。 このことについては、「TimesTenエラー・メッセージおよびSQLコード」でも説明しています。 | 
| SQLERRMファンクション | error-number引数に関連付けられているエラー・メッセージを戻します。 | Y | エラー条件が同じ場合、組込みファンクションのSQLERRMによって戻されるエラー・メッセージは、TimesTenとOracleで同じとはかぎりませんが、SQLCODEの戻り値は同じです。 このことについては、「TimesTenエラー・メッセージおよびSQLコード」でも説明しています。 | 
| %TYPE属性 | フィールド、レコード、ネストした表、データベース列または変数のデータ型をハードコードするのではなく、宣言で使用できます。 このことは、特にデータベース列を参照する変数、フィールドおよびパラメータを宣言する場合に役立ちます。 | Y | 「PL/SQLの変数および定数」を参照してください。 | 
| UPDATE文 | 表のすべての行または検索条件を満たす行の1つ以上の列の値を更新します。 | Y | TimesTen SQL文。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のUPDATEに関する説明を参照してください。 | 
表10-2に、TimesTenでサポートされている機能のサポートに関するその他の考慮事項および相違点を示します。 コメントでは、TimesTenにおけるPL/SQLとOracle(リリース11.1.0.7)におけるPL/SQLの相違点について説明します。
表10-2 TimesTen PL/SQLとOracle PL/SQLのその他の相違点
| 機能 | コメント | 
|---|---|
| ALTER {PROCEDURE| FUNCTION | PACKAGE} | 構文およびセマンティクスは、Oracleの場合と同じです。 これらの文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のSQL文に関する説明を参照してください。 | 
| ALTER SESSION文 | ALTER SESSIONを使用すると、「PL/SQL接続属性」で説明されているように、一部のPL/SQL接続属性を設定できます。 TimesTenにおけるこの文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のALTER SESSIONに関する説明を参照してください。 | 
| 組込みファンクションおよびSQLファンクション | 「PL/SQL組込みファンクションおよびSQLファンクション」を参照してください。 | 
| BULK COLLECT | PL/SQLでSELECT文とともにこの句を使用すると、カーソルを使用せずに行を取得できます。 「FORALL操作およびBULK COLLECT操作」および「FORALLおよびBULK COLLECTを使用する例」を参照してください。 | 
| CALL文 | TimesTenでは、CALL文を使用してTimesTenの組込みプロシージャを実行します。 Oracleでは、CALL文を使用してPL/SQLのストアド・プロシージャとファンクションを実行します。 | 
| 接続属性 | Oracleの初期化パラメータに相当します。 「PL/SQL接続属性」を参照してください。 また、『Oracle TimesTen In-Memory Databaseリファレンス』のデータ・ストア属性に関する説明も参照してください。 | 
| CREATE FUNCTION | CREATE FUNCTION文はTimesTenでサポートされていますが、AS LANGUAGE、AS EXTERNALおよびPIPELINED句はサポートされていません。 「PL/SQLのプロシージャおよびファンクション」を参照してください。 また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE FUNCTIONに関する説明も参照してください。 TimesTenで | 
| CREATE LIBRARY | CREATE LIBRARY文は、TimesTenではサポートされていません。 | 
| CREATE PACKAGE [BODY] | 構文およびセマンティクスは、Oracleの場合と同じです。 「PL/SQLパッケージ」を参照してください。 また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE PACKAGEとCREATE PACKAGE BODYに関する説明も参照してください。 TimesTenで | 
| CREATE PROCEDURE | CREATE PROCEDURE文はTimesTenでサポートされていますが、AS LANGUAGEおよびAS EXTERNAL句はサポートされていません。 「PL/SQLのプロシージャおよびファンクション」を参照してください。また、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE PROCEDUREに関する説明も参照してください。 TimesTenで | 
| データ型のサポート | 「データ型環境の理解」を参照してください。 | 
| DROP { PROCEDURE | FUNCTION| PACKAGE} | 構文およびセマンティクスは、Oracleの場合と同じです。 これらの文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のSQL文に関する説明を参照してください。 | 
| エラー・レポート | TimesTenアプリケーションでは、エラーのレポートにTimesTenエラー・コードではなくOracleエラー・コードが使用されます。 エラー・コードを含むメッセージは、TimesTenエラー・メッセージまたはOracleエラー・メッセージです。 | 
| SQLからのPL/SQLの実行 | TimesTenでは、静的または動的SQL文からPL/SQLを実行できません。 | 
| クライアント・アプリケーションからのPL/SQLの実行 | Oracle TimesTen In-Memory Databaseでは、ODBC、OCI、Pro*C、TTClasses(一連のTimesTen C++クラス)およびJDBCがサポートされています。 必要に応じて、これらのプログラミング・インタフェースのドキュメントを参照してください。 | 
| ネイティブ動的SQLの実行 | TimesTenでは、Oracle機能以外に、EXECUTE IMMEDIATE文を使用してTimesTenの組込みプロシージャとTimesTen固有のSQL機能(SELECT FIRSTなど)を実行できます。 | 
| TimesTenでは、Oracleとは異なり、表、列、プロシージャ、ファンクションおよびその他のデータベース・オブジェクトの名前で非ASCIIキャラクタ・セットを使用することはできません。 | |
| TimesTenでは、Oracleとは異なり、表、列、プロシージャ、ファンクションおよびその他のデータベース・オブジェクトに引用符で囲まれた大文字以外の名前( create or replace procedure "MixedCase" as begin ... end; / | |
| 結果のキャッシュ | Oracle TimesTen In-Memory Databaseでは、PL/SQLファンクションの結果のキャッシュはサポートされていません。 | 
| SOUNDEX SQLファンクション | TimesTenでは、 | 
| SQL構文、その他 | Oracle TimesTen In-Memory Databaseでは、CREATE TYPE文、データベース・リンクまたはトリガーはサポートされていません。 | 
| 提供パッケージ | Oracle TimesTen In-Memory Databaseには、Oracle PL/SQLの提供パッケージのサブセットが用意されています。 第9章「TimesTenが提供するPL/SQLパッケージ」を参照してください。 | 
| システム表およびシステム・ビュー | Oracle TimesTen In-Memory Databaseでは、Oracleシステム表およびシステム・ビューのサブセットがサポートされています。 『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のシステムおよびレプリケーション表に関する説明を参照してください。 | 
| TimesTenでは、この組込みプロシージャを使用すると、ライブラリ・キャッシュのパフォーマンスやアクティビティに関する統計情報が戻されます。 『Oracle TimesTen In-Memory Databaseリファレンス』のttPLSQLMemoryStatsに関する説明を参照してください。 Oracleでは、V$LIBRARYCACHEシステム・ビューを使用して同じ統計情報を取得できます。 |