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