パッケージ org.opengion.fukurou.db
クラス Functions
java.lang.Object
org.opengion.fukurou.db.Functions
JavaDB(derby) や、hsqldb に対する、Javaの拡張組込み関数です。
staticメソッドとして、関数を定義します。引数や返り値は、各データベースの
定義に準拠します。
① JavaDB の場合 【概要】 実行するデータベースから見えるところに、ファイルを配置する必要があります。 java8 までなら、Javaのエクステンション(JAVA_HOME\)jre\lib\ext などですが、 java9以降は、CLASSPATH に設定します。 openGionでは、bin/const.bat で、OG_CLASSPATH 環境変数にパスを通して、 使用しています。 標準の Java staticメソッドを FUNCTION 定義することも出来ます。 【設定】 JavaDBに FUNCTION を定義します。(サンプル) DROP FUNCTION TO_CHAR; CREATE FUNCTION TO_CHAR ( VAL DOUBLE ) RETURNS VARCHAR(20) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.toChar' ; ② HSQLDB の場合 【概要】
- 変更履歴:
- 6.8.5.1 (2018/01/15) org.opengion.javadb → org.opengion.fukurou.db にパッケージ変更
- 機能分類
- 拡張組込み関数
- 導入されたバージョン:
- JDK8.0,
-
メソッドの概要
修飾子とタイプメソッド説明static String
checkDelay
(String date1, String date2, double sec1, double sec2, double sec3) 日時文字列(yyyyMMddHHmmss)の引数1,2に対して、差分の範囲判定を行います。static String
文字列を連結します。static int
部分文字列の出現位置を検索します。static String
特殊な文字列の連結を行います。static String
連結文字列を指定した、文字列の連結を行います。static int
length関数のバイト数版 過去に、hsqldb 用に作成したJava関数です。static String
NULL文字列の判定変換を行います。static String
対象の文字列の部分文字列を置換します。static String
substr関数のバイト数版 過去に、hsqldb 用に作成したJava関数です。static String
toChar
(double val) 数値を文字列に変換します。
-
メソッドの詳細
-
toChar
数値を文字列に変換します。 この関数は、引数の double が、小数点を含まない場合は、 小数点以下を出しません。 JavaDBの場合、数字と文字列の連結が出来ないため、文字列変換関数を用意します。 DROP FUNCTION TO_CHAR; CREATE FUNCTION TO_CHAR ( VAL DOUBLE ) RETURNS VARCHAR(20) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.toChar' ;- パラメータ:
val
- 文字列に変換すべき数値- 戻り値:
- 変換した文字列
- 変更履歴:
- 6.7.3.0 (2017/01/27) 新規作成, 6.8.5.1 (2018/01/15) org.opengion.javadb → org.opengion.fukurou.db にパッケージ変更, 6.9.8.0 (2018/05/28) FindBugs:浮動小数点の等価性のためのテスト
-
join2
特殊な文字列の連結を行います。 これは、第1引数の数字と、第2、第3、第4の文字列をスペースで連結した文字列を返します。 引数の個数が、可変に出来ないため、完全に決め打ちです。 DROP FUNCTION JOIN2; CREATE FUNCTION JOIN2 ( INTEGER , VARCHAR(2000) , VARCHAR(2000) , VARCHAR(2000) ) RETURNS VARCHAR(4000) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.join2' ;- パラメータ:
no
- 第1引数の数字arg2
- 第2引数arg3
- 第3引数arg4
- 第4引数- 戻り値:
- 連結したした文字列
- 変更履歴:
- 6.7.3.0 (2017/01/27) 新規作成, 6.8.5.1 (2018/01/15) org.opengion.javadb → org.opengion.fukurou.db にパッケージ変更
-
join3
連結文字列を指定した、文字列の連結を行います。 これは、第1引数の連結文字列を使用して、第2、第3、第4の文字列を連結します。 引数の個数が、可変に出来ないため、第2、第3、第4の文字列が、null か、ゼロ文字列の 場合は、連結せずにパスします。 DROP FUNCTION JOIN3; CREATE FUNCTION JOIN3 ( VARCHAR(10) , VARCHAR(2000) , VARCHAR(2000) , VARCHAR(2000) ) RETURNS VARCHAR(4000) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.join3' ;- パラメータ:
sep
- 連結時の文字列arg2
- 第2引数arg3
- 第3引数arg4
- 第4引数- 戻り値:
- 連結したした文字列
- 変更履歴:
- 8.0.2.0 (2021/11/30) 新規作成
-
replace
対象の文字列の部分文字列を置換します。 ただし、source、target、replacement のどれかが、null(ゼロ文字列)の場合は、 処理を実行せず、source をそのまま返します。 DROP FUNCTION REPLACE; CREATE FUNCTION REPLACE ( VARCHAR(2000) , VARCHAR(2000) , VARCHAR(2000) ) RETURNS VARCHAR(4000) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.replace' ;- パラメータ:
source
- 対象の文字列target
- 置換したい文字列replacement
- 置換する文字列- 戻り値:
- 置換した文字列。
- 変更履歴:
- 6.7.3.0 (2017/01/27) 新規作成, 6.8.5.1 (2018/01/15) org.opengion.javadb → org.opengion.fukurou.db にパッケージ変更, 6.9.8.0 (2018/05/28) source、target、replacement のどれかが、null(ゼロ文字列)の場合は、source を返す。
-
substrb
public static String substrb(String value, int start, int length) throws UnsupportedEncodingException substr関数のバイト数版 過去に、hsqldb 用に作成したJava関数です。- パラメータ:
value
- 変換する文字列start
- 変換開始アドレスlength
- 変換バイト数- 戻り値:
- 変換後文字列
- 例外:
UnsupportedEncodingException
- 文字のエンコーディングがサポートされていません。- 変更履歴:
- 6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更 ※ 現在未使用
-
lengthb
length関数のバイト数版 過去に、hsqldb 用に作成したJava関数です。- パラメータ:
value
- バイト数をカウントする文字列- 戻り値:
- バイト数
- 例外:
UnsupportedEncodingException
- 文字のエンコーディングがサポートされていません。- 変更履歴:
- 6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更 ※ 現在未使用
-
checkDelay
日時文字列(yyyyMMddHHmmss)の引数1,2に対して、差分の範囲判定を行います。 範囲判定を行う引数 sec1、sec2、sec3 引数には、それぞれ(秒)レベルの値を指定します。 上記の引数の値が、0 の場合は、判定を回避します。 sec1引数と比べて、小さければ 0 を、大きければ 1 を返します。 sec2引数と比べて、小さければ sec1引数の結果を、大きければ 2 を返します。 sec3引数と比べて、小さければ sec2引数の結果を、大きければ 3 を返します。 通常、sec1、sec2、sec3 と、順番に大きな値にしておきます。 小さいと判定された時点で、判定処理は終了します。 date2 - date1 <= sec1 ⇒ 0 > sec1 ⇒ 1 > sec2 ⇒ 2 > sec3 ⇒ 3 date1,date2 のどちらかが、null,ゼロ文字列の場合は、判定しません。(return "0")- パラメータ:
date1
- 前比較日時文字列(yyyyMMddHHmmss)date2
- 後比較日時文字列(yyyyMMddHHmmss)sec1
- 比較する秒sec2
- 比較する秒sec3
- 比較する秒- 戻り値:
- 判定結果
- 変更履歴:
- 7.0.5.0 (2019/09/16) 新規作成 ※ 現在未使用
-
instr
部分文字列の出現位置を検索します。 第1引数の検索元の文字列と、第2引数の部分文字列を指定します。 戻り値は、Javaの indexOf とは異なり、+1 された値が返ります。 DROP FUNCTION INSTR; CREATE FUNCTION INSTR ( VARCHAR(1000) , VARCHAR(100) ) RETURNS INTEGER DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.instr' ;- パラメータ:
value
- 検索元の文字列sub
- 部分文字列- 戻り値:
- 文字列が見つかった位置(最初が1、見つからなければ 0 )
- 変更履歴:
- 7.3.0.0 (2021/01/06) 新規追加
-
concat
文字列を連結します。 文字列が、NULL の場合は、ゼロ文字列として扱います。 引数がどちらも NULL の場合は、ゼロ文字列が戻されます。 これは、ORACLEとの互換性を考慮した関数です。 ORACLE は、NULLとゼロ文字列を同等にNULLとして扱うため、 COALESCE( VAL1,'' ) で、VAL1がNULLか、ゼロ文字列の場合は、NULLが返されます。 NULLを含むWHERE条件で、WHERE COALESCE( VAL1,'' ) = COALESCE( VAL2,'' ) としても、一致しないため、WHERE COALESCE( VAL1,'x' ) = COALESCE( VAL2,'x' ) とする必要がありますが、VAL1が、実際の 'x' で、VAL2がNULLの場合もマッチします。 一方、Derbyでは、NULLとゼロ文字列を区別するため、COALESCE( VAL1,'x' ) の VAL1の値が、NULLとゼロ文字列で、結果が変わってしまいます。 また、|| による文字列連結も、ORACLEとDerbyでは結果が変わるため、 CONCAT関数を作成して、ORACLEと同じSQL文での比較ができるようにしておきます。 DROP FUNCTION CONCAT; CREATE FUNCTION CONCAT ( VARCHAR(1000) , VARCHAR(1000) ) RETURNS VARCHAR(2000) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.concat' ;- パラメータ:
val1
- 文字列1val2
- 文字列2- 戻り値:
- 文字列1と文字列2を連結した文字列
- 変更履歴:
- 7.3.0.0 (2021/01/06) 新規追加
-
nvl2
NULL文字列の判定変換を行います。 文字列が、NULL(または空文字列)は、文字列2を、NULLでない場合は、文字列1を返します。 Derbyでは、NULLと空文字列が区別されますが、ORACLE等では、区別されないため、 この関数でも区別しません。 空文字列の場合は、NULLと同じになります。 DROP FUNCTION NVL2; CREATE FUNCTION NVL2 ( VARCHAR(1000) , VARCHAR(1000) , VARCHAR(1000) ) RETURNS VARCHAR(1000) DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic) PARAMETER STYLE JAVA -- 戻り値のタイプ NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す EXTERNAL NAME 'org.opengion.fukurou.db.Functions.nvl2' ;- パラメータ:
inval
- 判定する文字列val1
- invalがNULL(または空文字列)でない場合に返す文字列1val2
- invalがNULL(または空文字列)の場合に返す文字列2- 戻り値:
- 文字列がNULLの場合は、val2 を、そうでない場合は、val1 を返す。
- 変更履歴:
- 7.3.1.3 (2021/03/09) 新規追加
-