ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

PL/SQLの新機能

ここでは、このマニュアルに記載されているPL/SQLの新機能について簡単に説明し、詳細情報へのリンクを示します。

11g リリース1(11.1)でのPL/SQLの新機能

11g リリース1(11.1)でのPL/SQLの新機能は、次のとおりです。

組込みSQL正規表現ファンクションの拡張

組込み正規表現ファンクションREGEXP_INSTRおよびREGEXP_SUBSTRの機能が拡張されました。新しい組込みSQL正規表現ファンクションREGEXP_COUNTは、1つの文字列内での任意のパターンの出現回数を戻します。これらのファンクションは、SQLでもPL/SQLでも同様に機能します。


参照:

  • 正規表現の実装の詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • REGEXP_INSTRファンクション、REGEXP_SUBSTRファンクションおよびREGEXP_COUNTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


SIMPLE_INTEGER、SIMPLE_FLOATおよびSIMPLE_DOUBLEデータ型

SIMPLE_INTEGERSIMPLE_FLOATおよびSIMPLE_DOUBLEデータ型は、それぞれPLS_INTEGERBINARY_FLOATおよびBINARY_DOUBLEの事前定義のサブタイプです。各サブタイプはそのベース型と同じ範囲を取り、NOT NULL制約を含んでいます。

SIMPLE_INTEGERPLS_INTEGERとの大きな違いは、オーバーフローの方法です。ただし、SIMPLE_FLOATSIMPLE_DOUBLEは、NOT NULL制約を除いて、そのベース型と同じです。

SIMPLE_INTEGERは、値がNULLになることがなく、オーバーフロー・チェックが不要な場合に使用できます。SIMPLE_INTEGERおよびSIMPLE_DOUBLEは、値がNULLになることがない場合に使用できます。SIMPLE_INTEGER値に対する算術演算はハードウェアで直接実行されるため、これらのサブタイプを使用すると、NULLかどうかのチェックおよびオーバーフロー・チェックのためのオーバーヘッドが発生せず、PLSQL_CODE_TYPE='NATIVE'の場合、そのベース型を使用するよりパフォーマンスが大幅に向上します。PLSQL_CODE_TYPE='INTERPRETED'の場合、パフォーマンスの向上は少なくなります。

詳細は、次の項を参照してください。

CONTINUE文

CONTINUE文は現行のループの反復を終了して、次の反復に制御を移します(ループを終了して、そのループの最後に制御を移すEXIT文とは対照的です)。CONTINUE文には、無条件CONTINUEと条件付きCONTINUE WHENという2つの形式があります。

詳細は、次の項を参照してください。

PL/SQL式での順序

擬似列CURRVALおよびNEXTVALを使用すると、PL/SQLのソース・コードの記述が簡単になり、実行時のパフォーマンスとスケーラビリティが向上します。sequence_name.CURRVALおよびsequence_name.NEXTVALは、NUMBER式を使用できるすべての場所で使用できます。

詳細は、「CURRVALとNEXTVAL」を参照してください。

動的SQLの拡張

システム固有の動的SQLとDBMS_SQLパッケージの両方が拡張されています。

システム固有の動的SQLでは、CLOB型にできるようにすることで32KBを超える動的SQL文がサポートされています。「EXECUTE IMMEDIATE文」および「OPEN-FOR文」を参照してください。

DBMS_SQLパッケージは、次のように拡張されています。

PL/SQLサブプログラムの起動での名前表記法および混合表記法

リリース11.1より前は、PL/SQLサブプログラムを起動するSQL文には、実パラメータを位置表記法で指定する必要がありました。リリース11.1以降は、名前表記法および混合表記法も使用できるようになっています。これによって、SQL文がデフォルトのパラメータを多数持つPL/SQLサブプログラムを起動する際の操作性が向上し、デフォルト値とは異なる値にする必要がある実パラメータがほとんどなくなっています。

一例として、例8-8の後のSELECT文を参照してください。

PL/SQLファンクション結果キャッシュ

ファンクション結果キャッシュを使用すると、領域と時間を大幅に節約できます。結果がキャッシュされるファンクションが異なるパラメータ値で起動されるたびに、それらのパラメータおよびそれぞれの結果がキャッシュに格納されます。それ以降、同じファンクションが同じパラメータ値で起動されると、結果は再計算されるのではなく、キャッシュから取り出されます。

リリース11.1より前は、PL/SQLアプリケーションでファンクションの結果をキャッシュする場合、キャッシュとキャッシュ管理サブプログラムを設計およびコーディングする必要がありました。複数のセッションでそのアプリケーションを実行する場合は、セッションごとにそれぞれキャッシュとキャッシュ管理サブプログラムの独自のコピーが必要でした。各セッションで、同じ高コストの計算を実行する必要がある場合もありました。

リリース11.1以上では、PL/SQLにファンクション結果キャッシュが用意されています。これを使用するには、結果がキャッシュされるようにする各PL/SQLファンクションでRESULT_CACHE句を使用します。ファンクション結果キャッシュは、共有グローバル領域(SGA)に格納されるため、アプリケーションを実行するすべてのセッションで使用できます。

アプリケーションをPL/SQLファンクション結果キャッシュに変換すると、アプリケーションによって使用されるSGAは増加しますが、システム・メモリーの合計使用量は大幅に減少します。

詳細は、次の項を参照してください。

複合トリガー

複合トリガーは、複数のタイミングで起動できるデータベース操作言語(DML)トリガーです。

複合トリガーの本体では、この本体のすべてのセクションのコードがアクセスできるPL/SQLの共通の状態がサポートされています。共通の状態は、トリガーを起動する文でエラーが発生した場合でも、トリガーを起動する文の開始時に確立され、トリガーを起動する文の完了時に破棄されます。

リリース11.1より前は、アプリケーション開発者が補助パッケージを使用して、共通の状態をモデル化していました。このアプローチは、プログラムしにくく、また、トリガーを起動する文でエラーが発生し、AFTER文トリガーが起動されなかった場合にメモリー・リークが発生する可能性がありました。複合トリガー使用すると、様々なタイミングで実装したアクションで共通データを共有するアプローチを簡単にプログラムできるようになります。

詳細は、「複合トリガー」を参照してください。

トリガーに対するより詳細な制御

SQL文CREATE TRIGGERでは、トリガーをより詳細に制御できるENABLE句、DISABLE句およびFOLLOWS句がサポートされています。DISABLE句を使用すると、トリガーを無効な状態で作成できるため、トリガーを有効にする前に、コードが正常にコンパイルされることを確認できます。ENABLE句は、デフォルトの状態を明示的に指定します。 FOLLOWS句を使用すると、同じ表に対して定義され、タイミングも同じであるトリガーの起動順序を制御できます。

詳細は、次の項を参照してください。

データベース常駐接続プール

DBMS_CONNECTION_POOLパッケージは、複数の中間層プロセスによって共有されるデータベース常駐接続プールの管理に使用されます。データベース管理者は、DBMS_CONNECTION_POOLのプロシージャを使用して、データベース常駐接続プールの開始と停止、およびサイズや時間制限などのプール・パラメータの構成を行います。

詳細は、「DBMS_CONNECTION_POOLパッケージ」を参照してください。

サブプログラムの自動インライン化

サブプログラムのインライン化によって、(同じPL/SQLユニット内のサブプログラムに対する)サブプログラム・コールは、コール先サブプログラムのコピーに置き換えられます。ほとんどの場合はこれによって、プログラムのパフォーマンスが向上します。

PRAGMA INLINEを使用して、個々のサブプログラム・コールがインライン化されるかどうかを指定できます。コンパイル・パラメータPLSQL_OPTIMIZE_LEVELを3(デフォルトは2)に設定することによって、自動インライン化を有効にする(コンパイラにインライン化の機会を探るように要求する)こともできます。

まれに、自動インライン化を行ってもプログラムのパフォーマンスが向上しないことがありますが、この場合は、PL/SQL階層型プロファイラを使用して、インライン化を無効にするサブプログラムを識別できます。

詳細は、次の項を参照してください。


参照:

コンパイル・パラメータPLSQL_OPTIMIZE_LEVELの詳細は、『Oracle Databaseリファレンス』を参照してください。

PL/Scope

PL/Scopeは、PL/SQLのソース・コードからユーザー定義の識別子に関するデータを収集して整理するコンパイラ・ドリブンのツールです。PL/Scopeはコンパイラ・ドリブンのツールであるため、直接使用するのではなく、対話型開発環境(SQL DeveloperやJDeveloperなど)を介して使用します。

PL/Scopeを使用すると、ソース・コードを参照したり理解するために費やす時間を最小限に抑えることによって、SQL Developerの生産性を向上させる、強力で効果的なPL/SQLのソース・コード・ブラウザの開発が可能になります。

詳細は、「ユーザー定義の識別子に関するデータの収集」を参照してください。


参照:

『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

PL/SQL階層型プロファイラ

PL/SQL階層型プロファイラは、PL/SQLプログラムの動的な実行プロファイルをサブプログラム・コールごとにまとめてレポートします。SQLの実行時間とPL/SQLの実行時間を別々に示します。動的な実行プロファイル内のサブプログラム・レベルのサマリーごとに、サブプログラムへのコール回数、サブプログラム自体で費やされた時間、サブプログラムのサブツリー(つまり、サブプログラムの下位サブプログラム)で費やされた時間、詳細な親子情報などの情報が含まれています。

生成されたHTMLレポートは、任意のブラウザで参照できます。適切に選択されたリンクが組み込まれたブラウザのナビゲーション機能によって、大規模なアプリケーションのパフォーマンスの分析、アプリケーションのパフォーマンスの向上、および開発コストの削減のための強力な手段が提供されます。

詳細は、「PL/SQLプログラムのプロファイルおよびトレース」を参照してください。


参照:

『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

PL/SQLネイティブ・コンパイラによるシステム固有のコードの直接生成

PL/SQLネイティブ・コンパイラは、PL/SQLコードをC言語のコードに変換してからCコンパイラにシステム固有のコードを生成させるのではなく、システム固有のコードを直接生成します。 個々の開発者は、DBAとして設定を行わずに、システム固有の実行用にPL/SQLユニットをコンパイルできます。ネイティブ・コンパイルされたPL/SQLプログラムの実行速度が大幅に向上する場合もあります。

詳細は、「システム固有の実行のためのPL/SQLユニットのコンパイル」を参照してください。