ヘッダーをスキップ

Oracle Database PL/SQLユーザーズ・ガイドおよびリファレンス
10g リリース2(10.2)

B19257-01
目次
目次
索引
索引

戻る 次へ

C PL/SQLのプログラム上の制限

この付録では、PL/SQL言語によって課されるプログラム上の制限について説明します。PL/SQLはプログラミング言語Adaをベースにしています。したがってPL/SQLでは、ツリー構造の中間言語、DIANA(Descriptive Intermediate Attributed Notation for Ada)を使用しています。この中間言語は、インタフェース定義言語(IDL)と呼ばれるメタ表記を使用して定義されます。DIANAは、コンパイラなどのツールによって内部的に使用されます。

PL/SQLのソース・コードはコンパイル時に機械可読のmコードに変換されます。1つのプロシージャまたはパッケージに対応するDIANAおよびmコードの両方がデータベースに格納されます。実行時にDIANAとmコードは共有メモリー・プール内にロードされます。DIANAは依存プロシージャのコンパイルに使用され、mコードはそのまま実行されます。

共有メモリー・プールの場合、パッケージ仕様部、オブジェクト型仕様部、スタンドアロン・サブプログラムまたは無名ブロックは、67108864(2**26)個のDIANAノードに制限されています。ノードは、識別子、キーワード、演算子などのトークンに対応します。PL/SQLコンパイラによる制限を超えないかぎり、6,000,000行以下のコードが許されます。PL/SQLコンパイラによる一部の制限を表C-1に示します。

表C-1    PL/SQLコンパイラの制限 
項目  制限 

プログラム・ユニットに渡されるバインド変数 

32768 

プログラム・ユニット内の例外ハンドラ 

65536 

レコード内のフィールド 

65536 

ブロック・ネストのレベル 

255 

レコード・ネストのレベル 

32 

副問合せネストのレベル 

254 

ラベル・ネストのレベル 

98 

ネストしたコレクションのレベル 

事前定義された制限なし 

BINARY_INTEGER値の絶対値 

-2147483648..2147483647 

PLS_INTEGER値の絶対値 

-2147483648..2147483647 

明示カーソル、ファンクション、プロシージャでの仮パラメータの数 

65536 

プログラム・ユニットから参照されるオブジェクト 

65536 

FLOAT値(2進数)の精度 

126 

NUMBER値(10進数)の精度 

38 

REAL値(2進数)の精度 

63 

識別子のサイズ(文字) 

30 

文字列リテラルのサイズ(バイト) 

32767 

CHAR値(バイト)のサイズ 

32767 

LONG値(バイト)のサイズ 

32760 

LONG RAW値(バイト)のサイズ 

32760 

RAW値(バイト)のサイズ 

32767 

VARCHAR2値(バイト)のサイズ 

32767 

NCHAR値(バイト)のサイズ 

32767 

NVARCHAR2値(バイト)のサイズ 

32767 

BFILE値(バイト)のサイズ 

4G×DB_BLOCK_SIZEパラメータの値 

BLOB値(バイト)のサイズ 

4G×DB_BLOCK_SIZEパラメータの値 

CLOB値(バイト)のサイズ 

4G×DB_BLOCK_SIZEパラメータの値 

NCLOB値(バイト)のサイズ 

4G×DB_BLOCK_SIZEパラメータの値 

プログラム・ユニットに必要なメモリー量を見積もるときには、データ・ディクショナリ・ビューuser_object_sizeを使用して問い合せることができます。parsed_sizeという列に、フラット化されたDIANAのバイト・サイズが戻ります。次に例を示します。

SQL> SELECT * FROM user_object_size WHERE name = 'PKG1';
NAME TYPE SOURCE_SIZE PARSED_SIZE CODE_SIZE ERROR_SIZE
----------------------------------------------------------------
PKG1 PACKAGE 46 165 119 0
PKG1 PACKAGE BODY 82 0 139 0

ただし、サイズの解析結果からDIANAノードの数を見積もることはできません。解析後のサイズが同じプログラム・ユニットが2つあり、一方に必要なDIANAノードの数が1500に対して、他方に必要なのが2000である(2番目のユニットに含まれるSQL文が複雑であるなどの理由で)場合もあるためです。

PL/SQLブロック、サブプログラム、パッケージまたはオブジェクト型のいずれかのサイズが上限を超えると、「PLS-00123: プログラムが大きすぎます。」などのエラーとなります。多くの場合、この問題はパッケージまたは無名ブロックで発生します。パッケージの場合、最良の方法は複数個のより小さなパッケージに分けることです。無名ブロックの場合、最良の方法はサブプログラムのグループとして再定義し、データベースに格納できるようにすることです。

データ型の制限の詳細は、第3章「PL/SQLのデータ型」を参照してください。コレクションの添字の制限については、「コレクション要素の参照」を参照してください。


戻る 次へ
Oracle
Copyright © 2005 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引