DBMS_SQL システムパッケージは、動的ステートメントを実行するためのメカニズムを提供し、システムコマンド(例:ALTER SESSION)、DDL、DML(SELECT を含む)など、さまざまなステートメントをサポートしています。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
使用上の注意点は以下のとおりです:
パラメータを指定できるのはDMLステートメントのみです。
DMLステートメントのうち、結果セットを返すステートメントのみ取得できます。
DMLステートメントは
dbms_sql.executeなどのインターフェースで実行され、その他のステートメントはdbms_sql.parseインターフェースで実行されます。DBMS_SQLが作成するカーソルは現在のセッションでのみ利用可能で、他のセッションからはアクセスできません。
DBMS_SQL権限の説明
DBMS_SQL は SYS ユーザーが所有し、AUTHID CURRENT_USER でコンパイルされたシステムパッケージです。匿名PLブロックから呼び出される任意の DBMS_SQL サブプログラムは、現在ユーザーの権限で実行されます。
DBMS_SQL定数
次の表は、DBMS_SQL の PARSE ストアドプロシージャの language_flag パラメータで使用される定数です。
名前 |
型 |
値 |
説明 |
|---|---|---|---|
| NATIVE | INTEGER | 1 | プログラムが正常にデータベースに接続されていることを示します |
使用方法
以下の使用方法では、クエリ、更新、挿入、削除の処理方法について説明します。
動的SQLを使用してクエリを処理する場合は、以下の手順を実行する必要があります:
DEFINE_COLUMNサブプログラムを呼び出して、SELECTステートメントが返す値の変数を指定します。EXECUTE関数を呼び出してSELECTステートメントを実行します。FETCH_ROWS関数を呼び出して、クエリに一致する行を取得します。COLUMN_VALUEサブルーチンを呼び出して、FETCH_ROWS関数が返すクエリで取得した列の値を特定します。
動的SQLを使用して INSERT、UPDATE、または DELETE を処理する場合は、EXECUTE 関数を呼び出して INSERT、UPDATE、または DELETE ステートメントを実行する必要があります。
DBMS_SQL の実行プロセス
DBMS_SQL の実行プロセスは以下のとおりです:
OPEN_CURSORPARSEBIND_VARIABLEDEFINE_COLUMN、DEFINE_COLUMN_LONGまたはDEFINE_ARRAYEXECUTEFETCH_ROWSまたはEXECUTE_AND FETCHCOLUMN_VALUECLOSE_CURSOR
DBMS_SQL サブルーチンの概要
次の表は、OceanBaseデータベースの現在のバージョンでサポートされている DBMS_SQL サブルーチンとその簡単な説明を示しています。
サブルーチン |
説明 |
|---|---|
| BIND_VARIABLE | 指定した値を指定した変数にバインドします。 |
| COLUMN_VALUE | カーソル内で指定された要素の値を返します。 |
| CLOSE_CURSOR | 指定されたカーソルを閉じ、メモリを解放します。 |
| DEFINE_COLUMN | 指定されたカーソルで選択する列を定義します。SELECT ステートメントでのみ使用されます。 |
| DEFINE_ARRAY | 指定されたカーソルから選択するコレクションを定義します。SELECT ステートメントでのみ使用されます。 |
| DESCRIBE_COLUMNS | カーソルのすべてのフィールド名、型などのプロパティを取得します。 |
| EXECUTE | 指定されたカーソルを実行します。 |
| EXECUTE_AND FETCH | 指定されたカーソルを実行し、行を取得します。 |
| FETCH_ROWS | 指定されたカーソルから特定の行データを取得します。 |
| IS_OPEN | 指定されたカーソルの状態が OPEN の場合、TRUE を返します。 |
| LAST_ERROR_POSITION | 最後に DBMS_SQL.PARSE を呼び出した際の構文エラーの位置を取得します。 |
| OPEN_CURSOR | 新しいカーソルのIDを返します。 |
| PARSE | 指定されたステートメントを解析します。 |
| VARIABLE_VALUE | 動的SQLステートメントを実行した後、出力変数の値を取得するために使用されます。 |