ヘッダーをスキップ
Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
11gリリース1 (11.1.1)
B63038-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

B RTFテンプレートの拡張された関数サポート

この付録では、RTFテンプレートで使用される、BI Publisherによって拡張されたSQLおよびXSL関数について説明します。

内容は次のとおりです。

B.1 拡張されたSQLおよびXSL関数

BI Publisherでは、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')?>

連結がXSL式であるためです。かわりに、次の構文を使用できます。

適切:

<?xdofx:rpad(FIRST_NAME||LAST_NAME),30,'x')?>

表B-1に、サポートされている関数を示します。

表B-1 サポートされている関数

SQL文またはXSL式 使用方法 説明

2+3

<?xdofx:2+3?>

加算

2-3

<?xdofx:2-3?>

減算

2*3

<?xdofx:2*3?>

乗算

2 div 3

<?xdofx:2 div 3?>

除算

2**3

<?xdofx:2**3?>

指数

3||2

<?xdofx:3||2?>

連結

sdiv()

<?xdoxslt:sdiv(num1,num2, string)?>

安全な除算関数は、関数の結果が数値でない場合に、指定された値を返します(NaN)。ここに示す構文のnum1は被除数で、num2は除数、stringはNaNが返された場合に戻す値です。

例:

<?xdoxslt:sdiv(10,0, '0')?>は0を返します。

<?xdoxslt:sdiv(10,0, 'None')?>はNoneを返します。

lpad('aaa',10,'.')

<?xdofx:lpad('aaa',10,'.')?>

lpad関数は、文字列の左側を一連の特定の文字で埋めます。lpad関数の構文はlpad(string1,padded_length,[pad_string])です。string1は、(その左側の)文字を埋める文字列です。padded_lengthは、戻される文字数です。pad_stringは、string1の左側を埋める文字列です。

rpad('aaa',10,'.')

<?xdofx:rpad('aaa',10,'.')?>

rpad関数は、文字列の右側を一連の特定の文字で埋めます。rpad関数の構文はrpad(string1,padded_length,[pad_string])です。string1は、(その右側の)文字を埋める文字列です。padded_lengthは、戻される文字数です。pad_stringは、string1の右側を埋める文字列です。

trim()

<?xdoxslt:trim(' a ')?>

文字列の中の空白を削除します。切捨て対象となるテキストを入力し、切捨て処理されたテキストが戻されます。

ltrim()

<?xdoxslt:ltrim(' a ')?>

文字列の先頭にある空白を削除します。

rtrim()

<?xdoxslt:rtrim(' a ')?>

文字列の末尾にある空白を削除します。

truncate

<?xdoxslt:truncate ( number [, integer ] )?>

truncate関数は、numberを切捨て処理し、小数点第integer位までの桁数が戻されます。integerを省略すると、numberは整数値に切り捨てられます。integerに負数を指定すると、小数点の左側(整数部)の指定桁位置で切捨て処理できます。integerには整数を指定する必要があります。例:<?xdoxslt:truncate(-2.3333)?>の戻り値:-2例:<?xdoxslt:truncate(2.7777, 2)?>の戻り値:2.77例:<?xdoxslt:truncate(27.7777, -1)?>の戻り値:20

replicate

<?xdoxslt:replicate('string', integer)?>

replicate関数は、指定された文字列を指定された回数だけレプリケートします。例: <?xdoxslt:replicate('oracle', 3)?>の戻り値: oracleoracleoracle

decode('xxx','bbb','ccc','xxx','ddd')

<?xdofx:decode('xxx','bbb','ccc','xxx','ddd')?>

decode関数には、IF-THEN-ELSE文の機能があります。decode関数の構文はdecode(expression, search, result [,search, result]...[, default])です。expressionは比較対象の値です。searchは、expressionに対して比較される値です。resultは、expressionがsearchと等しい場合に戻される値です。一致が見つからない場合はdefaultが戻されます。

Instr('abcabcabc','a',2)

<?xdofx:Instr('abcabcabc','a',2)?>

instr関数は、文字列内の部分文字列の位置を戻します。instr関数の構文はinstr(string1,string2,[start_position],[nth_appearance])です。string1は検索対象の文字列です。string2は、string1内で検索される部分文字列です。start_positionは、string1内の検索開始位置です。文字列の最初の位置は1です。start_positionがマイナスの場合は、string1の最後から逆にstart_positionの文字数が数えられ、string1の先頭方向に検索されます。nth appearanceは、string2のn番目の出現を表します。

substr('abcdefg',2,3)

<?xdofx:substr('abcdefg',2,3)?>

substr関数を使用すると、文字列から部分文字列を抽出できます。substr関数の構文はsubstr(string, start_position, length)です。stringはソース文字列です。start_positionは抽出開始位置です。文字列の最初の位置は常に1です。lengthは抽出文字数です。

left

<?xdoxslt:left('abcdefg', 3)?>

指定された文字数の文字列を文字列の左側から抽出できます。構文は、left(string, Numchars)です。例: <?xdoxslt:left('abcdefg', 3)?>の戻り値: abc

right

<?xdoxslt:right('abcdefg', 3)?>

指定された文字数の文字列を文字列の右側から抽出できます。構文は、right(string, Numchars)です。例: <?xdoxslt:right('abcdefg', 3)?>の戻り値: efg

replace(name,'John','Jon')

<?xdofx:replace(name,'John','Jon')?>

replace関数は、文字列内の一続きの文字を別の一連の文字で置換します。replace関数の構文はreplace(string1,string_to_replace,[replacement_string])です。string1は、その中の一続きの文字が別の一連の文字で置換される文字列です。string_to_replaceは、string1内で検索される文字列です。replacement_stringはオプションです。string1内のすべてのstring_to_replaceがreplacement_stringで置換されます。

to_number('12345')

<?xdofx:to_number('12345')?>

to_number関数は、オプションの書式モデルfmtによって指定された書式で数字が格納されているchar、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の値をNUMBERデータ型の値に変換します。

format_number

<?xdoxslt:format_number(12345, n, $_XDOLOCALE)?>

数値を文字列に変換し、$_XDOLOCALEで指定されたロケールおよびnで指定された小数部の桁数に従い、Javaのデフォルト記号を使用して数値を書式設定します。例: <?xdoxslt:format_number(-12345, 2, 'fr-FR')?>の戻り値: -12 345,00

format_number

<?xdoxslt:format_number(12345, n, s1, s2,$_XDOLOCALE)?>

数値を文字列に変換し、指定されたセパレータを使用します。s1は3桁のセパレータ、s2は小数点のセパレータを示します。例:<?xdoxslt:format_number(12345, 2, 'g', 'd', $_XDOLOCALE)?>の戻り値:12g345d00

pat_format_number

<?xdoxslt:pat_format_number(12345, '##,##0.00', $_XDOLOCALE)?>

指定されたパターンで書式設定された数値を戻します。例: <?xdoxslt:pat_format_number(12345, '##,##0.00', $_XDOLOCALE)?>の戻り値: 12,345.00

to_char(12345)

<?xdofx:to_char('12345')?>

to_char関数を使用して、NUMBERデータ型の値をVARCHAR2データ型に変換します。

to_date

<?xdofx:to_date ( char [, fmt [, 'nlsparam']] )

to_dateは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の文字をDATEデータ型の値に変換します。fmtcharの書式を指定する日付書式です。fmtを省略すると、charはデフォルトの日付書式になります。fmtがユリウス暦を示す'J'の場合、charは整数になります。

format_date()

<?xdoxslt:format_date(./AnyDate,'yyyy-MM-dd','MM/dd/yyyy', $_XDOLOCALE, $_XDOTIMEZONE)?>

日付を特定の書式で読み取り、別の書式の日付を作成します。

sysdate()

<?xdofx:sysdate()?>

SYSDATEは、現在の日時をXMLの標準日付書式で返します(例: 1997-07-16T19:20:30.45+01:00)。戻り値のデータ型はDATEになります。この関数に引数を指定する必要はありません。レポート出力におけるsysdateの正しい書式設定の詳細は、第4.15.13項「レポートでのシステム日付(sysdate)の表示」を参照してください。

current_date()

<?xdoxslt:current_date($_XDOLOCALE, $_XDOTIMEZONE)?>例: <?xdoxslt:current_date('ja-JP', 'Asia/Tokyo')?>

指定されたロケールとタイムゾーンで現在の日付をyyyy-MM-dd形式で戻します。この関数はグレゴリオ暦のみをサポートします。

current_time()

<?xdoxslt:current_time($_XDOLOCALE, $_XDOTIMEZONE)?>例:<?xdoxslt:current_time('ja-JP', 'Asia/Tokyo')?>

指定されたロケールとタイムゾーンで現在の時刻を戻します。この関数はグレゴリオ暦のみをサポートします。

minimum

<?xdoxslt:minimum(ELEMENT_NAME)?>

セット内の要素の最小値を戻します。

date_diff

<?xdoxslt:date_diff('y', 'YYYY-MM-DD', 'YYYY-MM-DD', $_XDOLOCALE, $_XDOTIMEZONE)?>

この関数により、指定されたロケールで2つの日付値の差異を取得します。日付はyyyy-MM-dd形式にする必要があります。この関数はグレゴリオ暦のみをサポートします。構文は、<?xdoxslt:date_diff('format', 'YYYY-MM-DD', 'YYYY-MM-DD', $_XDOLOCALE, $_XDOTIMEZONE)?>です。formatは差異が計算される時間の値を示します。有効な値は次のとおりです。

  • y - 年

  • m - 月

  • w - 週

  • d - 日

  • h - 時間

  • mi - 分

  • s - 秒

  • ms - ミリ秒

例: <?xdoxslt:date_diff('y', '2000-04-08', '2001-05-01', $_XDOLOCALE, $_XDOTIMEZONE)?>

戻り値: 1

例: <?xdoxslt:date_diff('m', '2001-04-08', '2000-02-01', $_XDOLOCALE, $_XDOTIMEZONE)?>

戻り値: -14

例: <?xdoxslt:date_diff('d', '2006-04-08', '2006-04-01', $_XDOLOCALE, 'America/Los_Angeles')?>

戻り値: -7

sec_diff

<?xdoxslt:sec_diff('2000-04-08T20:00:00', '2000-04-08T21:00:00', $_XDOLOCALE, $_XDOTIMEZONE?>

この関数により、指定されたロケールで2つの日付値の差異を秒単位で取得します。日付はyyyy-MM-dd'T'HH:mm:ss形式で指定する必要があります。この関数はグレゴリオ暦のみをサポートします。例: <?xdoxslt:sec_diff('2000-04-08T20:00:00', '2000-04-08T21:00:00', $_XDOLOCALE, $_XDOTIMEZONE?>の戻り値: 3600

get_day

<?xdoxslt:get_day('2000-04-08', $_XDOLOCALE)?>

この関数により、指定されたロケールでyyyy-MM-dd形式の日付値における日の値を取得します。この関数はグレゴリオ暦のみをサポートします。例: <?xdoxslt:get_day('2000-04-08', $_XDOLOCALE)?>の戻り値: 8

get_month

<?xdoxslt:get_month('2000-04-08', $_XDOLOCALE)?>

この関数により、指定されたロケールでyyyy-MM-dd形式の日付値における月の値を取得します。この関数はグレゴリオ暦のみをサポートします。例: <?xdoxslt:get_month('2000-04-08', $_XDOLOCALE)?>の戻り値: 4

get_year

<?xdoxslt:get_year('2000-04-08', $_XDOLOCALE)?>

この関数により、指定されたロケールでyyyy-MM-dd形式の日付値における年の値を取得します。この関数はグレゴリオ暦のみをサポートします。例: <?xdoxslt:get_year('2000-04-08', $_XDOLOCALE)?>の戻り値: 2000

month_name

<?xdoxslt:month_name(1, 0, $_XDOLOCALE)?>

この関数により、指定されたロケールで月の名前を取得します。この関数はグレゴリオ暦のみをサポートします。この関数の構文は、<?xdoxslt:month_name(month, [abbreviate?], $_XDOLOCALE)?>です。monthはその月の数値です(1月は1など)。[abbreviate?]では、省略形でない形式で取得する場合は0、省略形で取得する場合は1を指定します。例: <?xdoxslt:month_name(12, 1, 'fr-FR')?>の戻り値: dec。例:<?xdoxslt:month_name(1, 0, $_XDOLOCALE)?>の戻り値:January

maximum

<?xdoxslt:maximum(ELEMENT_NAME)?>

セット内の要素の最大値を戻します。

abs

<?xdoxslt:abs(-123.45)?>

指定された数値の絶対値を戻します。例:<?xdoxslt:abs(-123.45)?>の戻り値:123.45

chr

<?xdofx:chr(n)?>

chrは、データベース・キャラクタ・セットまたは各国語キャラクタ・セットでnに相当するバイナリを持つキャラクタを戻します。

ceil

<?xdofx:ceil(n)?>

ceilは、n以上で最も小さい整数を戻します。

floor

<?xdofx:floor(n)?>

floorは、n以下で最も大きい整数を戻します。

round(SQL関数)

<?xdofx:round ( number [, integer ] )?>

ROUNDは、numberを、小数点以下第integer位に丸めて戻します。integerを省略すると、numberは小数点以下ゼロに丸められます。integerに負数を指定すると、小数点の左側(整数部)の指定桁位置で切捨て処理できます。integerには整数を指定する必要があります。例:<?xdofx:round (2.777)?>の戻り値:3例:<?xdofx:round (2.777, 2)?>の戻り値:2.78

round(XSLT関数)

<?xdoxslt:round ( number [, integer ] )?>

ROUNDは、numberを、小数点以下第integer位に丸めて戻します。integerを省略すると、numberは小数点以下ゼロに丸められます。integerに負数を指定すると、小数点の左側(整数部)の指定桁位置で切捨て処理できます。integerには整数を指定する必要があります。例:<?xdoxslt:round (2.777)?>の戻り値:3例:<?xdoxslt:round (2.777, 2)?>の戻り値:2.78

lower

<?xdofx:lower (char)?>

lowerは、charをすべて小文字で戻します。charには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を使用できます。戻り値はcharと同じデータ型になります。

upper

<?xdofx:upper(char)?>

upperは、charをすべて大文字で戻します。charには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を使用できます。戻り値はcharと同じデータ型になります。

length

<?xdofx:length(char)?>

length関数は、charの長さを戻します。lengthは、入力キャラクタ・セットによって定義されたキャラクタを使用して長さを計算します。

greatest

<?xdofx:greatest ( expr [, expr]... )?>

greatestは、exprのリストの最大を戻します。比較の前にexprの2番目以降すべてが1番目のexprのデータ型に暗黙的に変換されます。

least

<?xdofx:least ( expr [, expr]... )?>

leastは、exprのリストの最小を戻します。比較の前にexprの2番目以降すべてが1番目のexprのデータ型に暗黙的に変換されます。

next_element

<?xdoxslt:next_element(current-group(),.,'<element-name>')?>

現在のグループにおいて次の要素を取得します。element-nameの次にある要素を戻します。例: <?xdoxslt:next_element(current-group(),.,'employee')?>は、現在のグループ内でemployee直後にある要素を戻します。

prev_element

<?xdoxslt:prev_element(current-group(),..,'<element-name')?>

現在のグループにおいて前の要素を取得します。element-nameの前にある要素を戻します。例: <?xdoxslt:prev_element(current-group(),.,'employee')?>は、現在のグループ内でemployee直前にある要素を戻します。

set_array

<?xdoxslt:set_array($_XDOCTX, '<name of hash table>', n, '<value>')?>

ハッシュテーブルに値を設定します。構文は、<?xdoxslt:set_array($_XDOCTX, '<name of hash table>', n, '<value>')?>となります。$_XDOCTXにはコンテキストを設定する必要があります。<name of hash table>はテーブルに指定した名前にします。nはハッシュテーブルのインデックスです。<value>はハッシュテーブルで設定する値です。例: <?xdoxslt:set_array($_XDOCTX, 'Employee', 2, 'Jones')?> 次のget_arrayを参照してください。

get_array

<?xdoxslt:get_array($_XDOCTX, '<name of hash table>', n)?>

ハッシュテーブルの指定されたインデックスの値を戻します。構文は、<?xdoxslt:get_array($_XDOCTX, '<name of hash table>', n)?>となります。$_XDOCTXにはコンテキストを設定する必要があります。<name of hash table>はset_arrayでテーブルに指定した名前です。nは戻される要素のインデックス値です。たとえば、前述のset_array例を使用すると、<?xdoxslt:get_array($_XDOCTX, 'Employee', 2)?>の戻り値はJonesとなります。


表B-2に、サポートされている組合せ関数を示します。

表B-2 サポートされている組合せ関数

SQL文 使用方法

(2+3/4-6*7)/8

<?xdofx:(2+3/4-6*7)/8?>

lpad(substr('1234567890',5,3),10,'^')

<?xdofx:lpad(substr('1234567890',5,3),10,'^')?>

decode('a','b','c','d','e','1')||instr('321',1,1)

<?xdofx:decode('a','b','c','d','e','1')||instr('321',1,1)?>


B.1.1 数値から単語への変換

この関数を使用すると、RTFテンプレート出力を数値から単語へ変換できます。これは、小切手印刷における一般的な要件です。

この新しい関数はto_check_numberです。構文は次のとおりです。

<?xdofx:to_check_number(amount, precisionOrCurrency, caseType, decimalStyle)?>

表B-3に、この関数の属性の説明を示します。

表B-3 関数の属性

属性 説明 有効値

amount

変換する数値です。

任意の数値

precisionOrCurrency

この属性では、小数点以下の桁数を表す精度、または小数点以下の桁数を決定する通貨コードのいずれかを指定できます。通貨コードは、出力で通貨記号を生成しません。

2などの整数またはUSDなどの通貨コード

caseType

出力の大文字、小文字の種類です。

有効値:'CASE_UPPER','CASE_LOWER','CASE_INIT_CAP'

decimalStyle

小数部分の出力タイプです。

有効値:'DECIMAL_STYLE_FRACTION1', 'DECIMAL_STYLE_FRACTION2','DECIMAL_STYLE_WORD'


例B-4は、RTFテンプレートに入力される関数と、返される出力の例を示しています。

表B-4 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


B.2 XSLの同等要素

表B-5に、BI Publisherの簡略化された構文をXSLの同等要素とともに示します。

表B-5 BI Publisherの構文およびXSLの同等要素

サポートされているXSL要素 説明 BI Publisherの構文

<xsl:value-of select= "name">

プレースホルダの構文。

<?name?>

<xsl:apply-templates select="name">

現行要素の子ノードにテンプレート・ルールを適用します。

<?apply:name?>

<xsl:copy-of select="name">

現行ノードのコピーを作成します。

<?copy-of:name?>

<xsl:call-template name="name">

現行のテンプレートに挿入/適用される名前付きテンプレートをコールします。

<?call:name?>

<xsl:sort select="name">

データセット内の要素に基づいてデータのグループをソートします。

<?sort:name?>

<xsl:for-each select="name">

表出力の生成に使用されるグループのデータ行をループします。

<?for-each:name?>

<xsl:choose>

複数条件テストを表すためにwhenおよびotherwiseとともに使用されます。

<?choose?>

<xsl:when test="exp">

複数条件テストを表すためにchooseおよびotherwiseとともに使用されます。

<?when:expression?>

<xsl:otherwise>

複数条件テストを表すためにchooseおよびwhenとともに使用されます。

<?otherwise?>

<xsl:if test="exp">

条件付き書式設定に使用されます。

<?if:expression?>

<xsl:template name="name">

テンプレートの宣言。

<?template:name?>

<xsl:variable name="name">

ローカル変数またはグローバル変数の宣言。

<?variable:name?>

<xsl:import href="url">

スタイルシートの内容を別のスタイルシートにインポートします。

<?import:url?>

<xsl:include href="url">

スタイルシートを別のスタイルシートに組み込みます。

<?include:url?>

<xsl:stylesheet xmlns:x="url">

スタイルシートのルート要素を定義します。

<?namespace:x=url?>


B.3 FO要素の使用

RTFテンプレートのMicrosoft Wordフォームの各フィールド内で、ほとんどのFO要素を使用できます。表B-6にリストされているFO要素は、BI PublisherのRTFテンプレートで使用できるように拡張されています。BI Publisherの構文は、いずれかのRTFテンプレート方式で使用できます。

BI PublisherでサポートされるFO要素の全リストは、付録の付録D「サポートされているXSL-FO要素」を参照してください。

表B-6 FO要素

FO要素 BI Publisherの構文

<fo:page-number-citation ref-id="id">

<?fo:page-number-citation:id?>

<fo:page-number>

<?fo:page-number?>

<fo:ANY NAME WITHOUT ATTRIBUTE>

<?fo:ANY NAME WITHOUT ATTRIBUTE?>