拡張SQLおよびXSL関数
「パブリッシャ」は、RTFテンプレートで使用する一連のSQLおよびXSL関数を拡張しました。
これらの拡張関数の構文は次のとおりです
<?xdofx:expression?>
拡張SQL関数または
<?xdoxslt:expression?>
拡張XSL関数用。
xdofx文とXSL式を同じコンテキストに混在させることはできません。 たとえば、FIRST_NAMEとLAST_NAMEの2つの要素があり、30文字のフィールドに連結し、"x"という文字でフィールドを右に埋めたとします。 次を使用できませんでした: 
                  
<?xdofx:rpad(concat(FIRST_NAME,LAST_NAME),30, 'x')?>
これは、concatがXSL式であるためです。 かわりに、次を使用できます:
<?xdofx:rpad(FIRST_NAME||LAST_NAME),30,'x')?>
次の表に、サポートされている関数を示します:
| SQL文またはXSL式 | 使用方法 | 説明 | 
|---|---|---|
| 2+3 | 
 | 加算 | 
| 2-3 | 
 | 減算 | 
| 2*3 |   | 乗算 | 
| 2 div 3 | 
 | 除算 | 
| 2**3 | 
 | 指数 | 
| 3||2 | 
 | 連結 | 
| sdiv() | 
 | ファンクションの結果が数字でない場合、指定した値を返します(NaN)。 示されている構文では、num1は除算、num2は除数、文字列はNaNが返された場合に返される値です。 次に例を示します。 
 
 | 
| lpad() | 
 | 文字列の左側を特定の文字セットでパッドします。 lpad関数の構文は次のとおりです: lpad(string1,padded_length,[pad_string]) string1は、文字をパディングする文字列(左側)です。padded_lengthは、返される文字数です。pad_stringは、string1の左側にパディングされる文字列です。 | 
| rpad() | 
 | 文字列の右側を特定の文字セットでパディングします。 rpad関数の構文は次のとおりです: rpad(string1,padded_length,[pad_string]).string1は、文字をパディングする文字列(右側)です。padded_lengthは、返される文字数です。pad_stringは、string1の右側にパディングされる文字列です | 
| trim() | 
 | 文字列内のスペースを削除します。 切り捨てるテキストを入力すると、切り捨てられたテキストが返されます。 | 
| ltrim() | 
 | 文字列の先頭のスペースを削除します。 | 
| rtrim() | 
 | 文字列内の末尾の空白を削除します。 | 
| truncate() | 
 | 小数点の右側のinteger桁に切り捨てられたnumberを返します。 integerを省略すると、numberは整数値全体に切り捨てられます。小数点の左側の値を切り捨てるには、integerを負の値にできます。integerは整数である必要があります。 例 :  | 
| replicate() | 
 | 指定された文字列を指定された回数レプリケートします。 例 :  | 
| decode() | 
 | IF-THEN-ELSE文の機能を使用します。 デコード関数の構文は次のとおりです: decode(expression, search, result [,search, result]...[, default]) 「式」は比較する値です。「検索」は式と比較される値です。「結果」は、式が検索と等しい場合に返される値です。一致が見つからない場合は「デフォルト」が返されます。 | 
| instr() |  | 文字列内の部分文字列のロケーションを返します。 インストゥルメント関数の構文は次のとおりです: instr(string1,string2,[start_position],[nth_appearance]) string1は検索する文字列です。string2は、string1で検索する部分文字列です。start_positionは、検索が開始されるstring1内の位置です。 文字列内の最初の位置は1です。 start_positionが負の場合、関数はstring1の末尾からstart_positionの文字数をカウントし、string1の先頭まで検索します。「外観」は、string2のn番目の外観です。 | 
| substr() | 
 | 文字列から部分文字列を抽出します。 部分関数の構文は次のとおりです: substr(string, start_position, length) stringはソース文字列です。start_positionは抽出の位置です。 文字列内の最初の位置は常に1です。「長さ」は、抽出する文字数です。 | 
| left() | 
 | 指定された文字数を文字列の左側から抽出します。 構文はleft(string, Numchars)です。たとえば、 | 
| right() | 
 | 指定された文字数の文字列を文字列の右側から抽出します。 構文はright(string, Numchars)です。たとえば、 | 
| replace() | 
 | 文字列内の文字シーケンスを別の文字セットに置き換えます。 replace関数の構文は次のとおりです: replace(string1,string_to_replace,[replacement_string]) string1は、一連の文字を別の文字セットに置き換える文字列です。string_to_replaceは、string1で検索される文字列です。replacement_stringはオプションです。 string1では、string_to_replaceのすべての出現箇所がreplacement_stringに置き換えられます。 | 
| to_number() | 
 | オプションの書式モデルfmtで指定された書式の数値を含むCHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の値から、NUMBERデータ型の値に変換します。 | 
| format_number() | 
 | 数値を文字列に変換し、$_XDOLOCALEで指定されたロケールに従って数値を書式設定し、Javaのデフォルト記号を使用してnで指定された小数点以下の桁数に書式設定します。 次に例を示します :  | 
| format_number() | 
 | 数値を文字列に変換し、指定されたセパレータを使用: 千のセパレータの場合はs1、小数セパレータの場合はs2。 次に例を示します :  | 
| pat_format_number() | 
 | 指定されたパターンでフォーマットされた数値を返します。 次に例を示します :  | 
| to_char() | 
 | オプションの数値書式fmtを使用して、値(文字、日付または数値)をVARCHAR2データ型に変換します。 たとえば、 たとえば、 | 
| to_date() | 
 | CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の文字をDATEデータ型の値に変換します。 fmtは、charの書式を指定する日付書式です。 fmtを省略した場合、charはデフォルトの日付書式である必要があります。 fmtがJ (Julianの)の場合、charは整数である必要があります。 | 
| format_date() | 
 | ある書式で日付を読み取り、別の書式で作成します。 | 
| sysdate() | 
 | 現在の日時をXML標準日付書式で返します(例: 1997-07-16T19:20:30.45+01:00). 戻り値のデータ型はDATEです。 この関数には引数は必要ありません。 レポート出力でsysdateを適切に書式設定する方法の詳細は、「レポートでのシステム日付(sysdate)の表示」を参照してください。 | 
| current_date() | 
 | 指定されたロケールおよびタイムゾーンの現在の日付をyyyy-MM-dd形式で返します。 この関数はグレゴリオ暦のみをサポートしています。 | 
| current_time() | 
 | 指定されたロケールおよびタイムゾーンの現在の時間を返します。 この関数はグレゴリオ暦のみをサポートしています。 | 
| maximum_date() | 
 | セット内の要素の最大数を返します。 要素の日付値は、"yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm:ss"フォーマットである必要があります。 戻り値は、1970年1月1日00:00:00 GMT以降のミリ秒を表す数値です。 この数値は、millis_to_date()関数を使用して日付に戻すことができます。 | 
| minimum_date() | 
 | セット内の要素の最小値を返します。 要素の日付値は、"yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm:ss.ms"の書式である必要があります。 戻り値は、1970年1月1日00:00:00 GMT以降のミリ秒を表す数値です。 この数値は、millis_to_date()関数を使用して日付に戻すことができます。 | 
| millis_to_date() | 
 | 日付値を変換します。これは、1970年1月1日00:00:00 GMTからのミリ秒を表す数値で、"yyyy-MM-dd'T'HH:mm:ss.ms+00:00"の書式に変換します。 format_date()関数を使用すると、書式設定された日付値をレポートに表示する必要な日付書式にさらに変換できます。 | 
| date_to_millis() | 
 | "yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm"形式の日付値を、1970年1月1日00:00:00 GMTからのミリ秒を表す数値に変換します。 | 
| minimum() | 
 | セット内の要素の最小値を返します。 | 
| date_diff() | 
 | この関数は、指定されたロケールの2つの日付の差を取得するためのメソッドを提供します。 日付は"yyyy-MM-dd"書式にする必要があります。 この関数はグレゴリオ暦のみをサポートしています。 構文は次のとおりです :  
 例 :  1を返します 例 :  -14を返します 例 :  -7を返します | 
| sec_diff() | 
 | 指定されたロケールの2つの日付の差分を秒数で返します。 日付は"yyyy-MM-dd'T'HH:mm:ss"である必要があります。 この関数はグレゴリオ暦のみをサポートしています。 例 :  | 
| get_day | 
 | 指定されたロケールでyyyy-MM-dd形式の日付値を返します。 この関数はグレゴリオ暦のみをサポートしています。 例 :  | 
| get_month | 
 | 指定されたロケールでyyyy-MM-dd形式の日付値を返します。 この関数はグレゴリオ暦のみをサポートしています。 例 :  | 
| get_year | 
 | 指定されたロケールで、日付の年値をyyyy-MM-dd形式で返します。 この関数はグレゴリオ暦のみをサポートしています。 例 :  | 
| month_name | 
 | 指定されたロケールで月の名前を返します。 この関数はグレゴリオ暦のみをサポートしています。 この関数の構文は次のとおりです :  | 
| 最大 | 
 | セット内の要素の最大数を返します。 | 
| 欠席 | 
 | 入力した数値の絶対値を返します。 例 :  | 
| chr | 
 | データベース文字セットまたは各国語文字セットのいずれかで、nに相当するバイナリを持つ文字を返します。 | 
| ceil() | 
 | n以上の最小の整数を返します。 | 
| floor() | 
 | n以下の最大の整数を返します。 | 
| round (SQL関数) | 
 | 小数点の右側のinteger桁に丸められたnumberを返します。 integerを省略すると、numberは0桁に丸められます。小数点の左側の桁を切り捨てるには、integerを負にすることができます。integerは整数にする必要があります。 例 :  | 
| round (XSLT関数) | 
 | 小数点の右側のinteger桁に丸められたnumberを返します。 integerを省略すると、numberは0桁に丸められます。小数点の左側の桁を切り捨てるには、integerを負にすることができます。integerは整数にする必要があります。 例 :  | 
| lower() | 
 | すべての文字を小文字にしてcharを返します。charには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を指定できます。 戻り値はcharと同じデータ型です。 | 
| upper() | 
 | すべての文字を大文字にしてcharを返します。charには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を指定できます。 戻り値は、charと同じデータ型です。 | 
| 長さ | 
 | charの長さを返します。 LENGTHは、入力文字セットで定義された文字を使用して長さを計算します。 | 
| greatest | 
 | exprsのリストの最大値を返します。 最初のexprs以降のすべてのexprsは、比較の前に最初のexprのデータ型に暗黙的に変換されます。 | 
| least | 
 | exprsのリストの最小値を返します。 最初のexprs以降のすべてのexprsは、比較の前に最初のexprのデータ型に暗黙的に変換されます。 | 
| next_element | 
 | 現在のグループ内の次の要素を返します。 指定された要素の後に発生する要素を返します。 次に例を示します :  | 
| prev_element | 
 | 現在のグループの前の要素を返します。 指定された要素の前に出現する要素を返します。 次に例を示します :  | 
| set_array | 
 | ハッシュ表の値を設定します。 構文は | 
| get_array | 
 | ハッシュ表の指定された索引の値を返します。 構文は | 
| register_replace_string | 
 | 
 たとえば、 
 | 
次の表に、サポートされている組合せ関数を示します。
| SQL文 | 使用方法 | 
|---|---|
| (2+3/4-6*7)/8 | 
 | 
| lpad(substr('1234567890',5,3),10,'^') | 
 | 
| decode('a','b','c','d','e','1')||instr('321',1,1) | 
 | 
数値から単語への変換
この関数を使用すると、RTFテンプレート出力の単語に数値を変換できます。
これは小切手印刷の一般的な要件です。
to_check_number()関数の構文:
<?xdofx:to_check_number(amount, precisionOrCurrency, caseType, decimalStyle)?>
次の表では、関数の属性について説明します。
| 属性 | 説明 | 有効な値 | 
|---|---|---|
| amount | 変換する番号。 | 任意の数値 | 
| precisionOrCurrency | この属性には、精度(小数点以下の桁数)または通貨コード(小数点以下の桁数)を指定できます。 通貨コードでは、出力に通貨記号は生成されません。 | 2などの整数、または'USD'などの通貨コード。 | 
| caseType | 出力のケース・タイプ。 | 有効な値は次のとおりです: 'CASE_UPPER', 'CASE_LOWER', 'CASE_INIT_CAP' | 
| decimalStyle | 小数部エリアの出力タイプ。 | 有効な値は次のとおりです: 'DECIMAL_STYLE_FRACTION1', 'DECIMAL_STYLE_FRACTION2', 'DECIMAL_STYLE_WORD' | 
小切手番号をインドの採番形式で出力するには、to_check_numberのかわりにtoCheckNumberIN関数を使用します。
次の表に、RTFテンプレートに入力された関数例と返された出力を示します。
| RTFテンプレート・エントリ | 返された出力 | 
|---|---|
| <?xdofx:to_check_number(12345.67, 2)?> | Twelve thousand three hundred forty-five and 67/100 | 
| <?xdofx:to_check_number(12345.67, 'USD')?> | Twelve thousand three hundred forty-five and 67/100 | 
| <?xdofx:to_check_number(12345, 'JPY', 'CASE_UPPER')?> | TWELVE THOUSAND THREE HUNDRED FORTY-FIVE | 
| <?xdofx:to_check_number(12345.67, 'EUR', 'CASE_LOWER', 'DECIMAL_STYLE_WORDS')?> | twelve thousand three hundred forty-five and sixty-seven | 
| <?xdofx:to_check_number(43526152,'INR','CASE_UPPER','DECIMAL_STYLE_WORDS')?> | FORTY-THREE MILLION FIVE HUNDRED TWENTY-SIX THOUSAND ONE HUNDRED FIFTY-TWO | 
| <?xdoxslt:toCheckNumberIN(43526152,'INR','CASE_UPPER','DECIMAL_STYLE_WORDS')?> | FOUR CRORES THIRTY FIVE LAKHS TWENTY SIX THOUSAND ONE HUNDRED FIFTY TWO |