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(curhdl,stmt_str,DBMS_SQL.NATIVE);
-- 定数DBMS_SQL.NATIVEを使用しています
以下のコードは、パラメータが明示的に指定されているため、クライアント側で有効です:
DBMS_SQL.PARSE(curhdl,stmt_str,1);
-- クライアント側でコンパイルされます
例外状況
コンパイル警告を伴うDBMS_SQLを使用して型、プログラム、関数、またはパッケージを作成すると、エラーが発生しますが、PLユニットは作成されます。