パッケージ org.opengion.fukurou.db

クラス Functions

java.lang.Object
org.opengion.fukurou.db.Functions

public final class Functions extends Object
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,
  • メソッドの詳細

    • toChar

      public static String toChar(double val)
      数値を文字列に変換します。 この関数は、引数の 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

      public static String join2(int no, String arg2, String arg3, String arg4)
      特殊な文字列の連結を行います。 これは、第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

      public static String join3(String sep, String arg2, String arg3, String arg4)
      連結文字列を指定した、文字列の連結を行います。 これは、第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

      public static String replace(String source, String target, String replacement)
      対象の文字列の部分文字列を置換します。 ただし、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

      public static int lengthb(String value) throws UnsupportedEncodingException
      length関数のバイト数版 過去に、hsqldb 用に作成したJava関数です。
      パラメータ:
      value - バイト数をカウントする文字列
      戻り値:
      バイト数
      例外:
      UnsupportedEncodingException - 文字のエンコーディングがサポートされていません。
      変更履歴:
      6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更 ※ 現在未使用
    • checkDelay

      public static String checkDelay(String date1, String date2, double sec1, double sec2, double sec3)
      日時文字列(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

      public static int instr(String value, String sub)
      部分文字列の出現位置を検索します。 第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

      public static String concat(String val1, String val2)
      文字列を連結します。 文字列が、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 - 文字列1
      val2 - 文字列2
      戻り値:
      文字列1と文字列2を連結した文字列
      変更履歴:
      7.3.0.0 (2021/01/06) 新規追加
    • nvl2

      public static String nvl2(String inval, String val1, String val2)
      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(または空文字列)でない場合に返す文字列1
      val2 - invalがNULL(または空文字列)の場合に返す文字列2
      戻り値:
      文字列がNULLの場合は、val2 を、そうでない場合は、val1 を返す。
      変更履歴:
      7.3.1.3 (2021/03/09) 新規追加