OceanBaseデータベースに組み込まれている関数は、SQLステートメント内で直接使用できます。各関数の引数に渡される値には期待されるデータ型があります。渡されたデータ型が期待されるものではない場合、OceanBaseデータベースはSQL関数を実際に実行する前に、引数として渡された値を期待されるデータ型に変換しようと試みます。
関数は演算子に似ており、いくつかのデータ要素を引数として入力し、結果を返します。しかし、関数は引数の形式において演算子とは大きく異なります。関数は含めることができる引数の数が不特定であり、1つから2つ、あるいはそれ以上の引数を持つことができます。
関数名(引数, 引数, ...)
関数は引数を全く持たない場合もあり、これは擬似列に似ています。ただし、擬似列は通常、結果セットの各行に対して異なる値を返しますが、変数を持たない関数は通常、各行に対して同じ値を返します。
注意
SQLステートメントで LOB 列に関数を使用する場合、OceanBaseデータベースはSQLおよびPL処理中に一時的な LOB 列を作成し、一定の制限があります。詳細については、Oracleとの互換性比較を参照してください。
本章では、関数を2つの大きなカテゴリに分類します。各カテゴリの関数の引数と最終的な戻り値には、それぞれ特定のデータ型があります:
単一行関数:数値関数、文字列を返す文字列関数、数値を返す文字列関数、日付時刻関数、汎用的な比較関数、変換関数、エンコード・デコード関数、NULL値関連関数、環境・識別関数、階層関数などが含まれます。
集計関数:集約関数と分析関数が含まれます。
単一行関数は、クエリ対象のテーブルまたはビューの各行に対して結果値を返します。これらの関数は、SQLステートメントの SELECT、WHERE、START WITH、CONNECT BY、HAVING 句などで使用できます。
分析関数と集約関数はどちらも、行セットグループ(行の集合)に対して集計計算を行います。違いは、集約関数は各グループごとに1つの値(1行)しか返せないのに対し、分析関数は各グループごとに複数の値(複数行)を返せる点です。行セットグループはウィンドウ(Window)とも呼ばれます。集約関数は通常、SELECT ステートメントの GROUP BY 句と共に使用されます。使用時、データベースはクエリ対象のテーブルまたはビューの行をいくつかのグループに分け、集約関数を各グループの行に適用し、各グループごとに1つの結果行を返します。
分析関数を使用する際は、特殊なキーワード OVER を使用してウィンドウを指定する必要があります。ウィンドウ関数の詳細については、分析関数の説明を参照してください。
算術演算関数
算術演算関数の引数と戻り値はいずれも数値型です。ほとんどの関数の戻り値のデータ型は NUMBER で、小数点以下38桁まで表現できます。一部の高等代数関連関数 COS()、COSH()、EXP()、LN()、LOG()、SIN()、SINH()、SQRT()、TAN()、TANH() の結果は小数点以下36桁まで、その他の代数関連関数 ACOS()、ASIN()、ATAN()、ATAN2() の結果は小数点以下30桁まで正確です。
関数名 |
機能の説明 |
|---|---|
| ABS | 指定された数値式の絶対値を返します |
| ACOS | 弧度で表された、コサインが指定された数値式である角度を返します |
| ASIN | 弧度で表された、サインが指定された数値式である角度を返します |
| ATAN | 弧度で表された、タンジェントが指定された数値式である角度を返します |
| ATAN2 | 弧度で表された、タンジェントが指定された2つの数値式の比である角度を返します |
| BITAND | 2つの数値に対してビット単位のAND演算を行います |
| CEIL | 指定された数値以上の最小の整数を返します |
| COS | 指定された角度のコサイン値を返します |
| COSH | 指定された角度の双曲コサイン値を返します |
| EXP | eの指定されたべき乗を返します |
| FLOOR | 指定された数値以下の最大の整数を返します |
| GENERATOR | 指定された範囲内の乱数を生成します |
| LN | 指定された数値の自然対数を返します |
| LOG | 指定された数値の対数を返します |
| MOD | 2つの数値を除算したときの剰余を返します |
| NANVL | 最初のパラメータがNaNの場合、2番目のパラメータを返します |
| NORMAL | 正規分布の乱数を生成します |
| POWER | 指定された数値の指定されたべき乗を返します |
| RANDOM | 0から1の間の乱数を生成します |
| RANDSTR | 指定された長さのランダム文字列を生成します |
| REMAINDER | 2つの数値を除算したときの剰余を返します |
| ROUND | 数値を指定された小数点以下の桁数に四捨五入します |
| SIGN | 数値の符号(-1、0、または1)を返します |
| SIN | 指定された角度のサイン値を返します |
| SINH | 指定された角度の双曲サイン値を返します |
| SQRT | 指定された数値の平方根を返します |
| TAN | 指定された角度のタンジェント値を返します |
| TANH | 指定された角度の双曲タンジェント値を返します |
| TRUNC | 数値を指定された小数点以下の桁数で切り捨てます |
| UNIFORM | 指定された範囲内の一様分布の乱数を生成します |
| WIDTH_BUCKET | 数値を指定された数のバケットに割り当てます |
| ZIPF | ジップフ分布の乱数を生成します |
文字列を返す文字列関数
関数の戻り値の最大長はデータ型の影響を受けます。例えば、関数の戻り値のデータ型が VARCHAR2 であるにもかかわらず、実際のサイズが VARCHAR2 データ型の上限を超えた場合、OceanBaseデータベースは結果を切り捨てて返しますが、クライアント側では警告は表示されません。
注意
戻り値のデータ型が CLOB の場合、戻り値の長さが上限を超えたとき、OceanBaseデータベースはデータを返さず、エラーメッセージを表示します。
関数名 |
機能の説明 |
|---|---|
| CHR | ASCII値を文字に変換します |
| CONCAT | 2つの文字列を結合します |
| INITCAP | 文字列内の各単語の最初の文字を大文字に変換します |
| LOWER | 文字列を小文字に変換します |
| LPAD | 文字列の左側に指定された文字を埋めます |
| LTRIM | 文字列の左側の空白または指定された文字を削除します |
| NLS_LOWER | 指定された言語環境を使用して文字列を小文字に変換します |
| NLS_UPPER | 指定された言語環境を使用して文字列を大文字に変換します |
| NLSSORT | 文字列のソートキーを返します |
| REGEXP_REPLACE | 正規表現を使用して文字列を置き換えます |
| REGEXP_SUBSTR | 正規表現を使用して部分文字列を抽出します |
| REPLACE | 文字列内の部分文字列を置き換えます |
| RPAD | 文字列の右側に指定された文字を埋めます |
| RTRIM | 文字列の右側の空白または指定された文字を削除します |
| SUBSTR | 文字列から部分文字列を抽出します |
| TRIM | 文字列の両端の空白または指定された文字を削除します |
| TRANSLATE | 文字列内の文字を他の文字に置き換えます |
| UPPER | 文字列を大文字に変換します |
数字を返す文字列関数
数字を返す文字列関数は、指定された条件に基づいて数字を返します。例えば、ASCIIコード値や文字(文字列)の位置などです。
関数名 |
機能の説明 |
|---|---|
| ASCII | 文字列の最初の文字のASCII値を返します |
| INSTR | 部分文字列が文字列内でどこにあるかを返します |
| LENGTH | 文字列の長さを返します |
| REGEXP_COUNT | 文字列内で正規表現がマッチする回数を返します |
| REGEXP_INSTR | 正規表現がマッチする位置を返します |
日付時刻関数
日付時刻関数でサポートされている入力パラメータのデータ型は、日付時刻(DATE)、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE)、および間隔(INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH)の3種類です。
DATE データ型のみを入力パラメータとしてサポートする関数には、ADD_MONTHS、CURRENT_DATE, LAST_DAY、NEXT_DAY が含まれます。
上記の関数に TIMESTAMP 型のデータを渡そうとした場合、OceanBaseデータベースは内部で暗黙的なデータ型変換を行った後、関数に渡して演算を実行し、DATE 型の戻り値を返します。
日付時刻関数を使用する前に、SELECT * FROM NLS_DATABASE_PARAMETERS を実行して現在のNLSフォーマットを確認することをお勧めします。例は以下のとおりです:
obclient> SELECT * FROM NLS_DATABASE_PARAMETERS;
+-------------------------+------------------------------+
| PARAMETER | VALUE |
+-------------------------+------------------------------+
| NLS_DATE_FORMAT | DD-MON-RR |
| NLS_TIMESTAMP_FORMAT | YYYY-MM-DD HH24:MI:SS |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
| NLS_TERRITORY | AMERICA |
| NLS_SORT | BINARY |
| NLS_COMP | BINARY |
| NLS_CHARACTERSET | AL32UTF8 |
| NLS_NCHAR_CHARACTERSET | AL16UTF16 |
| NLS_DATE_LANGUAGE | AMERICAN |
| NLS_LENGTH_SEMANTICS | BYTE |
| NLS_NCHAR_CONV_EXCP | FALSE |
| NLS_CALENDAR | GREGORIAN |
| NLS_NUMERIC_CHARACTERS | ., |
+-------------------------+------------------------------+
13 rows in set
本文中の例と表示形式が一致しない場合は、以下のコマンドを実行してフォーマットを変更できます:
obclient>ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Query OK, 0 rows affected
obclient>ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
Query OK, 0 rows affected
/*戻り値の秒の小数部を9桁に設定する*/
obclient> ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZR TZD';
Query OK, 0 rows affected
注意
MONTHS_BETWEENの戻り値は1つの数値です。ROUNDとTRUNCは暗黙的な型変換ができません。DATE型の値を渡す必要があります。そうでない場合、エラーが発生します。
残りの関数は、3種類のパラメータデータ型をサポートしており、戻り値と入力パラメータは同じデータ型です。
関数名 |
機能の説明 |
|---|---|
| ADD_MONTHS | 日付に指定された月数を加算します |
| CURRENT_DATE | 現在の日付を返します |
| CURRENT_TIMESTAMP | 現在の日付と時刻を返します |
| DBTIMEZONE | データベースのタイムゾーンを返します |
| EXTRACT | 日付時刻から指定された部分を抽出します |
| FROM_TZ | タイムスタンプとタイムゾーンをタイムゾーン付きのタイムスタンプに変換します |
| LAST_DAY | 指定された日付が含まれる月の最終日を返します |
| LOCALTIMESTAMP | 現在のローカルタイムスタンプを返します |
| MONTHS_BETWEEN | 2つの日付の間の月数の差を返します |
| NEXT_DAY | 指定された日付の翌日の、次の指定された曜日の日付を返します |
| NUMTODSINTERVAL | 数値を日から秒の間隔に変換します |
| NUMTOYMINTERVAL | 数値を年から月の間隔に変換します |
| ROUND | 日付を指定された形式に四捨五入します |
| SESSIONTIMEZONE | 現在のセッションのタイムゾーンを返します |
| SYSDATE | 現在のシステム日付と時刻を返します |
| SYSTIMESTAMP | 現在のシステムタイムスタンプを返します |
| SYS_EXTRACT_UTC | タイムゾーン付きのタイムスタンプからUTC時間を抽出します |
| TO_CHAR | 日付時刻を文字列に変換します |
| TO_DSINTERVAL | 文字列を日から秒の間隔に変換します |
| TO_TIMESTAMP | 文字列をタイムスタンプに変換します |
| TO_TIMESTAMP_TZ | 文字列をタイムゾーン付きのタイムスタンプに変換します |
| TO_YMINTERVAL | 文字列を年から月の間隔に変換します |
| TRUNC | 日付を指定された形式に切り捨てます |
| TZ_OFFSET | 指定されたタイムゾーンのオフセットを返します |
比較関数
このカテゴリの関数を使用すると、集合内の最大値と最小値を迅速に見つけることができます。
関数名 |
機能の説明 |
|---|---|
| GREATEST | パラメータリスト内の最大値を返します。 |
| LEAST | パラメータリスト内の最小値を返します。 |
変換関数
このタイプの関数を使用して、元のデータ型を別のデータ型に変換できます。
関数名 |
機能の説明 |
|---|---|
| ASCIISTR | 文字列をASCII文字列に変換します |
| CAST | 式を指定されたデータ型に変換します |
| CHARTOROWID | 文字列をROWIDに変換します |
| CONVERT | 文字列をある文字セットから別の文字セットに変換します |
| HEXTORAW | 16進数文字列をRAWデータに変換します |
| RAWTOHEX | RAWデータを16進数文字列に変換します |
| ROWIDTOCHAR | ROWIDを文字列に変換します |
| ROWIDTONCHAR | ROWIDをNCHAR文字列に変換します |
| SCN_TO_TIMESTAMP | SCNをタイムスタンプに変換します |
| TIMESTAMP_TO_SCN | タイムスタンプをSCNに変換します |
| TO_BINARY_DOUBLE | 式をBINARY_DOUBLEに変換します |
| TO_BINARY_FLOAT | 式をBINARY_FLOATに変換します |
| TO_BLOB | 式をBLOBに変換します |
| TO_CHAR | 式を文字列に変換します |
| TO_CLOB | 式をCLOBに変換します |
| TO_DATE | 文字列を日付に変換します |
| TO_MULTI_BYTE | 単一字節文字を複数字節文字に変換します |
| TO_NCHAR | 式をNCHAR文字列に変換します |
| TO_NUMBER | 式を数値に変換します |
| TO_SINGLE_BYTE | 複数字節文字を単一字節文字に変換します |
| TO_YMINTERVAL | 文字列を年-月間隔に変換します |
| TO_DSINTERVAL | 文字列を日-秒間隔に変換します |
| TO_TIMESTAMP | 文字列をタイムスタンプに変換します |
| TO_TIMESTAMP_TZ | 文字列をタイムゾーン付きタイムスタンプに変換します |
| UNISTR | 文字列をUnicode文字列に変換します |
| NLS_CHARSET_ID | 文字セット名に対応する文字セットID番号を返すために使用されます |
エンコード/デコード関数
このタイプの関数を使用して、OceanBaseデータベースでデータのエンコードとデコードを実現できます。
関数名 |
機能の説明 |
|---|---|
| DECODE | CASEステートメントに似た条件式です |
| DUMP | 式の内部表現を返します |
| ORA_HASH | 式のハッシュ値を計算します |
| VSIZE | 式の内部表現のバイト数を返します |
NULL値関連関数
NULL値関連関数は、パラメータ内のNULL値を処理するために使用されます。ほとんどの関数では、入力パラメータがNULL値の場合、戻り値もNULL値になります。このような場合、NVL 関数を使用して、NULL以外の値を返すことができます。例えば、手数料を記録するテーブルの手数料列 commission_pct がNULL値の場合、式 NVL(commission_pct, 0) は0を返します。commission_pct の値がNULLではない場合、実際の手数料値を返します。
関数名 |
機能の説明 |
|---|---|
| COALESCE | 最初のNULLでない値を返す |
| LNNVL | 条件がNULLまたはFALSEかどうかをチェックする |
| NANVL | 最初のパラメータがNaNの場合、2番目のパラメータを返す |
| NULLIF | 2つのパラメータが等しい場合、NULLを返す |
| NVL | 最初のパラメータがNULLの場合、2番目のパラメータを返す |
| NVL2 | 最初のパラメータがNULLでない場合、2番目のパラメータを返す。そうでない場合、3番目のパラメータを返す |
環境関連関数
環境関連関数は、主にセッションまたはテナントインスタンスに関連する環境情報を提供します。
関数名 |
機能の説明 |
|---|---|
| OB_VERSION | OceanBaseデータベースのバージョンを返す |
| SYS_CONTEXT | 指定されたコンテキストのプロパティ値を返す |
| SYS_GUID | グローバル一意の識別子を生成する |
| UID | 現在のユーザーのユーザーIDを返す |
| USER | 現在のユーザー名を返す |
| USERENV | 現在のセッションの環境情報を返す |
階層関数
関数名 |
機能の説明 |
|---|---|
| SYS_CONNECT_BY_PATH | ルートからノードへの列値のパスを返す。CONNECT BY 条件で返される各行の列値は、指定された区切り文字で区切られる。 |
JSON関数
JSON関数は、JSON値の作成、操作、検索などを行います。
関数名 |
機能の説明 |
|---|---|
| JSON_ARRAY | JSON配列を作成する |
| JSON_ARRAYAGG | 複数の行をJSON配列に集約する |
| JSON_EQUAL | 2つのJSON値が等しいかどうかを比較する |
| JSON_EXISTS | JSONドキュメント内に指定されたパスが存在するかどうかをチェックする |
| JSON_MERGEPATCH | JSON Merge Patchを使用してドキュメントをマージする |
| JSON_OBJECT | JSONオブジェクトを作成する |
| JSON_OBJECTAGG | 複数の行をJSONオブジェクトに集約する |
| JSON_QUERY | JSONドキュメントから値を照会する |
| JSON_TABLE | JSONデータをテーブル形式に変換する |
| JSON_VALUE | JSONドキュメントからスカラー値を抽出する |
XML関数
XML関数は、XMLドキュメントの効率的なクエリ、更新、検索を実行できます。
関数名 |
機能の説明 |
|---|---|
| DELETEXML | XMLドキュメントからノードを削除する |
| EXISTSNODE | XMLドキュメント内に指定されたノードが存在するかどうかを確認します。 |
| EXTRACT | XMLドキュメントからノードを抽出します。 |
| EXTRACTVALUE | XMLドキュメントから値を抽出します。 |
| INSERTCHILDXML | XMLドキュメントに子ノードを挿入します。 |
| UPDATEXML | XMLドキュメント内のノードを更新します。 |
| XMLAGG | 複数のXML値を単一のXMLドキュメントに集約します。 |
| XMLATTRIBUTES | XML属性を作成します。 |
| XMLCAST | XML値を指定されたデータ型に変換します。 |
| XMLCONCAT | 複数のXML値を結合します。 |
| XMLELEMENT | XML要素を作成します。 |
| XMLFOREST | XMLフォレストを作成します。 |
| XMLPARSE | 文字列をXMLドキュメントとして解析します。 |
| XMLSEQUENCE | XMLドキュメントを行シーケンスに変換します。 |
| XMLSERIALIZE | XMLドキュメントを文字列にシリアライズします。 |
| XMLTABLE | XMLデータをテーブル形式に変換します。 |
TABLE FUNCTION
TABLE FUNCTION(テーブル関数)は、FROM 句で参照できる行セットの結果を返すために使用されます。
名前 |
機能の説明 |
|---|---|
| JSON_TABLE | JSONデータをテーブル形式に変換します。 |
| XMLTABLE | XMLデータをテーブル形式に変換します。 |
| FILES | 外部ファイルからデータを読み取り、テーブル構造を返します。 |
詳細については、TABLE FUNCTIONの概要を参照してください。
集計関数
集計関数は、一連の値に対して計算を実行し、単一の値を返します。集計関数はNULL値を無視します。集計関数は、SELECT ステートメントの GROUP BY 句と併用されることがよくあります。
関数名 |
機能の説明 |
|---|---|
| APPROX_COUNT_DISTINCT | 異なる値の近似数を返します。 |
| AVG | 数値の平均値を返します。 |
| CORR | 2つの数値列の相関係数を返します。 |
| COUNT | 行数またはNULLではない値の数を返します。 |
| COVAR_POP | 全体の共分散を返します。 |
| COVAR_SAMP | サンプルの共分散を返します。 |
| CUME_DIST | 累積分布値を返します。 |
| DENSE_RANK | 密着ランキングを返します。 |
| GROUP_ID | グループIDを返します。 |
| GROUPING | GROUP BY句のグループ情報を返します。 |
| GROUPING_ID | グループIDのビットベクトルを返します。 |
| KEEP | グループ内で指定条件を満たす値を保持します。 |
| LISTAGG | 複数の値を1つの文字列に結合します。 |
| MAX | 最大値を返します。 |
| MEDIAN | 中央値を返します。 |
| MIN | 最小値を返します。 |
| PERCENTILE_CONT | 連続パーセンタイル値を返します |
| PERCENTILE_DISC | 疎パーセンタイル値を返します |
| PERCENT_RANK | パーセンタイル順位を返します |
| RANK | 順位を返します |
| REGR_ | 線形回帰関数族 |
| ROLLUP | グループ集計を作成します |
| STDDEV | 標準偏差を返します |
| STDDEV_POP | 全体標準偏差を返します |
| STDDEV_SAMP | 標本標準偏差を返します |
| SUM | 数値の合計を返します |
| VAR_POP | 全体分散を返します |
| VAR_SAMP | 標本分散を返します |
| VARIANCE | 分散を返します |
| WMSYS.WM_CONCAT/WM_CONCAT | 複数行の値を1つの文字列に結合します |
分析関数
分析関数(一部のデータベースではウィンドウ関数とも呼ばれる)は、集約関数に似ており、常に一連の行の集合に基づいて計算を行います。違いは、集約関数が1つのグループから1行しか返せないのに対し、分析関数は各グループから複数行を返すことができ、グループ内の各行はウィンドウの論理計算の結果です。分析関数は、Self-Joinを必要とするクエリを大幅に最適化できます。
関数名 |
機能の説明 |
|---|---|
| ARG_MAX | 最大値を返すパラメータ |
| ARG_MIN | 最小値を返すパラメータ |
| AVG | 数値の平均値を返す |
| CORR | 2つの数値列の相関係数を返す |
| COUNT | 行数またはNULL以外の値の数を返す |
| COVAR_POP | 全体の共分散を返す |
| COVAR_SAMP | サンプルの共分散を返す |
| CUME_DIST | 累積分布値を返す |
| DENSE_RANK | 密着ランキングを返す |
| FIRST_VALUE | ウィンドウ内の最初の値を返す |
| KEEP | グループ内で指定条件の値を保持する |
| LAG | 前の行または前N行の値を返す |
| LAST_VALUE | ウィンドウ内の最後の値を返す |
| LEAD | 次の行または次N行の値を返す |
| LISTAGG | 複数の行値を1つの文字列に結合する |
| MAX | 最大値を返す |
| MEDIAN | 中央値を返す |
| MIN | 最小値を返す |
| NTH_VALUE | ウィンドウ内のN番目の値を返す |
| NTILE | 結果セットを指定された数のグループに分割する |
| PERCENTILE_CONT | 線形パーセンタイル値を返す |
| PERCENTILE_DISC | 離散パーセンタイル値を返す |
| PERCENT_RANK | パーセンタイルランキングを返す |
| RANK | ランキングを返す |
| RATIO_TO_REPORT | グループ内の値の割合を返す |
| REGR_ | 線形回帰関数ファミリー |
| ROW_NUMBER | 行番号を返す |
| STDDEV | 標準偏差を返す |
| STDDEV_POP | 全体の標準偏差を返す |
| STDDEV_SAMP | サンプルの標準偏差を返す |
| SUM | 数値の合計を返す |
| VAR_POP | 全体の分散を返す |
| VAR_SAMP | サンプルの分散を返す |
| VARIANCE | 分散を返す |
| WMSYS.WM_CONCAT/WM_CONCAT | 複数の行値を1つの文字列に結合する |
情報関数
関数名 |
機能の説明 |
|---|---|
| OB_TRANSACTION_ID | 現在のトランザクションIDを返す |
空間関数
関数名 |
機能の説明 |
|---|---|
| SDO_GEOMETRY | 空間幾何オブジェクトを作成します |
| クエリ計算関数 | 空間幾何オブジェクトの属性を照会および計算します |
監査関数
関数名 |
機能の説明 |
|---|---|
| AUDIT_LOG_ENCRYPTION_PASSWORD_SET | 現在の監査ログをアーカイブし、新しい暗号化キーを生成します |
| AUDIT_LOG_ENCRYPTION_PASSWORD_GET | 対応するアーカイブログファイルの暗号化パスワードを取得します |