OceanBase Developer Center(ODC)では、視覚的にストアドプロシージャを作成できます。本記事では、ODCを使用してストアドプロシージャを作成する方法について説明します。
概要
ストアドプロシージャは、1つまたは複数のステートメントの集合であり、データベースに対して一連の複雑な操作を行う際に、そのような操作をデータベース内でコードブロックとしてカプセル化し、再利用することで、データベース開発者の作業負担を軽減します。
ストアドプロシージャは、特定の機能を実現するSQLステートメントの集合であり、コンパイルされてデータベースに保存されます。ユーザーはストアドプロシージャ名と必要なパラメータを指定することで呼び出し実行でき、ストアドプロシージャを利用することでSQLステートメントの実行を高速化できます。
新規ストアドプロシージャとは、ユーザーが作成し、特定の機能を実現できるストアドプロシージャのことです。ストアドプロシージャにはパラメータと戻り値を含めることができます。
ストアドプロシージャと関数の違い
関数の戻り値は具体的な結果値を示しますが、ストアドプロシージャの戻り値は実行が成功したかどうかのみを示します。
関数は
SELECTステートメントで直接呼び出せますが、ストアドプロシージャの呼び出しにはCALLステートメントを使用する必要があります。
ストアドプロシージャの役割
アプリケーションの汎用性と移植性の向上:新規ストアドプロシージャを作成後、プログラム内で何度も呼び出すことができます。ストアドプロシージャのSQLステートメントを書き直す必要はなく、ストアドプロシージャを変更してもプログラムのソースコードに影響がないため、プログラムの移植性が向上します。
SQL実行速度の向上:ストアドプロシージャはコンパイル済みであるため、ある操作に大量のSQLコードが含まれる場合や、複数回に分けて実行される場合、ストアドプロシージャを使用する方が、単一のSQLステートメントを直接使用するよりも実行速度が速くなります。
サーバー負荷の軽減:データベースオブジェクトを操作する際、単一のステートメントを呼び出す方法を使用すると、ネットワーク上で大量のSQLステートメントを転送する必要があります。ストアドプロシージャを使用すると、プロシージャの呼び出しコマンドを直接送信できるため、ネットワーク負荷を軽減できます。
上図のように、ストアドプロシージャの作成には以下の5つのステップが含まれます:
ストアドプロシージャ名を入力します。
パラメータを追加します。
新規ストアドプロシージャ情報を確定します。
ストアドプロシージャ情報を編集します。
新規ストアドプロシージャの作成を完了します。
このドキュメントでは、ODCで部門予算ストアドプロシージャproc_totalを作成する例を説明します。ストアドプロシージャproc_totalには、budget_rとbudget_sの2つのINT型の入力パラメータが含まれ、2つのパラメータの合計を計算します。
説明
本文中で使用されているデータはすべてサンプルデータです。実際の状況に応じてデータを置き換えることができます。
操作手順
ステップ1:ストアドプロシージャ名の指定
OceanBase Developer Center(ODC)で接続名をクリックして接続に入った後、左側のナビゲーションペインで ストアドプロシージャ タブをクリックすると、ストアドプロシージャのリストが表示されます。ストアドプロシージャのリストの右上で、+ をクリックしてストアドプロシージャを作成するか、上部のナビゲーションバーで 新規作成 > ストアドプロシージャ をクリックして、必要なオブジェクトを作成します。
ストアドプロシージャの作成 で、ストアドプロシージャ名を入力します。
ステップ2:パラメータの追加
パラメータとは、関数を呼び出す際に渡す情報です。パラメータ情報を指定する必要があります:
OceanBase Oracleモード:パラメータの 名前、モード、タイプ、および デフォルト値 を使用します。 を指定する必要があります。
OceanBase MySQLモード:パラメータの 名前、モード、タイプ、および 長さ を指定する必要があります。
関数の追加には、以下の3つの操作機能が提供されています:
機能説明ポップアップガイド補助メニュー ポップアップガイド補助メニューを使用すると、パラメータの追加、削除、上下移動ができます。 表番号をクリック - 表番号をクリックして行全体を選択すると、補助メニュー(削除、上/下移動)が表示されます。
- 表番号をクリックして選択すると、パラメータ行全体をドラッグして順序を調整できます。
マウス右クリック操作 マウスを右クリックして行全体を選択し、行のコピー / 1行下への移動を行います。 説明
行をコピーした後、任意の行を選択し、ショートカットキーCommand + V / Ctrl + Vを使用して貼り付けることができます。
パラメータ で指定する必要がある モード は、パラメータタイプを指します。
OceanBase MySQLモードではパラメータモードの設定はサポートされていませんが、Oracleモードでは IN (入力)、OUT (出力)、INOUT (入出力) の3種類のパラメータモードをサポートしています:
CREATE PROCEDURE proc_name ([[IN |OUT |INOUT ] parameter_name parameter_type...])パラメータの説明
パラメータタイプIN 入力パラメータ。
ストアドプロシージャを呼び出す際に、パラメータの値をストアドプロシージャに渡して実行時に使用します。INタイプのパラメータは通常、渡すためだけに使用され、ストアドプロシージャ内での変更や返却は一般的ではありません。OUT 出力パラメータ。
ストアドプロシージャを呼び出す際、ストアドプロシージャは出力パラメータ自体の値を無視し、空値を渡します。実行終了後、出力パラメータにはストアドプロシージャが変更した値が代入されます。通常、出力パラメータを使用してストアドプロシージャの実行結果データを取得します。OUTタイプのパラメータは、ストアドプロシージャ内での変更や値の返却に使用できます。INOUT 入出力パラメータ。
入力パラメータと出力パラメータの両方の機能を備えています。パラメータの設定
プロパティ必須デフォルトモード名前 はい 空 OceanBase Oracle/OceanBase MySQL モード 必須 IN OceanBase Oracle/OceanBase MySQL 型 必須 VARCHAR OceanBase Oracle/OceanBase MySQL 長さ 必須 45 OceanBase MySQL デフォルト値 任意 空 Oracle
ステップ3:新規ストアドプロシージャを確定する
OK をクリックし、SQL作成確認ページに進みます。
ステップ4:ストアドプロシージャを編集する
SQL作成確認ページで、ストアドプロシージャのステートメントを編集します。
ユーザーはSQL作成確認ページで、作成するストアドプロシージャのステートメントを編集できます。構文は以下のとおりです:
CREATE PROCEDURE proc_name (
[proc_parameter[,...]])
BEGIN
proc_body:
Valid SQL routine statement
END [end_label]
パラメータの説明:
パラメータ |
説明 |
|---|---|
| proc_name | ストアドプロシージャの名前。デフォルトでは現在のデータベースに作成されます。特定のデータベースにストアドプロシージャを作成する場合は、名前の前にデータベース名を付ける必要があります。例:db_name.sp_name。
注意名前は、OceanBase MySQLの組み込み関数と同じものを避けてください。同じ場合、エラーが発生する可能性があります。 |
| [proc_parameter[,…] ] | ストアドプロシージャのパラメータリスト。[IN|OUT|INOUT] parameter_name parameter_type の形式で記述します。ここで、 parameter_name はパラメータ名、parameter_type はパラメータの型(有効なOceanBase MySQLのデータ型であれば何でも可)です。複数のパラメータがある場合、パラメータリスト内ではカンマで区切ります。ストアドプロシージャはパラメータなしでも構いません(この場合もストアドプロシージャ名の後には一対の括弧を付ける必要があります)、1つ以上のパラメータを持つこともできます。
注意パラメータ名はデータテーブルの列名と同じにしないでください。同じ場合、ストアドプロシージャのSQLステートメントがパラメータ名を列名と誤解し、エラーが発生する可能性があります。 |
| proc_body | ストアドプロシージャの本体部分。プロシージャ呼び出し時に実行されるSQLステートメントが含まれます。 この部分は BEGIN で始まり、END で終わります。ストアドプロシージャ本体にSQLステートメントが1つしかない場合、BEGIN-ENDの記号を省略できます。 |
ステップ5:新規ストアドプロシージャの作成を完了する
作成 をクリックして新規ストアドプロシージャの作成を完了すると、システムの組み込み関数を呼び出すように、CALL ステートメントを使用してユーザー定義のストアドプロシージャを呼び出すことができます。
説明
左側のナビゲーションペインで、ストアドプロシージャリスト内のストアドプロシージャ名を右クリックすると、表示される管理操作リスト(表示、新規作成、編集、実行、ダウンロード、削除、更新 など)から、ターゲットオブジェクトをすばやく管理・操作できます。
構文:
CALL proc_name ([proc_parameter [,...]]);
例:
CALL proc_total (30000, 20000);