ワークスペースでは、視覚的な方法で関数を作成できます。この記事では、SQLウィンドウを使用して関数を作成する方法について説明します。
背景
関数とは、データベース内で定義されたサブプログラムであり、組み込みSQLステートメントから呼び出すことができます。標準の関数では業務要件を満たせない場合は、SQLウィンドウで新しい関数を作成し、カスタム関数を追加することで、特定の機能計算や様々な操作を実現できます。また、カスタム関数により重複コーディングを減らし、プログラムの可読性を向上させることができます。
関数はストアドプロシージャと非常によく似た手続き型のデータベースオブジェクトです。ストアドプロシージャと同様に、SQLステートメントと手続き型ステートメントで構成されるコード断片であり、アプリケーションや他のSQLステートメントから呼び出すことができます。
カスタム関数とストアドプロシージャの違い:
関数は必ず1つの戻り値を持ち、データを処理して結果を返す用途に適しています。ストアドプロシージャは0個以上の戻り値を持つことができ、一括挿入や一括更新などに適しています。
関数は
SELECTステートメントで直接呼び出せますが、ストアドプロシージャの呼び出しにはCALLステートメントを使用する必要があります。

上図のように、関数の作成には以下の6つのステップが含まれます:
関数名を入力します。
関数の戻り値のデータ型を選択します。
パラメータを追加します。
新規関数の情報を確定します。
関数の情報を編集します。
新規関数の作成を完了します。
本記事では、SQLウィンドウで従業員関数 (function_emp) を作成する例を説明します。この関数 function_emp には id INT 型のパラメータが含まれており、id に基づいて従業員名を取得します。
説明
本文中で使用されているデータはすべて例です。実際の状況に応じてデータを置き換えてください。
前提条件
現在のテナントのデータベースアカウントとパスワードを持っていて、SQLコンソールにログインできること。
操作手順
ステップ1:関数名を入力する
OB Cloudコンソールにログインし、ワークスペースに移動した後、SQLウィンドウの左側にあるデータベースリストで、**関数**タブをクリックすると関数リストが表示されます。関数リストの右上隅にある+をクリックして、必要なオブジェクトを作成します。

ステップ2:関数の戻り値のデータ型を選択する
具体的なデータ型については、OceanBaseデータベースのリファレンスガイドをご参照ください。
ステップ3:パラメータを追加する
パラメータとは、関数を呼び出す際に渡す情報です。パラメータ情報を指定する必要があります:
Oracleモード:パラメータの**名前、モード、タイプ、およびデフォルト値**を指定する必要があります。
MySQLモード:パラメータの**名前、タイプ、および長さ**を指定する必要があります。
関数の追加には、以下の3つの機能操作が提供されています:
機能説明ポップアップガイド補助メニュー ポップアップガイド補助メニューを使用すると、パラメータの追加、削除、上下の移動ができます。 表番号をクリック - 表番号をクリックして行全体を選択すると、補助メニュー(削除、上/下移動)が表示されます。
- 表番号をクリックして選択すると、パラメータ行全体をドラッグして順序を調整できます。
マウス右クリック操作 右クリックして行全体を選択し、行のコピー / 下へ1行移動を行います。 説明
行をコピーした後、任意の行を選択し、ショートカットキーCommand + V / Ctrl + Vで貼り付けることができます。
**パラメータで指定する必要があるモード**は、パラメータのタイプを指します。
MySQLモードではパラメータモードの設定はサポートされていませんが、OracleモードではIN(入力)、OUT(出力)、INOUT(入出力)の3種類のパラメータモードをサポートしています:
パラメータタイプIN 入力パラメータ。関数を呼び出す際に、パラメータの値を関数に渡して実行時に使用します。 OUT 出力パラメータ。関数を呼び出す際、関数は出力パラメータ自体の値を無視してNULL値を渡します。関数体内で出力パラメータを変更し、その変更結果を出力パラメータが表す実引数に返すことができます。 INOUT 入出力パラメータ。入力パラメータと出力パラメータの両方の機能を備えています。 説明
Oracleモードでは、関数とストアドプロシージャはIN/OUT/INOUTパラメータを含みます。MySQLモードではINパラメータのみを含みますが、ストアドプロシージャはIN/OUT/INOUTパラメータを含みます。
ステップ4:新規関数の作成を確定する
OK をクリックし、SQL作成確認ページに進みます。
ステップ5:関数情報の編集

SQL作成確認ページで、関数ステートメントを編集します。
ユーザーはSQL作成確認ページで作成する関数ステートメントを編集できます。構文は以下のとおりです:
CREATE FUNCTION function_name ([var_name var_type[,...]])
RETURNS return_type
delarification_block
BEGIN
function_body
EXCEPTION
exception_handler
END;
パラメータ説明:
パラメータ |
説明 |
|---|---|
| function_name | カスタム関数の名前を指定します。
注意カスタム関数はストアドプロシージャと同じ名前を持てません。 |
| var_name var_type | カスタム関数のパラメータを指定するために使用されます。このパラメータには名前と型のみ指定可能で、キーワードIN、OUT、INOUTは指定できません。 |
| RETURNS return_type | カスタム関数の戻り値のデータ型を宣言するために使用されます。ここで、return_type は戻り値のデータ型を指定するために使用されます。
注意RETURN VALUEステートメント内にSELECTステートメントを含む場合、SELECTステートメントの戻り結果は1行1列の値でなければなりません。 |
| function_body | カスタム関数の本体部分、すなわち関数体です。関数体には必ず RETURN ステートメントを含める必要があります。 関数体が複合構造の場合は、BEGIN...ENDステートメントを使用する必要があります。 |
例:
CREATE FUNCTION `function_emp` ( `id` int(20)) RETURNS VARCHAR(300)
-- 関数体開始
BEGIN
-- 変数宣言
DECLARE
a VARCHAR(300);
-- 変数代入
SELECT
name INTO a
FROM
employee
WHERE
emp_no = id;
-- 戻り値
RETURN a;
-- 関数体終了
END
ステップ6:新規関数の作成を完了する
作成 をクリックして関数を作成すると、システムの組み込み関数を呼び出すように、SELECT ステートメントを使用してユーザー定義の関数を呼び出せるようになります。
構文:
SELECT function_name ([function_parameter [,...]])
例:
SELECT function_emp(2);
MySQLモード

Oracleモード
注意
Oracleモードでは、OUTパラメータを含む場合は
CALL方法で呼び出す必要があります。関数リストに黄色いアイコンが表示されている場合は、現在有誤りまたは警告があることを示しています。
左側のナビゲーションペインで、関数リスト内の関数名を右クリックし、表示される管理操作リスト(表示、編集、実行、ダウンロード、削除、および 更新 を含む)を使用して、ターゲットオブジェクトを迅速に管理および操作できます。
操作キー |
説明 |
|---|---|
| 表示 | 関数管理 ページに移動し、現在の関数の基本情報、パラメータ、コードなどの情報をすべて確認します。 |
| 編集 | 関数管理 ページには、現在の関数を定義するステートメントが表示されます。ウィンドウ内でその関数を編集し続けることができます。
説明OceanBaseのMySQLモードは編集機能をサポートしていません。 |
| 実行 | 現在の関数を実行します。 |
| エクスポート | オブジェクトをエクスポートします。デフォルトでは現在のオブジェクトをエクスポートしますが、複数のオブジェクトを同時にエクスポートすることもサポートしています。詳細については、このマニュアルの 単一テーブルのエクスポートとインポート をご参照ください。 |
| ダウンロード | 関数オブジェクトのSQLファイルをダウンロードします。 |
| 削除 | 現在の関数を削除します。 |
| 更新 | 現在の関数オブジェクトに対して管理操作を行った後、構造ツリーを更新して最新の情報を表示します。 |