PARSE ストアドプロシージャは、DMLステートメント(SELECT を含む)の解析、または DDL、システムコマンドなどその他のステートメントの実行に使用されます。
PARSE サブプログラムには、以下のようなバージョンがあります:
VARCHAR2型のパラメータをサポートします。VARCHAR2AおよびVARCHAR2S型のパラメータをサポートします。配列内のセグメント化された文字列を例にとると、PARSEストアドプロシージャはこの配列内の文字列を連結して1つの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ユニットは作成されます。