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ステートメントの実行後、出力変数の値を取得するために使用されます。 |