PARSE ステートメントは、DMLステートメント(SELECT を含む)を解析したり、DDLやシステムコマンドなどの他のステートメントを実行したりするために使用されます。
PARSE サブルーチンには、以下のようなバージョンがあります:
VARCHAR2型のパラメータをサポートします。VARCHAR2AおよびVARCHAR2S型のパラメータをサポートします。配列内のセグメント化された文字列を例にとると、PARSEステートメントはこの配列内の文字列を連結して一つのSQL文とし、それを解析します。適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2,
language_flag IN INTEGER);
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2A,
lb IN INTEGER,
ub IN INTEGER,
lfflg IN BOOLEAN,
language_flag IN INTEGER);
DBMS_SQL.PARSE(cursor_id IN INTEGER,
sql_stmt IN VARCHAR2s,
lb IN INTEGER,
ub IN INTEGER,
lfflg IN BOOLEAN,
language_flag IN INTEGER);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| cursor_id | このステートメントまたは配列を解析するためのカーソルID番号です。 |
| sql_stmt | 解析するSQLステートメントまたは配列です。 |
| lb | 配列インデックスの下限です。 |
| ub | 配列インデックスの上限です。 |
| lfflg | 値がTRUEの場合、各カスケード要素の後に改行文字を挿入します。 |
| language_flag | SQLステートメントの動作を指定します。 |
使用方法
DBMS_SQLを使用してDDLステートメントを動的に実行すると、プログラムが応答不能になる可能性があります。例えば、パッケージ内のサブルーチンへの呼び出しがパッケージのロックを引き起こし、実行がユーザー側に返されるまで続く場合があります。競合を引き起こすロック操作(例えば、最初のロックを解放する前にパッケージを削除しようとする場合)は、プログラムの実行を妨げます。
クライアントコードはリモートプログラムパッケージの変数や定数を参照できないため、定数の値を明示的に使用する必要があります。例えば、次のコードはクライアント上でコンパイルできません:
DBMS_SQL.PARSE(cur_hdl,stmt_str,DBMS_SQL.NATIVE);
--定数DBMS_SQL.NATIVEを使用
次のコードは、パラメータが明示的に指定されているため、クライアント上で有効です:
DBMS_SQL.PARSE(cur_hdl,stmt_str,1);
--クライアント上でコンパイル
異常時の対処
コンパイル警告を伴うDBMS_SQLを使用して型、プログラム、関数、またはパッケージを作成すると、エラーが発生しますが、PLユニットは依然として作成されます。