ヘッダーをスキップ

Oracle Database SQL言語リファレンス
11g リリース1(11.1)

E05750-03
目次
目次
索引
索引

戻る 次へ

5 ファンクション

ファンクションは、データ項目を操作し、結果を戻すという点で演算子に似ていますが、ファンクションと演算子は引数を指定する書式が異なります。次の書式によって、ファンクションでは0(ゼロ)以上の引数を操作できます。

function(argument, argument, ...) 

引数を指定しないファンクションは疑似列に似ています(第3章「疑似列」を参照)。ただし、疑似列は、通常、結果セット内の各行に対して異なる値を戻しますが、引数を指定しないファンクションは、各行に対して同じ値を戻します。

この章では、次の内容を説明します。

SQLファンクション

SQLファンクションは、Oracle Databaseに組み込まれており、適切なSQL文で使用できます。SQLファンクションと、PL/SQLで記述されたユーザー定義ファンクションを混同しないでください。

SQLファンクションが戻す値のデータ型以外のデータ型の引数でSQLファンクションをコールすると、OracleはSQLファンクションを実行する前に、その引数を必要なデータ型に変換します。


注意:

NLS_COMPNLS_SORTの設定を組み合せた値によって、文字をソートおよび比較するルールが決まります。ご使用のデータベースのNLS_COMPLINGUISTICが設定されている場合、この章のエンティティはすべてNLS_SORTパラメータによって指定されるルールに従って解釈されます。NLS_COMPLINGUISTICに設定されていない場合、ファンクションはNLS_SORTの設定に関係なく解釈されます。NLS_SORTは、明示的に設定できます。明示的に設定されていない場合は、NLS_LANGUAGEから導出されます。これらの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


SQLファンクションの構文図では、データ型とともに引数が示されています。SQL構文にパラメータfunctionが指定されている場合は、この項で説明するファンクションの1つに置き換えます。ファンクションは、引数のデータ型および戻り値によってグループ化されています。


注意:

LOB列にSQLファンクションを適用すると、Oracle Databaseは、SQLおよびPL/SQLの処理中に一時LOBを作成します。ご使用のアプリケーションの一時LOBを格納するために、十分な一時表領域が割り当てられていることを確認してください。 


参照:

  • ユーザー・ファンクションの詳細は、「ユーザー定義ファンクション」を参照してください。データ型の暗黙的な変換の詳細は、「データ変換」を参照してください。

  • Oracle Textで使用するファンクションの詳細は、『Oracle Textリファレンス』を参照してください。

  • Oracle Data Miningで使用するファンクションの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次に、ファンクションのカテゴリを表す構文を示します。

function::=

画像の説明

single_row_function::=

画像の説明

次の項に、前述の図のユーザー定義ファンクション以外の各グループにおける組込みSQLファンクションを示します。すべての組込みSQLファンクションを、アルファベット順に説明します。

参照:

「ユーザー定義ファンクション」および「CREATE FUNCTION」を参照してください。 

単一行ファンクション

単一行ファンクションは、問合せ対象の表またはビューの各行に対して1つの結果行を戻します。これらのファンクションは、SELECT構文のリスト、WHERE句、START WITH句、CONNECT BY句およびHAVING句に指定できます。

数値ファンクション

数値ファンクションは入力として数値を受け取り、結果として数値を戻します。数値ファンクションのほとんどは、38桁(10進)のNUMBER値を戻します。超越関数(COSCOSHEXPLNLOGSINSINHSQRTTANおよびTANH)は、36桁(10進)の値を戻します。超越関数のACOSASINATANATAN2は、30桁(10進)の値を戻します。数値ファンクションを次に示します。

ABS
ACOS
ASIN
ATAN
ATAN2
BITAND
CEIL
COS
COSH
EXP
FLOOR
LN
LOG
MOD
NANVL
POWER
REMAINDER
ROUND(数値)
SIGN
SIN
SINH
SQRT
TAN
TANH
TRUNC(数値)
WIDTH_BUCKET

文字値を戻す文字ファンクション

文字値を戻す文字ファンクションは、特に指定がないかぎり、次のデータ型の値を戻します。

ファンクションによって戻される値の長さは、戻されるデータ型の最大長によって制限されます。

文字値を戻す文字ファンクションを次に示します。

CHR
CONCAT
INITCAP
LOWER
LPAD
LTRIM
NLS_INITCAP
NLS_LOWER
NLSSORT
NLS_UPPER
REGEXP_REPLACE
REGEXP_SUBSTR
REPLACE
RPAD
RTRIM
SOUNDEX
SUBSTR
TRANSLATE
TREAT
TRIM
UPPER

NLS文字ファンクション

NLS文字ファンクションは、キャラクタ・セットの情報を戻します。NLS文字ファンクションを次に示します。

NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID
NLS_CHARSET_NAME

数値を戻す文字ファンクション

数値を戻す文字ファンクションの引数には、すべての文字データ型を指定できます。

数値を戻す文字ファンクションを次に示します。

ASCII
INSTR
LENGTH
REGEXP_INSTR

日時ファンクション

日時ファンクションは、日付(DATE)、タイムスタンプ(TIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE)および期間(INTERVAL DAY TO SECONDINTERVAL YEAR TO MONTH)の値を操作します。

一部の日付ファンクションは、OracleのDATEデータ型(ADD_MONTHSCURRENT_DATELAST_DAYNEW_TIMEおよびNEXT_DAY)用に設計されています。これらのファンクションの引数にタイムスタンプ値を指定すると、Oracle Databaseは入力された型をDATE値に内部的に変換し、DATE値を戻します。ただし、MONTHS_BETWEENファンクションは数値を戻し、ROUNDおよびTRUNCファンクションはタイムスタンプ値または期間値を受け入れません。

その他の日時ファンクションは、3種類のすべてのデータ型(日付、タイムスタンプ、期間)を受け入れ、それらのいずれかのデータ型の値を戻すように設計されています。

SYSDATESYSTIMESTAMPCURRENT_TIMESTAMPなどの、現在のシステム日時情報を戻す日時ファンクションはすべて、SQL文で参照される回数に関係なく、SQL文ごとに1回評価されます。

日時ファンクションを次に示します。

ADD_MONTHS
CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
EXTRACT(日時)
FROM_TZ
LAST_DAY
LOCALTIMESTAMP
MONTHS_BETWEEN
NEW_TIME
NEXT_DAY
NUMTODSINTERVAL
NUMTOYMINTERVAL
ROUND(日付)
SESSIONTIMEZONE
SYS_EXTRACT_UTC
SYSDATE
SYSTIMESTAMP
TO_CHAR(日時)
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_DSINTERVAL
TO_YMINTERVAL
TRUNC(日付)
TZ_OFFSET

一般的な比較ファンクション

一般的な比較ファンクションは、値の集合から最大値または最小値(あるいはその両方)を決定します。一般的な比較ファンクションを次に示します。

GREATEST
LEAST

変換ファンクション

変換ファンクションは、あるデータ型から他のデータ型に値を変換します。一般に、ファンクション名はdatatype TO datatypeの書式で指定されます。最初のデータ型は入力データ型です。2番目のデータ型は出力データ型です。SQL変換ファンクションを次に示します。

ASCIISTR
BIN_TO_NUM
CAST
CHARTOROWID
COMPOSE
CONVERT
DECOMPOSE
HEXTORAW
NUMTODSINTERVAL
NUMTOYMINTERVAL
RAWTOHEX
RAWTONHEX
ROWIDTOCHAR
ROWIDTONCHAR
SCN_TO_TIMESTAMP
TIMESTAMP_TO_SCN
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_CHAR(文字)
TO_CHAR(日時)
TO_CHAR(数値)
TO_CLOB
TO_DATE
TO_DSINTERVAL
TO_LOB
TO_MULTI_BYTE
TO_NCHAR(文字)
TO_NCHAR(日時)
TO_NCHAR(数値)
TO_NCLOB
TO_NUMBER
TO_DSINTERVAL
TO_SINGLE_BYTE
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TO_YMINTERVAL
TRANSLATE ... USING
UNISTR

ラージ・オブジェクト・ファンクション

ラージ・オブジェクト・ファンクションは、LOBを操作します。ラージ・オブジェクト・ファンクションを次に示します。

BFILENAME
EMPTY_BLOB、EMPTY_CLOB

収集ファンクション

収集ファンクションは、ネストした表およびVARRAYを操作します。SQL収集ファンクションを次に示します。

CARDINALITY
COLLECT
POWERMULTISET
POWERMULTISET_BY_CARDINALITY
SET

階層ファンクション

階層ファンクションは、階層パス情報を結果セットに適用します。

SYS_CONNECT_BY_PATH

データ・マイニング・ファンクション

データ・マイニング・ファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成したモデルを操作します。SQLデータ・マイニング・ファンクションを次に示します。

CLUSTER_ID
CLUSTER_PROBABILITY
CLUSTER_SET
FEATURE_ID
FEATURE_SET
FEATURE_VALUE
PREDICTION
PREDICTION_BOUNDS
PREDICTION_COST
PREDICTION_DETAILS
PREDICTION_PROBABILITY
PREDICTION_SET

XMLファンクション

XMLファンクションは、XML文書またはフラグメントを操作または戻します。出力の書式設定など、これらのファンクションを使用したXMLデータの選択および問合せの詳細は、『Oracle XML DB開発者ガイド』を参照してください。SQL XMLファンクションを次に示します。

APPENDCHILDXML
DELETEXML
DEPTH
EXTRACT(XML)
EXISTSNODE
EXTRACTVALUE
INSERTCHILDXML
INSERTXMLBEFORE
PATH
SYS_DBURIGEN
SYS_XMLAGG
SYS_XMLGEN
UPDATEXML
XMLAGG
XMLCAST
XMLCDATA
XMLCOLATTVAL
XMLCOMMENT
XMLCONCAT
XMLDIFF
XMLELEMENT
XMLEXISTS
XMLFOREST
XMLPARSE
XMLPATCH
XMLPI
XMLQUERY
XMLROOT
XMLSEQUENCE
XMLSERIALIZE
XMLTABLE
XMLTRANSFORM

エンコーディング・ファンクションおよびデコーディング・ファンクション

エンコーディング・ファンクションおよびデコーディング・ファンクションでは、データベース内のデータを調査およびデコードできます。

DECODE
DUMP
ORA_HASH
VSIZE

NULL関連ファンクション

NULL関連ファンクションは、NULL処理を簡単にします。NULL関連ファンクションを次に示します。

COALESCE
LNNVL
NULLIF
NVL
NVL2

環境ファンクションおよび識別子ファンクション

環境ファンクションおよび識別子ファンクションは、インスタンスとセッションの情報を提供します。これらのファンクションを次に示します。

SYS_CONTEXT
SYS_GUID
SYS_TYPEID
UID
USER
USERENV

集計ファンクション

集計ファンクションは、単一行に基づく結果行を戻すのではなく、行のグループに基づく単一結果行を戻します。集計ファンクションは、SELECT構文のリスト、ORDER BYおよびHAVING句に指定できます。集計ファンクションは、通常、SELECT文のGROUP BY句で使用され、この句の中で問合せ対象の表またはビューの行がグループ化されます。GROUP BY句を含む問合せでは、SELECT構文のリストの要素は、集計ファンクション、GROUP BY式、定数またはこれらのいずれかを含む式になります。Oracleは、集計ファンクションを行の各グループに適用し、各グループに単一の結果行を戻します。

GROUP BY句を指定しないと、SELECT構文のリスト内の集計ファンクションは、問合せ対象の表またはビューのすべての行に適用されます。HAVING句で集計ファンクションを使用して、グループを出力しないこともできます。このとき、出力は、問合せ対象の表またはビューの各行の値ではなく、集計ファンクションの結果に基づきます。

参照:

問合せおよび副問合せにおけるGROUP BY句およびHAVING句の詳細は、「GROUP BY句の使用例:」および「HAVING句」を参照してください。 

単一の引数を指定する多くの集計ファンクションには、次の句があります。

たとえば、1、1、1、3の平均値はDISTINCTでは2となり、ALLでは1.5となります。どの句も指定しない場合、デフォルトでALLが使用されます。

集計ファンクションには、分析ファンクションの構文の一部であるwindowing_clauseを使用できるものがあります。この句の詳細は、「windowing_clause」を参照してください。この項の最後に示す集計ファンクションのリストでは、windowing_clauseを使用できるファンクションにアスタリスク(*)が付いています。

COUNT(*)、GROUPINGおよびGROUPING_IDを除くすべての集計ファンクションは、NULLを無視します。集計ファンクションに対する引数にNVLファンクションを使用して、NULLをある値で置き換えることができます。COUNTおよびREGR_COUNTはNULLを戻しません。数字または0(ゼロ)を戻します。その他の集計ファンクションでは、データ・セットに行がない場合、または集計ファンクションに対する引数としてNULLを持つ行のみがある場合はNULLを戻します。

集計ファンクションMINMAXSUMAVGCOUNTVARIANCEおよびSTDDEVの後に、KEEPキーワードを指定すると、FIRSTまたはLASTファンクションと組み合せて使用することができ、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作できます。詳細は、「FIRST」を参照してください。

集計ファンクションはネストできます。たとえば、次の例では、サンプル・スキーマhrのすべての部門における最高額の給与の平均を計算します。

SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id;

AVG(MAX(SALARY))
----------------
           10925

この計算では、GROUP BY句(department_id)で定義されているグループごとの内部集計(MAXsalary))を評価し、その結果をもう一度集計しています。

集計ファンクションを次に示します。

AVG
COLLECT
CORR
CORR_*
COUNT
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
LAST
MAX
MEDIAN
MIN
PERCENTILE_CONT
PERCENTILE_DISC
PERCENT_RANK
RANK
REGR_(線形回帰)ファンクション
STATS_BINOMIAL_TEST
STATS_CROSSTAB
STATS_F_TEST
STATS_KS_TEST
STATS_MODE
STATS_MW_TEST
STATS_ONE_WAY_ANOVA
STATS_T_TEST_*
STATS_WSR_TEST
STDDEV
STDDEV_POP
STDDEV_SAMP
SUM
SYS_XMLAGG
VAR_POP
VAR_SAMP
VARIANCE
XMLAGG

分析ファンクション

分析ファンクションは、行のグループに基づいて集計値を計算します。各グループに対して複数の行を戻す点で、集計ファンクションと異なります。行のグループをウィンドウといい、analytic_clauseで定義されます。各行に対して、行のスライディング・ウィンドウが定義されます。このウィンドウによって、カレント行の計算に使用される行の範囲が決定されます。ウィンドウの大きさは、行の物理数値または時間などのロジカル・インターバルに基づきます。

分析ファンクションは、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合およびすべてのWHEREGROUP BYおよびHAVING句は、分析ファンクションが処理される前に実行されます。そのため、分析ファンクションは、SELECT構文のリストまたはORDER BY句のみに指定できます。

通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。

analytic_function::=

画像の説明

analytic_clause::=

画像の説明

query_partition_clause::=

画像の説明

order_by_clause::=

画像の説明

windowing_clause::=

画像の説明

次に、この構文のセマンティクスを示します。

analytic_function

分析ファンクションの名前を指定します(セマンティクスの説明の後に示す分析ファンクションのリストを参照)。

引数

分析ファンクションには引数を0〜3個指定します。引数には、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を指定できます。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換します。個々のファンクションに特に指定がないかぎり、戻り型もその引数のデータ型となります。

参照:

数値の優先順位の詳細は、「数値の優先順位」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

analytic_clause

OVER analytic_clause句は、ファンクションが問合せ結果セットを操作することを示します。この句は、FROMWHEREGROUP BYおよびHAVING句の後に計算されます。SELECT構文のリストのこの句またはORDER BY句に分析ファンクションを指定できます。分析ファンクションに基づいて、問合せの結果をフィルタするには、これらのファンクションを親問合せ内でネストした後、ネストされた副問合せの結果をフィルタします。

analytic_clauseの注意事項:

analytic_clauseには、次の注意事項があります。

query_partition_clause

PARTITION BY句を使用すると、1つ以上のvalue_exprに基づいて、問合せ結果セットをグループに分割できます。この句を省略すると、ファンクションは問合せ結果セットのすべての行を単一のグループとして扱います。

分析ファンクションでquery_partition_clauseを使用するには、構文の上位ブランチ(カッコなし)を使用します。この句をモデルの問合せ(model_column_clauses内)またはパーティション化された外部結合(outer_join_clause内)で使用するには、構文の下位ブランチ(カッコ付き)を使用します。

同じまたは異なるPARTITION BYキーで、同じ問合せに複数の分析ファンクションを指定できます。

問い合せているオブジェクトにパラレル属性があり、query_partition_clauseで分析ファンクションを指定する場合は、ファンクションの計算もパラレル化されます。

有効な値のvalue_exprは、定数、列、非分析ファンクション、ファンクション式、またはこれらのいずれかを含む式です。

order_by_clause

order_by_clauseを使用すると、パーティション内でのデータの順序付け方法を指定できます。PERCENTILE_CONTおよび(単一キーのみを適用する)PERCENTILE_DISC以外の分析ファンクションでは、各キーがvalue_exprで定義され、順序付けシーケンスで修飾された複数キーのパーティションの値を順序付けできます。

各ファンクションには、複数の順序式を指定できます。これは、2番目の式が最初の式にある同一値との間の関連性を変換できるため、値をランク付けするファンクションを使用する場合に特に有効です。

order_by_clauseの結果が複数行の個々の値である場合、ファンクションは各行の同じ値を戻します。この動作の詳細は、「SUM」の分析例を参照してください。

ORDER BY句の制限事項:

ORDER BY句には次の制限事項があります。

ASC | DESC

順序付けシーケンス(昇順または降順)を指定します。デフォルトはASCです。

NULLS FIRST | NULLS LAST

NULL値を含む戻された行が順序の最初にくるか、最後にくるかを指定します。

NULLS LASTは昇順のデフォルトで、NULLS FIRSTは降順のデフォルトです。

分析ファンクションは、常に、ファンクションのorder_by_clauseで指定された順序で行を操作します。ただし、ファンクションのorder_by_clauseは結果の順序を保証しません。最終結果の順序を保証するには、問合せのorder_by_clauseを使用してください。

参照:

この句の詳細は、「SELECT」の「order_by_clause」を参照してください。 

windowing_clause

一部の分析ファンクションでは、windowing_clauseを使用できます。7-16ページに示す分析ファンクションのリストでは、windowing_clauseを使用できるファンクションにアスタリスク(*)が付いています。

ROWS | RANGE

これらのキーワードは、各行に対して、ファンクションの結果の計算に使用されるウィンドウ(行の物理集合または論理集合)を定義します。ファンクションは、ウィンドウのすべての行に適用されます。ウィンドウは、問合せ結果セット内またはパーティションの上から下まで移動します。

order_by_clauseを指定しないと、この句を指定できません。RANGE句で定義したウィンドウ境界には、order_by_clauseで指定できる式が1つのみのものもあります。詳細は、「ORDER BY句の制限事項:」を参照してください。

分析ファンクションが論理オフセットで戻す値は、常に決定的なものです。ただし、分析ファンクションが物理オフセットで戻す値は、順序式の結果が一意の順序にならないかぎり、非決定的な結果を生成することがあります。order_by_clauseに複数の列を指定して、結果の順序を一意にする必要があります。

BETWEEN ...AND

BETWEEN ... AND句を使用すると、ウィンドウにスタート・ポイントおよびエンド・ポイントを指定できます。最初の式(ANDの前)はスタート・ポイントを定義し、2番目の式(ANDの後)はエンド・ポイントを定義します。

BETWEENを省略してエンド・ポイントを1つのみ指定すると、Oracleはそれをスタート・ポイントとみなし、デフォルトでカレント行をエンド・ポイントに指定します。

UNBOUNDED PRECEDING

UNBOUNDED PRECEDINGを指定すると、パーティションの最初の行で、ウィンドウが開始します。これはスタート・ポイントの指定で、エンド・ポイントの指定としては使用できません。

UNBOUNDED FOLLOWING

UNBOUNDED FOLLOWINGを指定すると、パーティションの最後の行で、ウィンドウが終了します。これはエンド・ポイントの指定で、スタート・ポイントの指定としては使用できません。

CURRENT ROW

スタート・ポイントとして、ウィンドウがカレント行または値(それぞれROWまたはRANGEを指定したかどうかに基づく)で開始することを指定します。この場合、value_expr PRECEDINGをエンド・ポイントにできません。

エンド・ポイントとして、ウィンドウがカレント行または値(それぞれROWまたはRANGEを明示的に指定したかどうかに基づく)で終了することを指定します。この場合、value_expr FOLLOWINGをスタート・ポイントにできません。

value_expr PRECEDINGまたはvalue_expr FOLLOWING

RANGEまたはROWに対して、次のことがいえます。

数値形式の時間間隔で定義されている論理ウィンドウを定義する場合、変換ファンクションを使用する必要があります。

参照:

数値時間から間隔への変換の詳細は、「NUMTOYMINTERVAL」および「NUMTODSINTERVAL」を参照してください。 

ROWSを指定した場合、次のことがいえます。

RANGEを指定した場合、次のことがいえます。

windowing_clauseを完全に省略した場合、デフォルトでRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。

分析ファンクションは、通常、データ・ウェアハウス環境で使用されます。次に示す分析ファンクションのリストでは、windowing_clauseを含む完全な構文を使用できるファンクションには、アスタリスク(*)が付いています。

AVG *
CORR *
COVAR_POP *
COVAR_SAMP *
COUNT *
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE *
LAG
LAST
LAST_VALUE *
LEAD
MAX *
MIN *
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
RATIO_TO_REPORT
REGR_(線形回帰)ファンクション *
ROW_NUMBER
STDDEV *
STDDEV_POP *
STDDEV_SAMP *
SUM *
VAR_POP *
VAR_SAMP *
VARIANCE *

参照:

これらのファンクションおよびその使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 

オブジェクト参照ファンクション

オブジェクト参照ファンクションは、指定されたオブジェクト型のオブジェクトへの参照となるREF値を操作します。オブジェクト参照ファンクションを次に示します。

DEREF
MAKE_REF
REF
REFTOHEX
VALUE

参照:

REFデータ型の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。 

モデル・ファンクション

モデル・ファンクションは、SELECT文のmodel_clauseでのみ使用できます。新しいモデル・ファンクションを次に示します。

CV
ITERATION_NUMBER
PRESENTNNV
PRESENTV
PREVIOUS

SQLファンクションのリスト(アルファベット順)

この項では、SQLファンクションをアルファベット順に示し、説明します。


ABS

構文


画像の説明

用途

ABSは、nの絶対値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、-15の絶対値を戻します。

SELECT ABS(-15) "Absolute" FROM DUAL;

  Absolute
----------
        15

ACOS

構文


画像の説明

用途

ACOSは、nのアーク・コサインを戻します。引数nは-1〜1の範囲で、ファンクションによって戻される値は0〜π(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、.3のアーク・コサインを戻します。

SELECT ACOS(.3)"Arc_Cosine" FROM DUAL;

Arc_Cosine
----------
1.26610367

ADD_MONTHS

構文


画像の説明

用途

ADD_MONTHSは、日付dateに月数integerを加えて戻します。月は、セッション・パラメータNLS_CALENDARによって定義されます。引数dateには、日時値、または暗黙的にDATEに変換可能な任意の値を指定できます。引数integerには、整数、または暗黙的に整数に変換可能な任意の値を指定できます。戻り型は、dateのデータ型に関係なく常にDATEです。dateが月の最終日の場合、または結果の月の日数がdateの日付コンポーネントよりも少ない場合、戻される値は結果の月の最終日となります。それ以外の場合、結果にはdateと同じ日付コンポーネントが含まれます。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、サンプル表employeeshire_date後の月を戻します。

SELECT TO_CHAR(
     ADD_MONTHS(hire_date,1),
     'DD-MON-YYYY') "Next month"
     FROM employees 
     WHERE last_name = 'Baer';

Next Month
-----------
07-JUL-1994

APPENDCHILDXML

構文


画像の説明

用途

APPENDCHILDXMLは、ユーザー指定の値を、XPath式で指定したノードの子としてターゲットXMLに追加します。

次の例では、/Buildingノードの値が「Rented」の場合に、/Ownerノードをoe.warehouses表のwarehouse_spec/Warehouse/Buildingノードに追加します。

UPDATE warehouses SET warehouse_spec =
   APPENDCHILDXML(warehouse_spec,
   'Warehouse/Building',
   XMLType('<Owner>Grandco</Owner>'))
   WHERE EXTRACTVALUE(warehouse_spec, '/Warehouse/Building') = 'Rented';
 
SELECT warehouse_id, warehouse_name,
   EXTRACTVALUE(warehouse_spec, '/Warehouse/Building/Owner') "Prop.Owner"
   FROM warehouses
   WHERE EXISTSNODE(warehouse_spec, '/Warehouse/Building/Owner') = 1;

WAREHOUSE_ID WAREHOUSE_NAME  Prop.Owner
------------ --------------- ----------
           2 San Francisco   Grandco
           3 New Jersey      Grandco

ASCIISTR

構文


画像の説明

用途

ASCIISTRは、任意のキャラクタ・セットの文字列、または文字列に変換する式を引数として取り、データベース・キャラクタ・セットのASCII文字列を戻します。ASCII文字以外は、\xxxxという書式に変換されます。xxxxは、UTF-16のコード単位です。

参照:

Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 

次の例では、テキスト文字列「ABÄCDE」をASCII文字列で戻します。

SELECT ASCIISTR('ABÄCDE') FROM DUAL;

ASCIISTR('
----------
AB\00C4CDE

ASCII

構文


画像の説明

用途

ASCIIは、charの最初の文字の、データベース・キャラクタ・セットでの10進表記を戻します。

charのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。戻り値のデータ型はNUMBERです。データベース・キャラクタ・セットが7ビットのASCIIの場合、このファンクションはASCII値を戻します。データベース・キャラクタ・セットがEBCDICコードの場合、このファンクションはEBCDIC値を戻します。このファンクションと一致するEBCDIC文字ファンクションは存在しません。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、姓が文字「L」で始まり、ASCII表記が76の従業員を戻します。

SELECT last_name FROM employees
   WHERE ASCII(SUBSTR(last_name, 1, 1,)) = 76;
 
LAST_NAME
-------------------------
Ladwig
Landry
Lee
Livingston

ASIN

構文


画像の説明

用途

ASINは、nのアーク・サインを戻します。引数nは-1〜1の範囲で、ファンクションによって戻される値は-π/2〜π/2(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、.3のアーク・サインを戻します。

SELECT ASIN(.3) "Arc_Sine" FROM DUAL;

 Arc_Sine
----------
.304692654

ATAN

構文


画像の説明

用途

ATANは、nのアーク・タンジェントを戻します。引数nの範囲に制限はなく、ファンクションによって戻される値は-π/2〜π/2(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

ATAN2ファンクションの詳細は、「ATAN2」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、.3のアーク・タンジェントを戻します。

SELECT ATAN(.3) "Arc_Tangent" FROM DUAL;

Arc_Tangent
----------
.291456794

ATAN2

構文


画像の説明

用途

ATAN2は、n1およびn2のアーク・タンジェントを戻します。引数n1の範囲に制限はなく、n1n2の符号により、ファンクションによって戻される値は-ππ(ラジアン)の範囲です。ATAN2(n1,n2)と、ATAN(n1/n2)は同じです。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

参照:

ATANファンクションの詳細は、「ATAN」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、.3および.2のアーク・タンジェントを戻します。

SELECT ATAN2(.3, .2) "Arc_Tangent2" FROM DUAL;
 
Arc_Tangent2
------------
  .982793723

AVG

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

AVGは、exprの平均値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

DISTINCTを指定する場合は、analytic_clausequery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、hr.employees表にあるすべての従業員の平均給与を計算します。

SELECT AVG(salary) "Average" FROM employees;

       Average
--------------
    6461.68224

分析の例

次の例では、employees表の各従業員について、ある期間内に雇用された従業員の平均給与を所属別に計算します。

SELECT manager_id, last_name, hire_date, salary,
   AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date 
   ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavg
   FROM employees
   ORDER BY manager_id, last_name, hire_date, salary, AVG(salary);

MANAGER_ID LAST_NAME                 HIRE_DATE     SALARY     C_MAVG
---------- ------------------------- --------- ---------- ----------
       100 Kochhar                   21-SEP-89      17000      17000
       100 De Haan                   13-JAN-93      17000      15000
       100 Raphaely                  07-DEC-94      11000 11966.6667
       100 Kaufling                  01-MAY-95       7900 10633.3333
       100 Hartstein                 17-FEB-96      13000 9633.33333
       100 Weiss                     18-JUL-96       8000 11666.6667
       100 Russell                   01-OCT-96      14000 11833.3333
       100 Partners                  05-JAN-97      13500 13166.6667
. . .

BFILENAME

構文


画像の説明

用途

BFILENAMEは、サーバーのファイル・システムの物理LOBバイナリ・ファイルに対応付けられているBFILEロケータを戻します。

SQL文、PL/SQL文、DBMS_LOBパッケージまたはOCIの操作で、これらをBFILENAMEへの引数として使用するには、まずディレクトリ・オブジェクトを作成し、BFILE値を物理ファイルと対応付ける必要があります。

次の2つの方法で、このファンクションを使用できます。

ディレクトリの引数の大/小文字は区別されます。データ・ディクショナリ内に存在する名前と同じ名前でディレクトリ・オブジェクト名を指定しているかを確認する必要があります。たとえば、CREATE DIRECTORY文で、大/小文字を組み合せた識別子を引用符で囲んで使用してAdminディレクトリ・オブジェクトを作成すると、BFILENAMEファンクションを使用する場合、ディレクトリ・オブジェクトを'Admin'として指定する必要があります。filename引数は、ご使用のオペレーティング・システムの大/小文字および記号の表記規則に従って指定する必要があります。

参照:

  • LOBの詳細およびBFILEデータの検出例については、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

  • 「CREATE DIRECTORY」

 

次の例では、サンプル表pm.print_mediaに行を挿入します。BFILENAMEを使用して、$ORACLE_HOME/demo/schema/product_mediaディレクトリにある、サーバーのファイル・システムのバイナリ・ファイルを識別します。次の例では、PMスキーマでのディレクトリのデータベース・オブジェクトmedia_dirの作成方法を示します。

CREATE DIRECTORY media_dir AS '/demo/schema/product_media';

INSERT INTO print_media (product_id, ad_id, ad_graphic)
   VALUES (3000, 31001, 
      BFILENAME('MEDIA_DIR', 'modem_comp_ad.gif'));

BIN_TO_NUM

構文


画像の説明

用途

BIN_TO_NUMは、ビット・ベクトルを同等の数値に変換します。このファンクションの各引数は、ビット・ベクトルのビットを表します。このファンクションは、引数として、任意の数値データ型、または暗黙的にNUMBERに変換可能な数値以外のデータ型を取ります。各exprは、0または1に評価される必要があります。このファンクションはOracleのNUMBER値を戻します。

BIN_TO_NUMは、データ・ウェアハウスのアプリケーションで、グルーピング・セットを使用して、マテリアライズド・ビューから対象グループを検索する場合に有効です。

参照:

 

次の例では、バイナリの値を数値に変換します。

SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL; 

BIN_TO_NUM(1,0,1,0)
-------------------
                 10

次の例では、3つの値を1つのバイナリの値に変換し、BIN_TO_NUMを使用してこのバイナリを数値に変換します。この例では、PL/SQL宣言を使用して元の値を指定します。これらの値は、通常は実際のデータ・ソースから導出されます。

SELECT order_status FROM orders WHERE order_id = 2441;

ORDER_STATUS
------------
           5
DECLARE
  warehouse NUMBER := 1;
  ground    NUMBER := 1;
  insured   NUMBER := 1;
  result    NUMBER;
BEGIN
  SELECT BIN_TO_NUM(warehouse, ground, insured) INTO result FROM DUAL;
  UPDATE orders SET order_status = result WHERE order_id = 2441;
end;
/
PL/SQL procedure successfully completed.

SELECT order_status FROM orders WHERE order_id = 2441;

ORDER_STATUS
------------
           7

この逆の(1つの列値から複数の値を抽出する)プロセスの詳細は、「BITAND」の例を参照してください。


BITAND

構文


画像の説明

用途

BITANDファンクションは、その入力と出力をビットのベクトルとして扱います。出力は、入力のビット単位ANDになります。

expr1およびexpr2の型はNUMBERであり、結果はNUMBER型になります。BITANDのいずれかの引数がNULLの場合、結果はNULLになります。

引数は、-(2(n-1)) .. ((2(n-1))-1)の範囲にする必要があります。引数をこの範囲外にすると、結果は未定義になります。

結果は、いくつかのステップで計算されます。まず、それぞれの引数Aが値SIGN(A)*FLOOR(ABS(A))に置き換えられます。この変換では、各引数の小数点以下が切り捨てられます。次に、整数値となったそれぞれの引数Aが、nビットの2の補数のバイナリ整数値に変換されます。ビット単位AND演算を使用して、2つのビット値が組み合せられます。最後に、生成されたnビットの2の補数値がNUMBERに変換されます。

BITANDファンクションの注意事項

次の例では、数値6(バイナリ1,1,0)と数値3(バイナリ0,1,1)にAND演算を実行します。

SELECT BITAND(6,3) FROM DUAL;

BITAND(6,3)
-----------
          2

これは、6と3のバイナリの値を示す次の例と同じです。BITANDファンクションは、バイナリの値の有効桁のみで演算を実行します。

SELECT BITAND(
   BIN_TO_NUM(1,1,0),
   BIN_TO_NUM(0,1,1)) "Binary"
FROM DUAL;
 
    Binary
----------
         2

単一の列値における複数の値のエンコードの詳細は、「BIN_TO_NUM」の例を参照してください。

次の例では、サンプル表oe.ordersorder_status列で複数の選択項目を1つの数値内の個別のビットとしてエンコードします。たとえば、まだ倉庫にある発注は、バイナリの値001(10進値1)で表されます。陸上輸送で発送される発注は、バイナリの値010(10進値2)で表されます。保険がかけられた荷物は、バイナリの値100(10進値4)で表されます。この例では、DECODEファンクションを使用して、order_status値の3つのビットのそれぞれに2つの値(ビットがオンの場合の値とビットがオフの場合の値)が示されています。

SELECT order_id, customer_id, order_status,
  DECODE(BITAND(order_status, 1), 1, 'Warehouse', 'PostOffice')
      "Location",
  DECODE(BITAND(order_status, 2), 2, 'Ground', 'Air') "Method",
  DECODE(BITAND(order_status, 4), 4, 'Insured', 'Certified') "Receipt"
  FROM orders
  WHERE sales_rep_id = 160
  ORDER BY order_id;

  ORDER_ID CUSTOMER_ID ORDER_STATUS Location   Method Receipt
---------- ----------- ------------ ---------- ------ ---------
      2455         145            7 Warehouse  Ground Insured
      2416         104            6 PostOffice Ground Insured
      2419         107            3 Warehouse  Ground Certified
      2420         108            2 PostOffice Ground Certified
      2423         145            3 Warehouse  Ground Certified
      2441         106            5 Warehouse  Air    Insured

Location列では、まずBITANDによってorder_statusと1(バイナリ001)が比較されます。比較されるのは重要なビット値のみです。したがって、右端のビットが1であるバイナリの値(奇数)は正と評価され、1が戻されます。偶数の場合は0(ゼロ)が戻されます。DECODEファンクションでは、BITANDによって戻された値と1が比較されます。両方とも1の場合、場所はWarehouse(倉庫)になります。これらの値が異なる場合、場所はPostOffice(郵便局)になります。

Method列とReceipt列は、同様に計算されます。Methodでは、BITANDによってorder_statusと2(バイナリ010)にAND演算が実行されます。Receiptでは、BITANDによってorder_statusと4(バイナリ100)にAND演算が実行されます。


CARDINALITY

構文


画像の説明

用途

CARDINALITYは、ネストした表内の要素数を戻します。戻り型は、NUMBERです。ネストした表が空であるかNULLの集合である場合、CARDINALITYNULLを戻します。

次の例では、pm.print_mediaサンプル表のネストした表の列ad_textdocs_ntab内の要素数を示します。

SELECT product_id, CARDINALITY(ad_textdocs_ntab) Cardinality
   FROM print_media
   ORDER BY product_id, cardinality;

PRODUCT_ID CARDINALITY
---------- -----------
      2056           3
      2268           3
      3060           3
      3106           3

CAST

構文


画像の説明

用途

CASTは、ある組込みデータ型またはコレクション型の値を、別の組込みデータ型またはコレクション型の値に変換します。

CASTを使用すると、ある組込みデータ型またはコレクション型の値を、別の組込みデータ型またはコレクション型に変換できます。名前のないオペランド(日付や副問合せの結果セットなど)または名前付きのコレクション(VARRAYやネストした表など)を型互換の名前付きコレクションにキャストできます。type_nameは、組込みデータ型またはコレクション型の名前である必要があり、オペランドは、組込みデータ型であるか、またはその値がコレクション値である必要があります。

オペランドでは、exprは組込みデータ型、コレクション型またはANYDATA型のインスタンスのいずれかです。exprANYDATA型のインスタンスである場合、CASTANYDATAインスタンスの値を抽出し、その値がキャスト対象の型と一致する場合はその値を戻し、一致しない場合はNULLを戻します。MULTISETは、副問合せの結果セットを取り、コレクション値を戻すようにOracle Databaseに通知します。表5-1に、どの組込みデータ型が、どの組込みデータ型にキャストできるかを示します(CASTは、LONG型、LONG RAW型、またはOracleが提供する型をサポートしていません)。

CASTは、LOBデータ型のいずれも直接的にサポートしていません。CASTを使用して、CLOB値を文字データ型に変換するか、BLOB値をRAWデータ型に変換すると、データベースは暗黙的にLOB値を文字またはRAWデータに変換し、結果値を明示的にターゲットのデータ型にキャストします。結果値がターゲットの型より大きい場合、エラーが戻されます。

CAST ... MULTISETを使用してコレクション値を取得すると、CASTファンクションに渡される問合せ内のSELECT構文のリストのアイテムは、ターゲットのコレクション要素型に対応する属性型に変換されます。

表5-1    組込みデータ型のキャスト 
  BINARY_FLOAT、BINARY_DOUBLEから  CHAR、VARCHAR2から  NUMBERから  DATETIME/INTERVALから(注1)  RAWから  ROWID、UROWIDから(注2)  NCHAR、NVARCHAR2から 

BINARY_FLOAT、BINARY_DOUBLEへ 

X 

X 

X 

-- 

-- 

-- 

X 

CHAR、VARCHAR2へ  

X 

X 

X 

X 

X 

X 

-- 

NUMBERへ  

X 

X 

X 

-- 

-- 

-- 

X 

DATE、TIMESTAMP、INTERVALへ  

-- 

X 

-- 

X 

-- 

-- 

-- 

RAWへ  

-- 

X 

-- 

-- 

X 

-- 

-- 

ROWID、UROWIDへ  

-- 

X 

-- 

-- 

-- 

X

-- 

NCHAR、NVARCHAR2へ  

X 

-- 

X 

X 

X 

X 

X 

注1: Datetime/Intervalには、DATETIMESTAMPTIMESTAMP WITH TIMEZONEINTERVAL DAY TO SECONDおよびINTERVAL YEAR TO MONTHが含まれます。

注2: UROWIDが索引構成表のROWIDの値を含んでいる場合、UROWIDROWIDにキャストすることはできません。

名前付きコレクション型を別の名前付きコレクション型にキャストするには、両方のコレクションの要素が同じ型である必要があります。

参照:

Oracle Databaseで暗黙的にコレクション型データを文字データに変換する方法については、「暗黙的なデータ変換」および「データ変換のセキュリティ上の考慮事項」を参照してください。 

副問合せの結果セットが複数行に評価される可能性がある場合は、MULTISETキーワードを指定する必要があります。副問合せの結果である行は、それらの行がキャストされたコレクション値の要素を形成します。MULTISETキーワードを省略すると、副問合せはスカラー副問合せとして処理されます。

組込みデータ型の例

次の例では、CASTファンクションをスカラー・データ型とともに使用します。

SELECT CAST('22-OCT-1997' AS TIMESTAMP WITH LOCAL TIME ZONE) 
   FROM dual;

SELECT product_id, 
   CAST(ad_sourcetext AS VARCHAR2(30)) Text
   FROM print_media
   ORDER BY product_id, text;

コレクションの例

後に続くCASTの例は、サンプルの注文入力スキーマoeで使用されているcust_address_typに基づいています。

CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
/
CREATE TYPE address_array_t AS VARRAY(3) OF cust_address_typ;
/
CREATE TABLE cust_address (
   custno            NUMBER, 
   street_address    VARCHAR2(40), 
   postal_code       VARCHAR2(10), 
   city              VARCHAR2(30),
   state_province    VARCHAR2(10), 
   country_id        CHAR(2));

CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31));

CREATE TABLE states (state_id NUMBER, addresses address_array_t);

次の例では、副問合せをキャストします。

SELECT s.custno, s.name,
   CAST(MULTISET(SELECT ca.street_address,   
                        ca.postal_code, 
                        ca.city, 
                        ca.state_province, 
                        ca.country_id
                 FROM cust_address ca
                 WHERE s.custno = ca.custno)
   AS address_book_t)
FROM cust_short s
ORDER BY s.custno, s.name;

CASTでは、VARRAY型の列をネストした表に変換します。

SELECT CAST(s.addresses AS address_book_t)
   FROM states s 
   WHERE s.state_id = 111; 

次の例では、この後に示す例で使用するオブジェクトを作成します。

CREATE TABLE projects 
   (employee_id NUMBER, project_name VARCHAR2(10));

CREATE TABLE emps_short 
   (employee_id NUMBER, last_name VARCHAR2(10));

CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10);
   /

次のMULTISET式の例は、前述のオブジェクトを使用します。

SELECT e.last_name,
   CAST(MULTISET(SELECT p.project_name
   FROM projects p 
   WHERE p.employee_id = e.employee_id
   ORDER BY p.project_name)
   AS project_table_typ)
FROM emps_short e
ORDER BY e.last_name;

CEIL

構文


画像の説明

用途

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

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、指定した注文の合計以上である最小の整数を戻します。

SELECT order_total, CEIL(order_total) FROM orders
   WHERE order_id = 2434;

ORDER_TOTAL CEIL(ORDER_TOTAL)
----------- -----------------
   268651.8            268652

CHARTOROWID

構文


画像の説明

用途

CHARTOROWIDは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型の値をROWIDデータ型に変換します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、文字表記のROWIDをROWIDに変換します。(実際のROWIDは、各データベース・インスタンスによって異なります。)

SELECT last_name FROM employees
   WHERE ROWID = CHARTOROWID('AAAFd1AAFAAAABSAA/');
 
LAST_NAME
-------------------------
Greene

CHR

構文


画像の説明

用途

CHRは、データベース・キャラクタ・セットまたは各国語キャラクタ・セット(USING NCHAR_CSを指定している場合)の中のnに等しい2進数を持つ文字を、VARCHAR2値として戻します。

シングルバイト・キャラクタ・セットの場合、Oracle Databaseは、n > 256に対してn mod 256に等しい2進数を戻します。マルチバイト・キャラクタ・セットの場合、nは1つのコードポイント全体として解決される必要があります。無効なコードポイントは検証されないため、無効なコードポイントを指定した場合の結果は、予測不能です。

このファンクションは、引数として、NUMBER値、または暗黙的にNUMBER型に変換可能な任意の値を取り、文字を戻します。


注意:

(オプションのUSING NCHAR_CS句の有無にかかわらず)CHRファンクションを使用すると、ASCIIおよびEBCDICベースのマシン・アーキテクチャ間で移植不可能なコードが戻されます。 


参照:

NCHR」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例は、データベース・キャラクタ・セットがWE8ISO8859P1と定義されているASCIIベースのマシンで実行されています。

SELECT CHR(67)||CHR(65)||CHR(84) "Dog" FROM DUAL;

Dog
---
CAT

キャラクタ・セットがWE8EBCDIC1047のEBCDICベースのマシンでも同じ結果を戻すには、前述の例を次のように修正する必要があります。

SELECT CHR(195)||CHR(193)||CHR(227) "Dog" 
   FROM DUAL; 

Dog 
--- 
CAT 

マルチバイト・キャラクタ・セットの場合、このように連結しても異なる結果となります。たとえば、a1a2a1は1つ目のバイト、a2は2つ目のバイト)という16進数の値を持つマルチバイト文字の場合、nに対して「a1a2」に等しい2進数または41378を指定する必要があります。

SELECT CHR(41378) FROM DUAL;

次の例のように、a2に等しい2進数と連結されたa1に等しい2進数を指定することはできません。

SELECT CHR(161)||CHR(162) FROM DUAL;

ただし、次の例のように、マルチバイト文字を連結するマルチバイトのコードポイント全体を連結することは可能です。この例では、a1a2a1a3の16進数を持つマルチバイト文字を連結しています。

SELECT CHR(41378)||CHR(41379) FROM DUAL;

次の例では、各国語キャラクタ・セットがUTF16であると仮定します。

SELECT CHR (196 USING NCHAR_CS) FROM DUAL; 

CH 
-- 
Ä 

CLUSTER_ID

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成したモデルのクラスタリングで使用するためのものです。このファンクションは、mining_attribute_clauseで指定した一連の予測子のうち、最も確率の高い予測クラスタのクラスタ識別子を戻します。戻り値は、OracleのNUMBERです。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

  • 「PREDICTION」

 

次の例では、指定したデータセットの顧客がグループ化されたクラスタを示します。

この例と前提条件のデータ・マイニング操作(dm_sh_clus_sampleモデルおよびdm_sh_sample_apply_preparedビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmkmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT CLUSTER_ID(km_sh_clus_sample USING *) AS clus, COUNT(*) AS cnt 
  FROM km_sh_sample_apply_prepared
GROUP BY CLUSTER_ID(km_sh_clus_sample USING *)
ORDER BY cnt DESC;

      CLUS        CNT
---------- ----------
         2        580
        10        199
         6        185
         8        115
        12         98
        16         82
        19         81
        15         68
        18         65
        14         27
 
10 rows selected.

CLUSTER_PROBABILITY

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成したモデルのクラスタリングで使用するためのものです。このファンクションは、指定したモデルに関連付けられたクラスタにある入力行のメンバーシップの確信度のメジャーを戻します。

次の例では、可能性に基づいて、クラスタ2で最も代表的な顧客を10人決定します。

この例と前提条件のデータ・マイニング操作(dm_sh_clus_sampleモデルおよびdm_sh_sample_apply_preparedビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmkmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT *
  FROM (SELECT cust_id, CLUSTER_PROBABILITY(km_sh_clus_sample, 2 USING *) prob
          FROM km_sh_sample_apply_prepared
        ORDER BY prob DESC)
 WHERE ROWNUM < 11;

   CUST_ID   PROB
---------- ------
    100052  .9993
    100962  .9993
    101208  .9993
    100281  .9993
    100012  .9993
    101009  .9992
    100173  .9992
    101176  .9991
    100672  .9991
    101420  .9991
 
10 rows selected.

CLUSTER_SET

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成したモデルのクラスタリングで使用するためのものです。このファンクションは、指定した行が属している可能性のあるクラスタを含むオブジェクトのVARRAYを戻します。VARRAYの各オブジェクトは、クラスタIDとクラスタ確率を含むスカラー値の組です。オブジェクト・フィールドには、CLUSTER_IDPROBABILITYの名前が付き、両方ともOracleのNUMBERになります。

topNcutoffをともに指定すると、戻されるクラスタを上位Nの中で、しきい値を超える確率を持つクラスタに制限できます。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、20%を超える可能性で顧客101362が属する各クラスタで、最も関連性の高い属性(確信度が55%を超える)を示します。

この例と前提条件のデータ・マイニング操作(dm_sh_clus_sampleモデル、ビューおよび型の作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmkmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

WITH
clus_tab AS (
SELECT id,
       A.attribute_name aname,
       A.conditional_operator op,
       NVL(A.attribute_str_value,
         ROUND(DECODE(A.attribute_name, N.col,
                      A.attribute_num_value * N.scale + N.shift,
                      A.attribute_num_value),4)) val,
       A.attribute_support support,
       A.attribute_confidence confidence
  FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_KM('km_sh_clus_sample')) T,
       TABLE(T.rule.antecedent) A,
       km_sh_sample_norm N
 WHERE A.attribute_name = N.col (+) AND A.attribute_confidence > 0.55
),
clust AS (
SELECT id,
       CAST(COLLECT(Cattr(aname, op, TO_CHAR(val), support, confidence))
         AS Cattrs) cl_attrs
  FROM clus_tab
GROUP BY id
),
custclus AS (
SELECT T.cust_id, S.cluster_id, S.probability
  FROM (SELECT cust_id, CLUSTER_SET(km_sh_clus_sample, NULL, 0.2 USING *) pset
          FROM km_sh_sample_apply_prepared
         WHERE cust_id = 101362) T,
       TABLE(T.pset) S
)
SELECT A.probability prob, A.cluster_id cl_id,
       B.attr, B.op, B.val, B.supp, B.conf
  FROM custclus A,
       (SELECT T.id, C.*
          FROM clust T,
               TABLE(T.cl_attrs) C) B
 WHERE A.cluster_id = B.id
ORDER BY prob DESC, cl_id ASC, conf DESC, attr ASC, val ASC;

   PROB      CL_ID ATTR            OP  VAL                   SUPP    CONF
------- ---------- --------------- --- --------------- ---------- -------
  .7873          8 HOUSEHOLD_SIZE  IN  9+                     126   .7500
  .7873          8 CUST_MARITAL_ST IN  Divorc.                118   .6000
                   ATUS
 
  .7873          8 CUST_MARITAL_ST IN  NeverM                 118   .6000
                   ATUS
 
  .7873          8 CUST_MARITAL_ST IN  Separ.                 118   .6000
                   ATUS
 
  .7873          8 CUST_MARITAL_ST IN  Widowed                118   .6000
                   ATUS
 
  .2016          6 AGE             >=  17                     152   .6667
  .2016          6 AGE             <=  31.6                   152   .6667
  .2016          6 CUST_MARITAL_ST IN  NeverM                 168   .6667
                   ATUS
  
8 rows selected.


COALESCE

構文


画像の説明

用途

COALESCEは、式のリストの最初のNULLでないexprを戻します。2つ以上の式を指定する必要があります。すべてのexprがNULLと評価された場合、このファンクションはNULLを戻します。

Oracle Databaseでは、短絡評価を使用します。データベースは、NULLかどうかを判断する前にexpr値のすべてを評価するのではなく、各expr値を評価して、NULLかどうかを判断します。

すべてのexprが数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型である場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

このファンクションはNVLファンクションを一般化したファンクションです。

COALESCEは、CASE式の変形として使用できます。次に例を示します。

COALESCE (expr1, expr2)

これは、次のCASE式と同じです。

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

次の例も同様です。

COALESCE (expr1, expr2, ..., exprn), for n>=3

これは、次のCASE式と同じです。

CASE WHEN expr1 IS NOT NULL THEN expr1 
   ELSE COALESCE (expr2, ..., exprn) END

参照:

NVL」および「CASE式」を参照してください。 

次の例では、サンプル表oe.product_informationを使用して、製品のクリアランス・セールを企画します。製品の表示価格から10%値引きします。表示価格がない場合は、最小価格はセール価格となります。最小価格がない場合、セール価格は「5」となります。

SELECT product_id, list_price, min_price,
   COALESCE(0.9*list_price, min_price, 5) "Sale"
   FROM product_information
   WHERE supplier_id = 102050
   ORDER BY product_id, list_price, min_price, "Sale";

PRODUCT_ID LIST_PRICE  MIN_PRICE       Sale
---------- ---------- ---------- ----------
      1769         48                  43.2
      1770                    73         73
      2378        305        247      274.5
      2382        850        731        765
      3355                                5

COLLECT

構文


画像の説明

用途

COLLECTは、任意の型の列を引数に取り、選択された行から、入力された型のネストした表を作成する集計ファンクションです。このファンクションから正確な結果を取得するには、このファンクションをCASTファンクション内で使用する必要があります。

column自体がコレクションである場合、COLLECTの出力はコレクションのネストした表になります。columnがユーザー定義型である場合は、オプションのDISTINCTUNIQUEおよびORDER BY句を使用できるように、columnMAPまたはORDERメソッドが定義されている必要があります。

参照:

「CAST」 

次の例では、oe.customersサンプル表の電話番号のVARRAY列からネストした表を作成します。

CREATE TYPE phone_book_t AS TABLE OF phone_list_typ;
/
SELECT CAST(COLLECT(phone_numbers) AS phone_book_t) Phone_Book 
   FROM customers
   ORDER BY phone_book;

COMPOSE

構文


画像の説明

用途

COMPOSEは、引数として任意のデータ型の文字列または文字列に変換する式を取り、入力されたものと同じキャラクタ・セットでUnicode文字列を戻します。charのデータ型は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBです。たとえば、oウムラウト・コードポイントは、ウムラウト・コードポイントによって修飾されたoコードポイントとして戻されます。

COMPOSEは、NFC正規形の文字列を戻します。より排他的な設定の場合は、まずCANONICAL設定を使用してDECOMPOSEを呼び出し、次にCOMPOSEを呼び出すことができます。この組合せによって、NFKC正規形の文字列が戻されます。

暗黙的な変換を使用して、CLOBおよびNCLOBの値がサポートされます。charが文字のLOB値の場合、COMPOSE演算の前にVARCHAR値に変換されます。特定の開発環境で、LOB値のサイズがVARCHARのサポートする長さを超える場合、この演算は失敗します。

参照:

  • Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

  • 「DECOMPOSE」

 

次の例は、oウムラウトのコードポイントを戻します。

SELECT COMPOSE ( 'o' || UNISTR('\0308') ) FROM DUAL; 

CO 
-- 
ö 

参照:

「UNISTR」 


CONCAT

構文


画像の説明

用途

CONCATは、char2に連結されているchar1を戻します。char1およびchar2は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。char1と同じキャラクタ・セットの文字列が戻されます。そのデータ型は、引数のデータ型によって決まります。

2つの異なるデータ型を連結すると、可逆式変換となるデータ型が戻されます。したがって、引数の1つがLOBの場合、戻り値はLOBとなります。引数の1つが各国語データ型の場合は、戻り値は各国語データ型となります。たとえば、次のようになります。

このファンクションは、連結演算子(||)と同等です。

参照:

CONCAT演算子の詳細は、「連結演算子」を参照してください。 

次の例では、ネストを使用して3つの文字列を連結します。

SELECT CONCAT(CONCAT(last_name, '''s job category is '),
      job_id) "Job" 
   FROM employees 
   WHERE employee_id = 152
   ORDER BY "Job";
 
Job
------------------------------------------------------
Hall's job category is SA_REP

CONVERT

構文


画像の説明

用途

CONVERTは、文字列を、あるキャラクタ・セットから別のキャラクタ・セットに変換します。

CHARVARCHAR2の戻り値は、VARCHAR2です。NCHARNVARCHAR2の戻り値は、NVARCHAR2です。CLOBの戻り値はCLOBNCLOBの戻り値はNCLOBです。

変換先キャラクタ・セットと変換元キャラクタ・セットの引数として、リテラルまたはキャラクタ・セットの名前を含んでいる列を指定できます。

完全に文字を変換するには、変換先キャラクタ・セットが変換元キャラクタ・セットで定義されているすべての文字を表現できる必要があります。文字が変換先キャラクタ・セットに存在しないと、置換文字が使用されます。置換文字は、キャラクタ・セット定義の一部として定義できます。


注意:

Oracle Databaseの現行のリリースでは、CONVERTファンクションを使用しないことをお薦めします。CONVERTの戻り値は文字データ型であるため、そのデータ型に応じてデータベース・キャラクタ・セットまたは各国語キャラクタ・セットのいずれかになります。この2つのキャラクタ・セットのどちらでもないdest_char_setは、サポートされません。char引数とsource_char_setの要件は同じです。このため、ファンクションの実用的な用途は、誤ったキャラクタ・セットで格納されているデータの修正にかぎられます。

データベース・キャラクタ・セットと各国語キャラクタ・セットのどちらでもない値は、RAWまたはBLOBとして処理して格納する必要があります。PL/SQLパッケージUTL_RAWおよびUTL_I18Nのプロシージャ(たとえば、UTL_RAW.CONVERT)では、このような値の限定的な処理が可能です。パッケージUTL_FILEUTL_TCPUTL_HTTPおよびUTL_SMTP内でRAW引数を受け入れるプロシージャを使用すると、処理されたデータを出力できます。 


次の例では、Latin-1文字列をASCIIに変換するキャラクタ・セットの変換を示します。これは、同じ文字列をWE8ISO8859P1データベースからUS7ASCIIデータベースへインポートした場合と同じ結果が得られます。

SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') 
   FROM DUAL; 

CONVERT('ÄÊÍÕØABCDE' 
--------------------- 
A E I ? ? A B C D E ? 

一般的なキャラクタ・セットを次に示します。

次のようにV$NLS_VALID_VALUESビューを問い合せて、有効なキャラクタ・セットのリストを取得できます。

SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET'

参照:

サポートされているキャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。V$NLS_VALID_VALUESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 


CORR

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

CORRは、数値の組の集合に対する相関係数を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

Oracle Databaseは、expr1またはexpr2がNULLである組を排除した後、このファンクションを(expr1, expr2)の集合に適用します。その後、Oracleは次の計算を行います。

COVAR_POP(expr1, expr2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2))

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。


注意:

CORRファンクションは、ピアソンの相関係数を計算します。この計算を行うには、数式を引数として指定する必要があります。Oracleは、ノンパラメトリックまたは順位相関をサポートするためのCORR_S(スピアマンのロー係数)およびCORR_K(ケンドールのタウb係数)も提供します。 


参照:

exprの書式の詳細は、「集計ファンクション」および「SQL式」を参照してください。「CORR_*」と「CORR_S」も参照してください。 

集計の例

次の例では、oe.product_informationサンプル表の重さクラスごとの製品の表示価格と最小価格の相関係数を計算します。

SELECT weight_class, CORR(list_price, min_price) "Correlation"
   FROM product_information
   GROUP BY weight_class
   ORDER BY weight_class, "Correlation";

WEIGHT_CLASS Correlation
------------ -----------
           1  .999149795
           2  .999022941
           3  .998484472
           4  .999359909
           5  .999536087

分析の例

次の例では、会社での勤務年数と給与の相関を従業の役職別に示します。結果セットでは、指定した業務の従業員ごとに同じ相関を示します。

SELECT employee_id, job_id, 
   TO_CHAR((SYSDATE - hire_date) YEAR TO MONTH ) "Yrs-Mns",     salary, 
   CORR(SYSDATE-hire_date, salary)
   OVER(PARTITION BY job_id) AS "Correlation"
FROM employees
WHERE department_id in (50, 80)
ORDER BY job_id, employee_id;

EMPLOYEE_ID JOB_ID     Yrs-Mns     SALARY Correlation
----------- ---------- ------- ---------- -----------
        145 SA_MAN     +08-07       14000  .912385598
        146 SA_MAN     +08-04       13500  .912385598
        147 SA_MAN     +08-02       12000  .912385598
        148 SA_MAN     +05-07       11000  .912385598
        149 SA_MAN     +05-03       10500  .912385598
        150 SA_REP     +08-03       10000   .80436755
        151 SA_REP     +08-02        9500   .80436755
        152 SA_REP     +07-09        9000   .80436755
        153 SA_REP     +07-01        8000   .80436755
        154 SA_REP     +06-05        7500   .80436755
        155 SA_REP     +05-06        7000   .80436755
...

CORR_*

CORR_*ファンクションを次に示します。

構文

correlation::=

画像の説明

用途

CORRファンクション(「CORR」を参照)は、ピアソンの相関係数を計算し、入力として数式を必要とします。CORR_*ファンクションは、ノンパラメトリックまたは順位相関をサポートします。これらのファンクションを使用すると、式間の相関を順序尺度化して求めることができます(値の順序付けが可能な場合)。相関係数は-1〜1の範囲の値となります。1は完全な正相関、-1は完全な逆相関(一方の変数が減少すると他方の変数が増加する)、および0(ゼロ)に近い値は無相関を表します。

これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、計算を実行してNUMBERを戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

expr1およびexpr2は、分析対象の2つの変数です。3つ目の引数はVARCHAR2型の戻り値です。3つ目の引数を指定しない場合、デフォルトでCOEFFICIENTが戻り値になります。戻り値の意味を次の表に示します。

表5-2    CORR_*の戻り値 
戻り値  意味 

COEFFICIENT 

相関の係数 

ONE_SIDED_SIG 

相関の正の片側有意 

ONE_SIDED_SIG_POS 

ONE_SIDED_SIGに同じ 

ONE_SIDED_SIG_NEG 

相関の負の片側有意 

TWO_SIDED_SIG 

相関の両側有意 


CORR_S

CORR_Sは、スピアマンの順位相関係数(ロー)を計算します。入力式は、観測値の組(xi, yi)の集合である必要があります。このファンクションは、最初に各値を順位に置き換えます。各xiの値は、標本内の他のすべてのxi中での順位に置き換えられ、各yiの値は、他のすべてのyi中での順位に置き換えられます。したがって、各xiおよび各yiは1〜nの値となります。ここでnは、値の組の合計数です。同順位の場合は、値がわずかに異なっていた場合に付けられる順位の平均が割り当てられます。その後このファンクションは、順位の線形相関係数を計算します。

CORR_Sの例

次の例では、スピアマンのロー相関係数を使用して、salarycommission_pctsalaryemployee_idの2つの異なる比較ごとに相関係数を導出します。

SELECT COUNT(*) count,
       CORR_S(salary, commission_pct) commission,
       CORR_S(salary, employee_id) empid
FROM employees;
 
     COUNT COMMISSION      EMPID
---------- ---------- ----------
       107 .735837022 -.04482358

CORR_K

CORR_Kは、ケンドールの順位相関係数(タウb)を計算します。CORR_Sと同様に、入力式は観測値の組(xi, yi)の集合です。係数を計算するために、このファンクションは一致した組と一致しない組の数をカウントします。xとyの値がいずれも大きい観測値の組は一致しています。xの値が大きくyの値が小さい観測値の組は一致していません。

タウbでの有意性は、タウbによって示される相関が偶然の結果である確率です(0〜1の値)。この値が小さい場合、タウbが正の値であれば有意な相関が存在します(タウbが負の値の場合は逆相関)。

CORR_Kの例

次の例では、ケンドールのタウb相関係数を使用して、従業員の給与と歩合の割合(パーセント)間に相関があるかどうかを判断します。

SELECT CORR_K(salary, commission_pct, 'COEFFICIENT') coefficient,
       CORR_K(salary, commission_pct, 'TWO_SIDED_SIG') two_sided_p_value
  FROM hr.employees;

COEFFICIENT TWO_SIDED_P_VALUE
----------- -----------------
 .603079768        3.4702E-07

COS

構文


画像の説明

用途

COSは、n(ラジアンで表された角度)のコサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、180度のコサインを戻します。

SELECT COS(180 * 3.14159265359/180)
   "Cosine of 180 degrees" FROM DUAL;

Cosine of 180 degrees
---------------------
                   -1

COSH

構文


画像の説明

用途

COSHは、nの双曲線コサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、0の双曲線コサインを戻します。

SELECT COSH(0) "Hyperbolic cosine of 0" FROM DUAL;
 
Hyperbolic cosine of 0
----------------------
                     1 

COUNT

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

COUNTは、問合せによって戻された行の数を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

DISTINCTを指定する場合は、analytic_clausequery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

exprを指定すると、COUNTexprがNULLでない行数を戻します。exprのすべての行を数えるか、または異なる値のみを数えることができます。

アスタリスク(*)を指定すると、このファンクションは重複値およびNULL値を含むすべての行を戻します。COUNTはNULLを戻しません。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、COUNTを集計ファンクションとして使用します。

SELECT COUNT(*) "Total" FROM employees;

     Total
----------
       107

SELECT COUNT(*) "Allstars" FROM employees
   WHERE commission_pct > 0;

 Allstars
---------
       35

SELECT COUNT(commission_pct) "Count" FROM employees;

     Count
----------
        35

SELECT COUNT(DISTINCT manager_id) "Managers" FROM employees;

  Managers
----------
        18

分析の例

次の例では、employees表の各従業員について、その従業員の給与より50ドル少ない金額から150ドル多い金額の範囲の給与を得ている従業員の数を計算します。

SELECT last_name, salary,
   COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING
      AND 150 FOLLOWING) AS mov_count FROM employees
   ORDER BY last_name, salary, COUNT(*);

LAST_NAME                     SALARY  MOV_COUNT
------------------------- ---------- ----------
Olson                           2100          3
Markle                          2200          2
Philtanker                      2200          2
Landry                          2400          8
Gee                             2400          8
Colmenares                      2500         10
Marlow                          2500         10
Patel                           2500         10
. . .

COVAR_POP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

COVAR_POPは、数値の組の集合に対する母集団共分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

Oracle Databaseは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1, expr2)の組の集合に適用します。その後、Oracleは次の計算を行います。

(SUM(expr1 * expr2) - SUM(expr2) * SUM(expr1) / n) / n

ここで、nは(expr1, expr2)の組の数です(ただし、expr1およびexpr2の両方がNULLではない場合です)。

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。

参照

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の母集団共分散と標本共分散を計算します。

SELECT job_id, 
   COVAR_POP(SYSDATE-hire_date, salary) AS covar_pop,
   COVAR_SAMP(SYSDATE-hire_date, salary) AS covar_samp
   FROM employees
   WHERE department_id in (50, 80)
   GROUP BY job_id
   ORDER BY job_id, covar_pop, covar_samp;

JOB_ID       COVAR_POP  COVAR_SAMP
---------- ----------- -----------
SA_MAN         660700     825875
SA_REP     579988.466  600702.34
SH_CLERK     212432.5 223613.158
ST_CLERK    176577.25 185870.789
ST_MAN         436092     545115

分析の例

次の例では、デモ・スキーマoeの製品の表示価格および最小価格の累積標本共分散を計算します。

SELECT product_id, supplier_id,
   COVAR_POP(list_price, min_price) 
      OVER (ORDER BY product_id, supplier_id)
         AS CUM_COVP,
   COVAR_SAMP(list_price, min_price)
      OVER (ORDER BY product_id, supplier_id)
        AS CUM_COVS 
   FROM product_information p
   WHERE category_id = 29
   ORDER BY product_id, supplier_id;

PRODUCT_ID SUPPLIER_ID   CUM_COVP   CUM_COVS
---------- ----------- ---------- ----------
      1774      103088          0
      1775      103087    1473.25     2946.5
      1794      103096 1702.77778 2554.16667
      1825      103093    1926.25 2568.33333
      2004      103086     1591.4    1989.25
      2005      103086     1512.5       1815
      2416      103088 1475.97959 1721.97619
. . .

COVAR_SAMP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

COVAR_SAMPは、数値の組の集合の標本共分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

Oracle Databaseは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1, expr2)の組の集合に適用します。その後、Oracleは次の計算を行います。

(SUM(expr1 * expr2) - SUM(expr1) * SUM(expr2) / n) / (n-1)

ここで、nは(expr1, expr2)の組の数です(ただし、expr1およびexpr2の両方がNULLではない場合です)。

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

COVAR_POP」の集計の例を参照してください。

分析の例

COVAR_POP」の分析の例を参照してください。


CUBE_TABLE

構文


画像の説明

用途

CUBE_TABLEは、キューブまたはディメンションのデータを抽出し、SQLベースのアプリケーションで使用可能な2次元形式のリレーショナル表に戻します。

このファンクションは、1つのVARCHAR2引数を取ります。オプションのHIERARCHY句を使用すると、ディメンション階層を指定できます。キューブでは複数のHIERARCHY句(ディメンションごとに1つ)を使用できます。

次の様々なタイプの表を生成できます。

CUBE_TABLEは表ファンクションであり、SELECT文のコンテキストで常に次の構文で使用されます。

SELECT ... FROM TABLE(CUBE_TABLE('arg'));

参照:

ディメンション・オブジェクトの詳細およびCUBE_TABLEで生成される表の詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。 

次のSELECT文は、GLOBALスキーマのCHANNELのディメンション表を生成します。

SELECT * FROM TABLE(CUBE_TABLE('global.channel'));
 
DIM_KEY  LEVEL_NAME      LONG_DESCRIP SHORT_DESCRI TOTAL_CHANNEL_ID CHANNEL_ID
-------- --------------- ------------ ------------ ---------------- ----------
1        TOTAL_CHANNEL   All Channels All Channels                1
2        CHANNEL         Direct Sales Direct Sales                1          2
3        CHANNEL         Catalog      Catalog                     1          3
4        CHANNEL         Internet     Internet                    1          4

次の文は、UNITS_CUBEのキューブ表を生成します。この文は、表をMARKET_ROLLUP階層およびCALENDAR階層に制限します。

SELECT * FROM TABLE(CUBE_TABLE(
   'global.units_cube HIERARCHY customer market_rollup HIERARCHY time calendar'));
 
     SALES      UNITS       COST TIME     CUSTOMER PRODUCT  CHANNEL
---------- ---------- ---------- -------- -------- -------- --------
 134109248     330425  124918967 2        7        1        1
32275009.5      77425   30255208 10       7        1        1
10768750.7      25780 10058324.5 36       7        1        1
 109261.64        278  101798.32 36       5        1        1
  22371.47         53   20887.54 36       36       1        1
      .
      .
      .

CUME_DIST

集計の構文

cume_dist_aggregate::=

画像の説明

分析の構文

cume_dist_analytic::=

画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

CUME_DISTは、値のグループにある値の累積分布値を計算します。CUME_DISTが戻す値の範囲は、0より大きく1以下です。連結値は、常に同じ累積分布値に対して評価を行います。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、計算を実行してNUMBERを戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

集計の例

次の例では、サンプル表oe.employeesの従業員の中から、給与が15,500ドルであり、歩合が5%の不確定な従業員の累積分布を計算します。

SELECT CUME_DIST(15500, .05) WITHIN GROUP
   (ORDER BY salary, commission_pct) "Cume-Dist of 15500" 
   FROM employees;

Cume-Dist of 15500
------------------
        .972222222

分析の例

次の例では、購買部門の各従業員の給与のパーセンタイルを計算します。たとえば、事務員の40%が、Himuroの給与以下の給与を得ていることがわかります。

SELECT job_id, last_name, salary, CUME_DIST() 
   OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist
   FROM employees
   WHERE job_id LIKE 'PU%'
   ORDER BY job_id, last_name, salary, cume_dist;

JOB_ID     LAST_NAME                     SALARY  CUME_DIST
---------- ------------------------- ---------- ----------
PU_CLERK   Baida                           2900         .8
PU_CLERK   Colmenares                      2500         .2
PU_CLERK   Himuro                          2600         .4
PU_CLERK   Khoo                            3100          1
PU_CLERK   Tobias                          2800         .6
PU_MAN     Raphaely                       11000          1

CURRENT_DATE

構文


画像の説明

用途

CURRENT_DATEは、セッション・タイムゾーンの現在の日付をDATEデータ型のグレゴリオ暦の値で戻します。

次の例では、CURRENT_DATEがセッション・タイムゾーンによって異なることを示します。

ALTER SESSION SET TIME_ZONE = '-5:0';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-05:00          29-MAY-2000 13:14:03

ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-08:00          29-MAY-2000 10:14:33

CURRENT_TIMESTAMP

構文


画像の説明

用途

CURRENT_TIMESTAMPは、セッション・タイムゾーンの現在の日付および時刻をTIMESTAMP WITH TIME ZONEデータ型の値で戻します。タイムゾーン・オフセットは、SQLセッションの現在のローカル時刻を反映します。精度の指定を省略した場合のデフォルトは6です。このファンクションとLOCALTIMESTAMPとの違いは、CURRENT_TIMESTAMPは、TIMESTAMP WITH TIME ZONEの値を戻し、LOCALTIMESTAMPTIMESTAMPの値を戻す点です。

オプションの引数では、precisionは、戻される時刻の値の小数秒の精度を指定します。

参照:

「LOCALTIMESTAMP」 

次の例では、CURRENT_TIMESTAMPがセッション・タイムゾーンによって異なることを示します。

ALTER SESSION SET TIME_ZONE = '-5:0';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ---------------------------------------------------
-05:00          04-APR-00 01.17.56.917550 PM -05:00

ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ----------------------------------------------------
-08:00          04-APR-00 10.18.21.366065 AM -08:00

CURRENT_TIMESTAMPで書式マスクを使用する場合は、ファンクションが戻す値と書式マスクを一致させてください。たとえば、次の表の場合を考えます。

CREATE TABLE current_test (col1 TIMESTAMP WITH TIME ZONE);

ファンクションが戻す型のTIME ZONEの部分がマスクに含まれていないため、次の文は正常に実行されません。

INSERT INTO current_test VALUES
  (TO_TIMESTAMP_TZ(CURRENT_TIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));

次の文では、CURRENT_TIMESTAMPの戻り値の型と一致する正しい書式マスクが使用されています。

INSERT INTO current_test VALUES (TO_TIMESTAMP_TZ
    (CURRENT_TIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM TZH:TZM'));

CV

構文


画像の説明

用途

CVファンクションは、SELECT文のmodel_clauseでのみ、かつモデル・ルールの右側でのみ使用できます。戻り値は、ルールの左側から右側に送られたディメンション列またはパーティション列の現在の値です。このファンクションをmodel_clauseで使用するとディメンション列に対する相対索引を作成できます。戻り型は、ディメンション列のデータ型です。引数を指定しない場合、セル参照内のファンクションの相対位置に対応付けられたディメンション列がデフォルトで使用されます。

CVファンクションは、セル参照外でも使用できます。その場合は、dimension_columnが必要です。

参照:

構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。 

次の例では、ディメンション列(マウス・パッドまたはスタンダード・マウス)の1999年および2000年の現在の値が表す製品の売上の合計を、その製品の2001年の売上に割り当てます。

SELECT country, prod, year, s
  FROM sales_view_ref
  MODEL
    PARTITION BY (country)
    DIMENSION BY (prod, year)
    MEASURES (sale s)
    IGNORE NAV
    UNIQUE DIMENSION
    RULES UPSERT SEQUENTIAL ORDER
    (
      s[FOR prod IN ('Mouse Pad', 'Standard Mouse'), 2001] =
        s[CV( ), 1999] + s[CV( ), 2000]
    )
  ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     6679.41
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     3554.76
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     15721.9
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     8900.45
 
16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。


DATAOBJ_TO_PARTITION

構文


画像の説明

用途

DATAOBJ_TO_PARTITIONは、ドメイン索引データの格納に使用するシステム・パーティション表でデータ・メンテナンスまたは問合せ操作を実行するデータ・カートリッジ開発者にのみ役立ちます。DML操作や問合せ操作は、ドメイン索引の実表での対応する操作によってトリガーされます。

このファンクションは、引数として実表の名前と実表のパーティションのパーティションIDを取ります。これらはともに、適切なODCIIndexメソッドによってファンクションに渡されます。ファンクションは、対応するシステムパーティション表のパーティションIDを戻します。このIDは、システム・パーティション表の該当パーティションで操作(DMLまたは問合せ)を実行する際に使用できます。

参照:

このファンクションの使用の詳細および例は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 


DBTIMEZONE

構文


画像の説明

用途

DBTIMEZONEファンクションは、データベース・タイムゾーンの値を戻します。戻り型は、タイムゾーン・オフセット('[+|-]TZH:TZM'という書式の文字列型)またはタイムゾーン地域名です。これは、最近のCREATE DATABASEまたはALTER DATABASE文でユーザーが指定したデータベース・タイムゾーンの値によって異なります。

次の例では、データベース・タイムゾーンがUTCタイムゾーンに設定されていると想定します。

SELECT DBTIMEZONE FROM DUAL;

DBTIME
------
+00:00

DECODE

構文


画像の説明

用途

DECODEファンクションは、exprと各searchの値を1つずつ比較します。exprsearchと等しい場合、Oracle Databaseは対応するresultを戻します。一致する値が見つからない場合は、defaultを戻します。defaultが省略されている場合は、NULLを戻します。

引数は、任意の数値型(NUMBERBINARY_FLOATBINARY_DOUBLE)または文字列型です。

searchresultおよびdefaultの値は、式から導出できます。Oracle Databaseでは、短絡評価を使用します。データベースは、search値のいずれかとexprを比較する前にすべてのsearch値を評価するのではなく、各search値とexprを比較する前にのみ、各search値を評価します。その結果、exprと等しいsearchが見つかると、Oracleはその後のsearchを評価しません。

比較する前に、Oracleはexprと各search値を、最初のsearch値のデータ型に自動的に変換します。Oracleは、戻り値を最初のresultと同じデータ型に自動的に変換します。最初のresultのデータ型がCHARの場合、または最初のresultがNULLの場合、Oracleは戻り値をVARCHAR2データ型の値に変換します。

DECODEファンクションでは、Oracleは2つのNULLを同等とみなします。exprがNULLの場合、Oracleは最初のsearch値のresultもNULLとして戻します。

DECODEファンクションのコンポーネントの最大数は、exprsearchresultdefaultを含めて255です。

参照:

 

この例では、warehouse_idの値をデコードします。warehouse_idが1の場合「Southlake」を、warehouse_idが2の場合は「San Francisco」を戻します。warehouse_idが1、2、3、4のいずれでもない場合、ファンクションは「Non domestic」を戻します。

SELECT product_id,
       DECODE (warehouse_id, 1, 'Southlake', 
                             2, 'San Francisco', 
                             3, 'New Jersey', 
                             4, 'Seattle',
                                'Non domestic') "Location" 
       FROM inventories
       WHERE product_id < 1775
       ORDER BY product_id, "Location";

DECOMPOSE

構文


画像の説明

用途

DECOMPOSEは、Unicodeキャラクタに対してのみ有効です。DECOMPOSEは、任意のデータ型の文字列を引数として取り、入力と同じキャラクタ・セットで分解されたUnicodeの文字列を戻します。たとえば、oウムラウト・コードポイントは、ウムラウト・コードポイントが続く「o」コードポイントとして戻されます。

暗黙的な変換を使用して、CLOBおよびNCLOBの値がサポートされます。charが文字のLOB値の場合、COMPOSE演算の前にVARCHAR値に変換されます。特定の開発環境で、LOB値のサイズがVARCHARのサポートする長さを超える場合、この演算は失敗します。

参照:

  • Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

  • 「COMPOSE」

 

次の例では、文字列「Châteaux」をその要素のコードポイントに分解します。

SELECT DECOMPOSE ('Châteaux') FROM DUAL; 

DECOMPOSE
---------
Cha^teaux


注意:

この例の結果は、ご使用のオペレーティング・システムのキャラクタ・セットによって異なる場合があります。 



DELETEXML

構文


画像の説明

用途

DELETEXMLは、ターゲットXMLのXPath式で一致する単一または複数のノードを削除します。

次の例では、「APPENDCHILDXML」の例で変更したウェアハウスの1つのwarehouse_specから/Ownerノードを削除します。

UPDATE warehouses SET warehouse_spec =
   DELETEXML(warehouse_spec, 
   '/Warehouse/Building/Owner')
   WHERE warehouse_id = 2;

SELECT warehouse_id, warehouse_spec FROM warehouses
   WHERE warehouse_id in (2,3);

        ID WAREHOUSE_SPEC
---------- -----------------------------------
         2 <?xml version="1.0"?>
           <Warehouse>
             <Building>Rented</Building>
             <Area>50000</Area>
             <Docks>1</Docks>
             <DockType>Side load</DockType>
             <WaterAccess>Y</WaterAccess>
             <RailAccess>N</RailAccess>
             <Parking>Lot</Parking>
             <VClearance>12 ft</VClearance>
           </Warehouse>
 
         3 <?xml version="1.0"?>
           <Warehouse>
             <Building>Rented
               <Owner>Grandco</Owner>
               <Owner>ThirdOwner</Owner>
               <Owner>LesserCo</Owner>
             </Building>
             <Area>85700</Area>
             <DockType/>
             <WaterAccess>N</WaterAccess>
             <RailAccess>N</RailAccess>
             <Parking>Street</Parking>
             <VClearance>11.5 ft</VClearance>
           </Warehouse>

DENSE_RANK

集計の構文

dense_rank_aggregate::=

画像の説明

分析の構文

dense_rank_analytic::=

画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

DENSE_RANKは、順序付けされた行のグループ内の行のランクを計算し、そのランクをNUMBERとして戻します。ランクは1から始まる連続した整数です。ランクの最大値は、問合せが戻す一意の数値です。ランクの値は、連続した整数です。ランク付け基準と同じ値を持つ行は、同じランクになります。このファンクションは、上位N番および下位N番のレポートに有効です。

このファンクションは、引数に任意の数値データ型を受け入れ、NUMBERを戻します。

集計の例

次の例では、サンプル表oe.employeesから、給与が15,500ドルであり、歩合が5%の仮想の従業員のランクを計算します。

SELECT DENSE_RANK(15500, .05) WITHIN GROUP 
   (ORDER BY salary DESC, commission_pct) "Dense Rank" 
   FROM employees;

         Dense Rank
-------------------
                  3

分析の例

次の文は、人事部門または購買部門で働くすべての従業員の部門名、従業員名および給与を選択します。その後、この2つの部門それぞれについて、一意の各給与に対するランクを計算します。同じ給与は同じランクになります。この例と、「RANK」の例を比較してください。

SELECT d.department_name, e.last_name, e.salary, DENSE_RANK() 
   OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank
   FROM employees e, departments d
   WHERE e.department_id = d.department_id
   AND d.department_id IN ('30', '40')
   ORDER BY e.last_name, e.salary, d.department_name, drank;

DEPARTMENT_NAME                LAST_NAME                     SALARY      DRANK
c------------------------------ ------------------------- ---------- ----------
Purchasing                     Baida                           2900          4
Purchasing                     Colmenares                      2500          1
Purchasing                     Himuro                          2600          2
Purchasing                     Khoo                            3100          5
Human Resources                Mavris                          6500          1
Purchasing                     Raphaely                       11000          6
Purchasing                     Tobias                          2800          3

DEPTH

構文


画像の説明

用途

DEPTHは、UNDER_PATHおよびEQUALS_PATH条件でのみ使用される補助ファンクションです。このファンクションは、同じ相関変数を持つUNDER_PATH条件によって指定されるパスのレベル数を戻します。

correlation_integerは任意のNUMBER整数です。文に複数の一次条件が含まれている場合に、この補助ファンクションをその一次条件と関連付けるために使用します。1未満の値は1として扱われます。

参照:

「EQUALS_PATH条件」および「UNDER_PATH条件」を参照してください。関連するファンクションについては、「PATH」を参照してください。 

EQUALS_PATHおよびUNDER_PATH条件は、2つの補助ファンクションDEPTHおよびPATHを取ることができます。次に、その2つの補助ファンクションの使用方法を示します。この例では、XML Schemaであるwarehouses.xsd「SQL文でのXMLの使用方法」で作成)が存在することを前提としています。

SELECT PATH(1), DEPTH(2)
   FROM RESOURCE_VIEW
   WHERE UNDER_PATH(res, '/sys/schemas/OE', 1)=1
     AND UNDER_PATH(res, '/sys/schemas/OE', 2)=1;

PATH(1)                                 DEPTH(2)
--------------------------------        --------
/www.example.com                         1

/www.example.com/xwarehouses.xsd         2

DEREF

構文


画像の説明

用途

DEREFは、引数exprのオブジェクト参照を戻します。この場合、exprはオブジェクトにREFを戻す必要があります。問合せでこのファンクションを使用しない場合、次の例で示すとおり、かわりにREFのオブジェクトIDを戻します。

参照:

「MAKE_REF」 

サンプル・スキーマoeには、cust_address_typというオブジェクト型が含まれます。「REF制約の例」では、類似する型cust_address_typ_new、およびその型へのREFである1つの列を含む表を作成します。次の例では、その列に挿入を行う方法、およびDEREFを使用して列から情報を抽出する方法を示します。

INSERT INTO address_table VALUES
   ('1 First', 'G45 EU8', 'Paris', 'CA', 'US');

INSERT INTO customer_addresses
  SELECT 999, REF(a) FROM address_table a;

SELECT address FROM customer_addresses
   ORDER BY address;

ADDRESS
--------------------------------------------------------------------------------
000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE03400400B40DCB1

SELECT DEREF(address) FROM customer_addresses;

DEREF(ADDRESS)(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
--------------------------------------------------------------------------------
CUST_ADDRESS_TYP('1 First', 'G45 EU8', 'Paris', 'CA', 'US')

DUMP

構文


画像の説明

用途

DUMPは、exprのデータ型コード、長さ(バイト単位)および内部表現を含むVARCHAR2値を戻します。戻される結果は、常にデータベース・キャラクタ・セットの文字です。各コードに対応するデータ型については、表2-1「組込みデータ型の概要」を参照してください。

引数return_fmtには戻り値の書式として、次の値のいずれかを指定します。

デフォルトでは、戻り値にキャラクタ・セット情報が含まれません。exprのキャラクタ・セット名を取り出すには、前述の書式のいずれかの値に1000を加えます。たとえば、return_fmtに1008を指定すると、8進表記で結果が戻り、さらにexprのキャラクタ・セット名が得られます。

引数start_positionlengthを組み合せて、内部表現の戻す部分を指定します。デフォルトでは、10進表記で全体の内部表現が戻されます。

exprがNULLの場合はNULLを戻します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、文字列式および列からダンプ情報を抽出する方法を示します。

SELECT DUMP('abc', 1016)
   FROM DUAL;

DUMP('ABC',1016)                          
------------------------------------------ 
Typ=96 Len=3 CharacterSet=WE8DEC: 61,62,63 

SELECT DUMP(last_name, 8, 3, 2) "OCTAL"
   FROM employees
   WHERE last_name = 'Hunold'
   ORDER BY employee_id;

OCTAL
-------------------------------------------------------------------
Typ=1 Len=6: 156,157

SELECT DUMP(last_name, 10, 3, 2) "ASCII"
   FROM employees
   WHERE last_name = 'Hunold'
   ORDER BY employee_id;

ASCII
--------------------------------------------------------------------
Typ=1 Len=6: 110,111


EMPTY_BLOB、EMPTY_CLOB

構文

empty_LOB::=

画像の説明

用途

EMPTY_BLOBおよびEMPTY_CLOBは、LOB変数を初期化したり、INSERTまたはUPDATE文でLOB列または属性をEMPTYに初期化できる空のLOBロケータを戻します。EMPTYとは、LOBは初期化されていても、データが移入されていない状態をいいます。


注意:

空のLOBと、NULLのLOBは、同じではありません。また、空のCLOBと、長さが0(ゼロ)の文字列を含むLOBは、同じではありません。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。 


LOBロケータの制限

このファンクションから戻されるロケータは、DBMS_LOBパッケージまたはOCIへのパラメータとして使用することはできません。

次の例では、サンプル表pm.print_mediaad_photo列をEMPTYに初期化します。

UPDATE print_media SET ad_photo = EMPTY_BLOB();

EXISTSNODE

構文


画像の説明

用途

EXISTSNODEは、指定されたパスを使用してXML文書をトラバースした後にノードが存在するかを判断します。XML文書、およびパスを指定するXPath文字列VARCHAR2を含むXMLTypeインスタンスを引数として指定します。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

namespace_string引数のデフォルトは、ルート要素の名前空間になります。Xpath_stringのサブ要素を参照する場合は、namespace_stringを指定する必要があります。また、これらの引数の両方にwho接頭辞を指定する必要があります。

参照:

namespace_stringの指定例およびwho接頭辞の使用例については、「SQL文でのXMLの使用方法」を参照してください。 

戻り値は、NUMBERです。

次の例では、サンプル表oe.warehouseswarehouse_spec列のXMLパスに/Warehouse/Dockノードが存在するかを判断します。

SELECT warehouse_id, warehouse_name
   FROM warehouses
   WHERE EXISTSNODE(warehouse_spec, '/Warehouse/Docks') = 1
   ORDER BY warehouse_id, warehouse_name;

WAREHOUSE_ID WAREHOUSE_NAME
------------ -----------------------------------
           1 Southlake, Texas
           2 San Francisco
           4 Seattle, Washington

EXP

構文


画像の説明

用途

EXPは、en乗した値(e = 2.71828183 ...)を戻します。このファンクションは、引数と同じ型の値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、eを4乗した値を戻します。

SELECT EXP(4) "e to the 4th power" FROM DUAL;

e to the 4th power
------------------
          54.59815 

EXTRACT(日時)

構文

extract_datetime::=

画像の説明

用途

EXTRACTは、日時式または期間式から、指定された日時フィールドの値を抽出して戻します。exprには、要求されたフィールドと互換性のある日時または期間データ型に評価される任意の式を指定できます。

EXTRACTは、exprをANSI日時データ型として解釈します。たとえば、EXTRACTDATEをレガシーOracle DATEではなく、時刻要素を持たないANSI DATEとして処理します。したがって、DATE値からは、YEARMONTHおよびDAYのみを抽出できます。同様に、TIMESTAMP WITH TIME ZONEデータ型からは、TIMEZONE_HOURおよびTIMEZONE_MINUTEのみを抽出できます。

TIMEZONE_REGIONを抽出する場合、戻り値は、適切なタイムゾーン名を含む文字列です。また、TIMEZONE_ABBR(略称)を抽出する場合、戻り値は、適切な略称を含む文字列です。その他の値を抽出する場合、戻り値はグレゴリオ暦での日時値を表す整数です。タイムゾーン値を持つ日時から抽出する場合、戻り値はUTCです。有効なタイムゾーン名およびそれに対する略称を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューに問合せを実行してください。

このファンクションは、次に示す最初の例のように、非常に大規模な表の日時フィールド値を操作する場合に特に有効です。


注意:

夏時間機能には、タイムゾーン地域名が必要です。地域名は、2つのタイムゾーン・ファイルに格納されます。デフォルトのタイムゾーン・ファイルは、パフォーマンスを最大にするために一般的なタイムゾーンのみの小さなファイルです。タイムゾーンがデフォルトのファイルに存在しない場合は、環境変数ORA_TZFILEを使用して完全な(大きい)ファイルへのパスを指定するまで、夏時間はサポートされません。 


日時フィールドと日時または期間値の式を組み合せると、あいまいな結果になる場合があります。この場合、Oracle Databaseは、UNKNOWNを戻します(詳細は、次の例を参照してください)。

参照:

  • 両方のファイルに含まれるすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

  • datetime_value_exprおよびinterval_value_exprの詳細は、「日時および期間の演算」を参照してください。

  • 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

 

次の例では、oe.orders表から、各月の注文数を戻します。

SELECT EXTRACT(month FROM order_date) "Month",
  COUNT(order_date) "No. of Orders"
  FROM orders
  GROUP BY EXTRACT(month FROM order_date)
  ORDER BY "No. of Orders" DESC;

     Month No. of Orders
---------- -------------
        11            15
         7            14
         6            14
         3            11
         5            10
         9             9
         2             9
         8             7
        10             6
         1             5
        12             4
         4             1
 
12 rows selected.

次の例では、1998年を戻します。

SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL;

EXTRACT(YEARFROMDATE'1998-03-07')
---------------------------------
                             1998

次の例では、サンプル表hr.employeesから、1998以降に雇用されたすべての従業員を選択します。

SELECT last_name, employee_id, hire_date
   FROM employees
   WHERE EXTRACT(YEAR FROM
   TO_DATE(hire_date, 'DD-MON-RR')) > 1998
   ORDER BY hire_date;

LAST_NAME                 EMPLOYEE_ID HIRE_DATE
------------------------- ----------- ---------
Landry                            127 14-JAN-99
Lorentz                           107 07-FEB-99
Cabrio                            187 07-FEB-99
. . .

次の例では、結果があいまいになるため、OracleはUNKNOWNを戻します。

SELECT EXTRACT(TIMEZONE_REGION 
      FROM TIMESTAMP '1999-01-01 10:00:00 -08:00')
   FROM DUAL;

EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00')
----------------------------------------------------------------
UNKNOWN

タイムゾーン数値オフセットが式に指定され、その数値オフセットが複数のタイムゾーン地域をマップする場合、結果があいまいになります。


EXTRACT(XML)

構文

extract_xml::=

画像の説明

用途

EXTRACT(XML)は、EXISTSNODEファンクションに似ています。VARCHAR2のXPath文字列を適用し、XMLのフラグメントを含むXMLTypeインスタンスを戻します。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。処理しているXMLでネームスペース接頭辞が使用される場合、オプションのnamespace_stringが必要です。この引数は、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

次の例では、サンプル表oe.warehouseswarehouse_spec列のXMLパスの/Warehouse/Dockノードの値を抽出します。

SELECT warehouse_name, EXTRACT(warehouse_spec, '/Warehouse/Docks')
   "Number of Docks"
   FROM warehouses
   WHERE warehouse_spec IS NOT NULL
   ORDER BY warehouse_name, "Number of Docks";

WAREHOUSE_NAME            Number of Docks
------------------------- -------------------------
New Jersey
San Francisco             <Docks>1</Docks>
Seattle, Washington       <Docks>3</Docks>
Southlake, Texas          <Docks>2</Docks>

この例と、XMLのフラグメントのスカラー値を戻す、「EXTRACTVALUE」の例を比較してみてください。


EXTRACTVALUE

構文


画像の説明

EXTRACTVALUEは、引数としてXMLTypeインスタンスとXPath式を取り、結果として得られるノードのスカラー値を戻します。結果はシングルノードであり、テキスト・ノード、属性または要素のいずれかである必要があります。結果が要素である場合、その要素はシングル・テキスト・ノードを子ノードとして持つ必要があり、このファンクションが戻す値は、その子ノードの値になります。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

指定されたXPathが複数の子ノードを持つノードを指す場合、または指されたノードが非テキスト・ノードの子を持つ場合は、エラーが戻されます。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(OracleがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

XML Schemaに基づくドキュメントで戻り値の型が推測できる場合は、適切な型のスカラー値が戻ります。その他の場合は、VARCHAR2型の結果が戻ります。XML Schemaに基づかないドキュメントの場合、戻り値は常にVARCHAR2です。

次の例では、入力として、「EXTRACT(XML)」の例と同じ引数を取ります。このファンクションは、EXTRACTファンクションとは異なり、XMLのフラグメントを戻すのではなく、XMLのフラグメントのスカラー値を戻します。

SELECT warehouse_name, 
   EXTRACTVALUE(e.warehouse_spec, '/Warehouse/Docks')
   "Docks"
   FROM warehouses e 
   WHERE warehouse_spec IS NOT NULL;

WAREHOUSE_NAME       Docks
-------------------- ------------
Southlake, Texas     2
San Francisco        1
New Jersey
Seattle, Washington  3

FEATURE_ID

構文


画像の説明

mining_attribute_clause:=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成した特徴抽出モデルで使用するためのものです。このファンクションは、行内で最も高い数値を持つ特徴の識別子をOracleのNUMBERで戻します。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、データセット内の特徴と、それに対応する顧客の件数を示します。

この例と前提条件のデータ・マイニング操作(nmf_sh_sampleモデルおよびnmf_sh_sample_apply_preparedビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmnmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT FEATURE_ID(nmf_sh_sample USING *) AS feat, COUNT(*) AS cnt
  FROM nmf_sh_sample_apply_prepared
GROUP BY FEATURE_ID(nmf_sh_sample USING *)
ORDER BY cnt DESC;

      FEAT        CNT
---------- ----------
         7       1443
         2         49
         3          6
         1          1
         6          1

FEATURE_SET

構文


画像の説明

mining_attribute_clause:=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成した特徴抽出モデルで使用するためのものです。このファンクションは、有効な特徴を含むオブジェクトのVARRAYを戻します。VARRAYの各オブジェクトは、特徴IDと特徴値を含むスカラー値の組です。オブジェクト・フィールドには、FEATURE_IDVALUEの名前が付き、両方ともOracleのNUMBERになります。

オプションのtopN引数は、特徴セットを上位Nの値のいずれかを持つ特徴セットに制限する正の整数です。N番目の値に同順位がある場合でも、N個の値のみが戻されます。この引数を指定しない場合、このファンクションはすべての特徴を戻します。

オプションのcutoff引数は、戻される特徴を、指定したカットオフ以上の特徴値を持つ特徴のみに制限します。cutoffのみをフィルタ処理するには、NULLtopNに指定し、必要なカットオフ値をcutoffに指定します。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、指定した顧客レコードに対応する上位の特徴を示し(一致する品質を基準)、各特徴に上位の属性を決定します(0.25を超える係数を基準)。

この例と前提条件のデータ・マイニング操作(モデル、ビューおよび型の作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmkmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

WITH
feat_tab AS (
SELECT F.feature_id fid,
       A.attribute_name attr,
       TO_CHAR(A.attribute_value) val,
       A.coefficient coeff
  FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF('nmf_sh_sample')) F,
       TABLE(F.attribute_set) A
 WHERE A.coefficient > 0.25
),
feat AS (
SELECT fid,
       CAST(COLLECT(Featattr(attr, val, coeff))
         AS Featattrs) f_attrs
  FROM feat_tab
GROUP BY fid
),
cust_10_features AS (
SELECT T.cust_id, S.feature_id, S.value
  FROM (SELECT cust_id, FEATURE_SET(nmf_sh_sample, 10 USING *) pset
          FROM nmf_sh_sample_apply_prepared
         WHERE cust_id = 100002) T,
       TABLE(T.pset) S
)
SELECT A.value, A.feature_id fid,
       B.attr, B.val, B.coeff
  FROM cust_10_features A,
       (SELECT T.fid, F.*
          FROM feat T,
               TABLE(T.f_attrs) F) B
 WHERE A.feature_id = B.fid
ORDER BY A.value DESC, A.feature_id ASC, coeff DESC, attr ASC, val ASC;

   VALUE  FID ATTR                      VAL                    COEFF
-------- ---- ------------------------- -------------------- -------
  6.8409    7 YRS_RESIDENCE                                   1.3879
  6.8409    7 BOOKKEEPING_APPLICATION                          .4388
  6.8409    7 CUST_GENDER               M                      .2956
  6.8409    7 COUNTRY_NAME              United States of Ame   .2848
                                        rica
 
  6.4975    3 YRS_RESIDENCE                                   1.2668
  6.4975    3 BOOKKEEPING_APPLICATION                          .3465
  6.4975    3 COUNTRY_NAME              United States of Ame   .2927
                                        rica
 
  6.4886    2 YRS_RESIDENCE                                   1.3285
  6.4886    2 CUST_GENDER               M                      .2819
  6.4886    2 PRINTER_SUPPLIES                                 .2704
  6.3953    4 YRS_RESIDENCE                                   1.2931
  5.9640    6 YRS_RESIDENCE                                   1.1585
  5.9640    6 HOME_THEATER_PACKAGE                             .2576
  5.2424    5 YRS_RESIDENCE                                   1.0067
  2.4714    8 YRS_RESIDENCE                                    .3297
  2.3559    1 YRS_RESIDENCE                                    .2768
  2.3559    1 FLAT_PANEL_MONITOR                               .2593
 
17 rows selected.

FEATURE_VALUE

構文


画像の説明

mining_attribute_clause:=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成した特徴抽出モデルで使用するためのものです。このファンクションは、指定した特徴の値を戻します。feature_id引数を指定しない場合、このファンクションは最も高い特徴値を戻します。この形式とFEATURE_IDファンクションを組み合せて使用すると、特徴と値の最大の組合せを取得できます。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、特徴3に対応する顧客を、一致する品質の順序で示します。

この例と前提条件のデータ・マイニング操作(モデルおよびビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmkmdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT *
  FROM (SELECT cust_id, FEATURE_VALUE(nmf_sh_sample, 3 USING *) match_quality
          FROM nmf_sh_sample_apply_prepared
        ORDER BY match_quality DESC)
 WHERE ROWNUM < 11;

   CUST_ID MATCH_QUALITY
---------- -------------
    100210    19.4101627
    100962    15.2482251
    101151    14.5685197
    101499    14.4186292
    100363    14.4037396
    100372    14.3335148
    100982    14.1716545
    101039    14.1079914
    100759    14.0913761
    100953    14.0799737
 
10 rows selected.

FIRST

構文

first::=

画像の説明

参照:

ORDER BY句およびOVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

FIRSTファンクションとLASTファンクションは類似しています。両方のファンクションとも、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作する集計ファンクションおよび分析ファンクションです。1つの行のみがFIRSTまたはLASTとしてランク付けされている場合、集計は、1つの要素のみを持つセットを操作します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

ソートされたグループの最初または最後の行の値が必要であり、その値がソート・キーでない場合、FIRSTおよびLASTファンクションは、自己結合またはビューの必要性を排除し、パフォーマンスを向上させます。

OVER句を指定すると、FIRSTおよびLASTファンクションを分析ファンクションとして使用できます。OVER句のうち、query_partitioning_clauseの部分のみがこれらのファンクションで有効です。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。「LAST」も参照してください。 

集計の例

次の例では、サンプル表hr.employeesの各部門で、歩合が最低である従業員の中での最低給与、および歩合が最高の従業員の中での最高給与を戻します。

SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) "Best"
   FROM employees
   GROUP BY department_id
   ORDER BY department_id, "Worst", "Best";

DEPARTMENT_ID      Worst       Best
------------- ---------- ----------
           10       4400       4400
           20       6000      13000
           30       2500      11000
           40       6500       6500
           50       2100       8200
           60       4200       9000
           70      10000      10000
           80       6100      14000
           90      17000      24000
          100       6900      12000
          110       8300      12000
                    7000       7000

分析の例

次の例では、前述の例と同じ計算をしますが、当該部門の各従業員の結果を戻します。

SELECT last_name, department_id, salary,
   MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
      OVER (PARTITION BY department_id) "Worst",
   MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
      OVER (PARTITION BY department_id) "Best"
    FROM employees
    ORDER BY department_id, salary;

LAST_NAME           DEPARTMENT_ID     SALARY      Worst       Best
------------------- ------------- ---------- ---------- ----------
Whalen                         10       4400       4400       4400
Fay                            20       6000       6000      13000
Hartstein                      20      13000       6000      13000
. . .
Gietz                         110       8300       8300      12000
Higgins                       110      12000       8300      12000
Grant                                   7000       7000       7000

FIRST_VALUE

構文


画像の説明

参照:

構文、セマンティクス、制限事項およびexprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

FIRST_VALUEは分析ファンクションです。これは、順序付けられた値の集合にある最初の値を戻します。集合内の最初の値がNULLの場合、IGNORE NULLSを指定していないかぎり、ファンクションはNULLを戻します。この設定は、データの稠密化に役立ちます。IGNORE NULLSを指定すると、FIRST_VALUEは集合内の最初のNULLではない値を戻します。すべての値がNULLの場合はNULLを戻します。データの稠密化の例は、「パーティション化された外部結合の使用例:」を参照してください。

exprには、FIRST_VALUEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

次の例では、部門90の各従業員について、その部門で給与が一番少ない従業員の名前を選択します。

SELECT department_id, last_name, salary, FIRST_VALUE(last_name)
  OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS lowest_sal
  FROM (SELECT * FROM employees WHERE department_id = 90
    ORDER BY employee_id)
  ORDER BY department_id, last_name, salary, lowest_sal;

DEPARTMENT_ID LAST_NAME                     SALARY LOWEST_SAL
------------- ------------------------- ---------- -------------------------
           90 De Haan                        17000 Kochhar
           90 King                           24000 Kochhar
           90 Kochhar                        17000 Kochhar

例では、FIRST_VALUEファンクションの非決定的な性質が示されています。KochharとDe Haanの給与は同じであるため、Kochharの次の行にDe Haanがあります。Kochharが最初に表示されているのは、副問合せが戻す行がemployee_idで順序付けられているためです。ただし、副問合せが戻す行がemployee_idで降順に順序付けられている場合は、次の例に示すとおり、ファンクションは異なる値を戻します。

SELECT department_id, last_name, salary, FIRST_VALUE(last_name)
  OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) as fv
    FROM (SELECT * FROM employees WHERE department_id = 90
      ORDER by employee_id DESC)
  ORDER BY department_id, last_name, salary, fv;

DEPARTMENT_ID LAST_NAME                     SALARY FV
------------- ------------------------- ---------- -------------------------
           90 De Haan                        17000 De Haan
           90 King                           24000 De Haan
           90 Kochhar                        17000 De Haan

次の例では、一意キーで順序付けることによって、FIRST_VALUEファンクションを決定的にする方法を示します。

SELECT department_id, last_name, salary, hire_date, 
   FIRST_VALUE(last_name) OVER
   (ORDER BY salary ASC, hire_date ROWS UNBOUNDED PRECEDING) AS fv
   FROM (SELECT * FROM employees 
   WHERE department_id = 90 ORDER BY employee_id DESC)
   ORDER BY department_id, last_name, salary, hire_date;

DEPARTMENT_ID LAST_NAME           SALARY HIRE_DATE FV
------------- --------------- ---------- --------- -------------------------
           90 De Haan              17000 13-JAN-93 Kochhar
           90 King                 24000 17-JUN-87 Kochhar
           90 Kochhar              17000 21-SEP-89 Kochhar

FLOOR

構文


画像の説明

用途

FLOORn以下の最大整数を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、15.7以下である最大の整数を戻します。

SELECT FLOOR(15.7) "Floor" FROM DUAL;

     Floor
----------
        15

FROM_TZ

構文


画像の説明

用途

FROM_TZファンクションは、タイムスタンプ値およびタイムゾーンをTIMESTAMP WITH TIME ZONE値に変換します。time_zone_valueは、'TZH:TZM'書式の文字列、またはオプションのTZD書式を持つTZR書式で文字列を戻す文字式です。

次の例では、タイムスタンプ値をTIMESTAMP WITH TIME ZONEに戻します。

SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '3:00') 
   FROM DUAL;

FROM_TZ(TIMESTAMP'2000-03-2808:00:00','3:00')
---------------------------------------------------------------
28-MAR-00 08.00.00 AM +03:00

GREATEST

構文


画像の説明

用途

GREATESTは、1つ以上の式のリストの最大値を戻します。Oracle Databaseは、最初のexprを使用して戻り型を判断します。最初のexprが数値である場合、Oracleは、数値の優先順位が最も高い引数を判断し、比較の前に残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。最初のexprが数値ではない場合、比較の前に、2番目以降の各exprが最初のexprのデータ型に暗黙的に変換されます。

Oracle Databaseは、非空白埋め比較セマンティクスを使用して各exprを比較します。比較では、デフォルトの場合はバイナリが使用され、NLS_COMPパラメータがLINGUISTICに設定され、NLS_SORTパラメータにBINARY以外の設定がある場合は言語が使用されます。文字の比較は、データベース・キャラクタ・セットの文字の数値コードに基づいて行われます。また、文字ごとではなく、一連のバイトとして扱われる文字列全体で行われます。このファンクションによって戻される値が文字データの場合、そのデータ型は、最初のexprが文字データ型の場合はVARCHAR2、最初のexprが各国語キャラクタ・データ型の場合はNVARCHAR2になります。

参照:

 

次の文では、最大値を持つ文字列を検索します。

SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD')
   "Greatest" FROM DUAL;
 
Greatest
--------
HARRY

GROUP_ID

構文


画像の説明

用途

GROUP_IDは、GROUP BY指定の結果から、重複するグループを識別します。このファンクションは、問合せ結果から重複グループを除外する場合に有効です。このファンクションは、重複グループを一意に識別するために、OracleのNUMBER値を戻します。このファンクションは、1つのGROUP BY句を含むSELECT文のみに適用できます。

特定のグループ化でn個の重複が存在する場合、GROUP_IDは0〜n-1の範囲の数値を戻します。

次の例では、サンプル表sh.countriesおよびsh.salesの問合せの結果、重複するco.country_regionグループ化に値1を割り当てます。

SELECT co.country_region, co.country_subregion,
   SUM(s.amount_sold) "Revenue",
   GROUP_ID() g
FROM sales s, customers c, countries co
WHERE s.cust_id = c.cust_id AND
   c.country_id = co.country_id AND
   s.time_id = '1-JAN-00' AND
   co.country_region IN ('Americas', 'Europe')
GROUP BY co.country_region,
   ROLLUP (co.country_region, co.country_subregion)
ORDER BY co.country_region, co.country_subregion, "Revenue", g;

COUNTRY_REGION       COUNTRY_SUBREGION                 Revenue          G
-------------------- ------------------------------ ---------- ----------
Americas             Northern America                    944.6          0
Americas                                                 944.6          0
Americas                                                 944.6          1
Europe               Western Europe                     566.39          0
Europe                                                  566.39          0
Europe                                                  566.39          1

GROUP_IDが1より小さい行のみを戻すには、文の最後に次のHAVING句を追加します。

HAVING GROUP_ID() < 1

GROUPING

構文


画像の説明

用途

GROUPINGは、通常のグループ化された行と超集合行を区別します。ROLLUPCUBEなどのGROUP BYの拡張機能は、すべての値の集合がNULLで表される超集合行を生成します。GROUPINGファンクションを使用すると、通常の行に含まれるNULLと超集合行ですべての値の集合を表すNULLを区別できます。

GROUPINGファンクションのexprは、GROUP BY句の式のいずれかと一致する必要があります。行のexprの値がすべての値の集合を表すNULLの場合、このファンクションは1の値を戻します。それ以外の場合は、0(ゼロ)を戻します。GROUPINGファンクションは、OracleのNUMBER値を戻します。これらの用語の詳細は、「SELECT」の「group_by_clause」を参照してください。

次の例では、サンプル表hr.departmentsおよびhr.employeesで、GROUPINGファンクションが1(表の通常の行ではなく超集合行)を戻す場合、それ以外の場合に表示されるNULLのかわりに、文字列「All Jobs」が「JOB」列に表示されます。

SELECT 
   DECODE(GROUPING(department_name), 1, 'All Departments', department_name) AS 
department,
   DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job,
   COUNT(*) "Total Empl", 
   AVG(salary) * 12 "Average Sal"
FROM employees e, departments d
WHERE d.department_id = e.department_id
GROUP BY ROLLUP (department_name, job_id)
ORDER BY department, job, "Total Empl", "Average Sal";

DEPARTMENT                     JOB        Total Empl Average Sal
------------------------------ ---------- ---------- -----------
Accounting                     AC_ACCOUNT          1       99600
Accounting                     AC_MGR              1      144000
Accounting                     All Jobs            2      121800
Administration                 AD_ASST             1       52800
Administration                 All Jobs            1       52800
All Departments                All Jobs          106  77479.2453
Executive                      AD_PRES             1      288000
Executive                      AD_VP               2      204000
Executive                      All Jobs            3      232000
Finance                        All Jobs            6      103200
Finance                        FI_ACCOUNT          5       95040
. . .

GROUPING_ID

構文


画像の説明

用途

GROUPING_IDは、行に関連するGROUPINGビット・ベクトルに対応する数値を戻します。GROUPING_IDは、ROLLUPCUBEなど、GROUP BYの拡張機能およびGROUPINGファンクションを含むSELECT文にのみ適用できます。多くのGROUP BY式を含む問合せでは、多くのGROUPINGファンクションを必要とする特定の行のGROUP BYレベルを指定するため、非常に複雑なSQLになります。GROUPING_IDは、このような場合に有効です。

GROUPING_IDは、複数のGROUPINGファンクションの結果をビット・ベクトル(1と0を組み合せた文字列)に連結したものと同じです。GROUPING_IDを使用すると、複数のGROUPINGファンクションを使用する必要がなくなり、行のフィルタ条件の表記が簡単になります。GROUPING_IDを使用すると、要求する行が単一の条件(GROUPING_ID = n)によって識別されるため、行のフィルタ処理が簡単になります。このファンクションは、1つの表に複数のレベルの集計を格納する場合に、特に有効です。

次の例では、サンプル表sh.salesの問合せからグループ化IDを抽出する方法を示します。

SELECT channel_id, promo_id, sum(amount_sold) s_sales,
   GROUPING(channel_id) gc,
   GROUPING(promo_id) gp,
   GROUPING_ID(channel_id, promo_id) gcp,
   GROUPING_ID(promo_id, channel_id) gpc
   FROM sales
   WHERE promo_id > 496
   GROUP BY CUBE(channel_id, promo_id)
   ORDER BY channel_id, promo_id, s_sales, gc;
 
CHANNEL_ID   PROMO_ID    S_SALES         GC         GP        GCP        GPC
---------- ---------- ---------- ---------- ---------- ---------- ----------
         2        999 25797563.2          0          0          0          0
         2            25797563.2          0          1          1          2
         3        999 55336945.1          0          0          0          0
         3            55336945.1          0          1          1          2
         4        999 13370012.5          0          0          0          0
         4            13370012.5          0          1          1          2
                  999 94504520.8          1          0          2          1
                      94504520.8          1          1          3          3

HEXTORAW

構文


画像の説明

用途

HEXTORAWは、CHARVARCHAR2NCHARまたはNVARCHAR2キャラクタ・セットで16進数を含むcharをRAW値に変換します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、RAW列を含む簡単な表を作成し、RAWに変換された16進数値を挿入します。

CREATE TABLE test (raw_col RAW(10));

INSERT INTO test VALUES (HEXTORAW('7D'));

参照:

「RAWデータ型とLONG RAWデータ型」および「RAWTOHEX」を参照してください。 


INITCAP

構文


画像の説明

用途

INITCAPは、各単語の最初の文字を大文字、残りの文字を小文字にしてcharを戻します。単語は空白または英数字以外の文字で区切ります。

charは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義したバイナリ・マッピングに基づいて先頭文字の形式を設定します。大文字と小文字の区別については、「NLS_INITCAP」を参照してください。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、文字列にある各単語を大文字で始めます。

SELECT INITCAP('the soap') "Capitals" FROM DUAL; 

Capitals
---------
The Soap

INSERTCHILDXML

構文


画像の説明

用途

INSERTCHILDXMLは、ユーザー指定の値を、XPath式で指定したノードのターゲットXMLに挿入します。このファンクションと「INSERTXMLBEFORE」を比較してください。

参照:

このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 

次の例では、2番目の/Ownerノードを、「APPENDCHILDXML」の例で更新したウェアハウスの1つのwarehouse_specに追加します。

UPDATE warehouses SET warehouse_spec =
   INSERTCHILDXML(warehouse_spec,
   '/Warehouse/Building', 'Owner',
   XMLType('<Owner>LesserCo</Owner>'))
   WHERE warehouse_id = 3;

SELECT warehouse_spec FROM warehouses
   WHERE warehouse_id = 3;

WAREHOUSE_SPEC
----------------------------------------------------------------------------
<?xml version="1.0"?>
<Warehouse>
  <Building>Rented
    <Owner>Grandco</Owner>
    <Owner>LesserCo</Owner>
  </Building>
  <Area>85700</Area>
  <DockType/>
  <WaterAccess>N</WaterAccess>
  <RailAccess>N</RailAccess>
  <Parking>Street</Parking>
  <VClearance>11.5 ft</VClearance>
</Warehouse>

INSERTCHILDXMLAFTER

構文


画像の説明

用途

INSERTXMLCHILDAFTERは、1つ以上のコレクション要素をターゲット親要素の子として挿入します。各ターゲットは、指定された既存のコレクション要素の直後に挿入されます。挿入の対象となる既存のXML文書は、スキーマベースまたは非スキーマベースにすることができます。

このファンクション、その使用方法および例の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの後に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses SET warehouse_spec =
   INSERTCHILDXMLAFTER(warehouse_spec,
   '/Warehouse/Building','Owner[2]',
   XMLType('<Owner>ThirdOwner</Owner>'))
   WHERE warehouse_id = 3;

SELECT warehouse_name, EXTRACT(warehouse_spec, 
   '/Warehouse/Building/Owner') "Owners"
   FROM warehouses
   WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>LesserCo</Owner>
                                    <Owner>GrandCo</Owner>
                                    <Owner>ThirdOwner</Owner>

INSERTCHILDXMLBEFORE

構文


画像の説明

用途

INSERTXMLCHILDBEFOREは、1つ以上のコレクション要素をターゲット親要素の子として挿入します。各ターゲットは、指定された既存のコレクション要素の直前に挿入されます。挿入の対象となる既存のXML文書は、スキーマベースまたは非スキーマベースにすることができます。

このファンクション、その使用方法および例の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの前に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses SET warehouse_spec =
   INSERTCHILDXMLBEFORE(warehouse_spec,
   '/Warehouse/Building','Owner[2]',
   XMLType('<Owner>ThirdOwner</Owner>'))
   WHERE warehouse_id = 3;

SELECT warehouse_name, EXTRACT(warehouse_spec, 
   '/Warehouse/Building/Owner') "Owners"
   FROM warehouses
   WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>LesserCo</Owner>
                                    <Owner>ThirdOwner</Owner>
                                    <Owner>GrandCo</Owner>

INSERTXMLAFTER

構文


画像の説明

用途

INSERTXMLAFTERは、属性のノードではないターゲット・ノードの直後に任意の種類の1つ以上のノードを挿入します。挿入の対象となるXML文書は、スキーマベースまたは非スキーマベースにすることができます。このファンクションはinsertXMLbeforeと似ていますが、ターゲット・ノードの前ではなく後に挿入します。

このファンクション、その使用方法および例の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの後に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses SET warehouse_spec =
   INSERTXMLAFTER(warehouse_spec,
   '/Warehouse/Building/Owner[1]',
   XMLType('<Owner>SecondOwner</Owner>'))
   WHERE warehouse_id = 3;

SELECT warehouse_name, EXTRACT(warehouse_spec, 
   '/Warehouse/Building/Owner') "Owners"
   FROM warehouses
   WHERE warehouse_id = 3;

INSERTXMLBEFORE

構文


画像の説明

用途

INSERTXMLBEFOREは、ユーザー指定の値を、XPath式で指定したノードの前のターゲットXMLに挿入します。 このファンクションはINSERTXMLAFTERと似ていますが、ターゲット・ノードの後ではなく前に挿入します。このファンクションと「INSERTCHILDXML」を比較してください。

次の例は、「INSERTCHILDXML」の例と似ていますが、この例では、「INSERTCHILDXML」の例で追加した/Ownerノードの前に、3番目の/Ownerノードを追加します。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses SET warehouse_spec =
   INSERTXMLBEFORE(warehouse_spec,
   '/Warehouse/Building/Owner[2]',
   XMLType('<Owner>ThirdOwner</Owner>'))
   WHERE warehouse_id = 3;

SELECT warehouse_name, EXTRACT(warehouse_spec, 
   '/Warehouse/Building/Owner') "Owners"
   FROM warehouses
   WHERE warehouse_id = 3;

Name         Owners
------------ --------------------------------------------------------------------
New Jersey <Owner>Grandco</Owner>
           <Owner>ThirdOwner</Owner>
           <Owner>LesserCo</Owner>

INSTR

構文


画像の説明

用途

INSTRファンクションは、stringsubstringを検索します。このファンクションは、最初に現れた文字stringの位置を示す整数を戻します。INSTRは、入力キャラクタ・セットによって定義された文字を使用して、文字列を算出します。INSTRBは、文字のかわりにバイトを使用します。INSTRCは、完全なUnicodeキャラクタを使用します。INSTR2は、UCS2コードポイントを使用します。INSTR4は、UCS4コードポイントを使用します。

stringおよびsubstringは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻り値のデータ型はNUMBERです。

positionおよびoccurrenceは、NUMBERデータ型か、または暗黙的にNUMBERに変換可能な任意のデータ型で、整数に変換されるものである必要があります。positionおよびoccurrenceのデフォルト値は1です。この場合、Oracleはstringの最初の文字から検索を開始します。検索対象はsubstringが最初に現れる位置です。戻り値は、positionの値にかかわらず、stringの先頭に関係し、文字で表されます。検索が失敗した(stringposition番目の文字の後にsubstringoccurrence回現れない)場合、戻り値は0となります。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、文字列CORPORATE FLOORで文字列ORの検索を3番目の文字から開始します。文字列CORPORATE FLOORで2回目に現れる「OR」の開始位置を戻します。

SELECT INSTR('CORPORATE FLOOR','OR', 3, 2)
  "Instring" FROM DUAL;
 
  Instring
----------
        14

次の例では、最後の文字から、最後から3番目の文字まで、つまりFLOORの最初のOまで逆方向にカウントします。次に、2回目に現れる「OR」を逆方向に検索し、2回目に現れるこの文字列が、検索文字列の2番目の文字で始まることを認識します。

SELECT INSTR('CORPORATE FLOOR','OR', -3, 2)
"Reversed Instring"
     FROM DUAL;
 
Reversed Instring
-----------------
               2

次の例では、データベース・キャラクタ・セットがダブルバイトの場合を想定しています。

SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes"
   FROM DUAL;

Instring in bytes
-----------------
               27

ITERATION_NUMBER

構文


画像の説明

用途

ITERATION_NUMBERファンクションは、SELECT文のmodel_clauseにのみ指定でき、model_rules_clauseITERATE(number)が指定されている場合にのみ使用できます。このファンクションは、モデル・ルールに従って完了した反復を示す整数を戻します。最初の反復では0(ゼロ)を戻します。2回目以降の各反復では、iteration_numberに1を足した整数を戻します。

参照:

構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。 

次の例では、1998年および1999年のマウス・パッドの売上を、それぞれ2001年および2002年のマウス・パッドの売上に割り当てます。

SELECT country, prod, year, s
  FROM sales_view_ref
  MODEL
    PARTITION BY (country)
    DIMENSION BY (prod, year)
    MEASURES (sale s)
    IGNORE NAV
    UNIQUE DIMENSION
    RULES UPSERT SEQUENTIAL ORDER ITERATE(2)
      (
        s['Mouse Pad', 2001 + ITERATION_NUMBER] =
          s['Mouse Pad', 1998 + ITERATION_NUMBER]
      )
  ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     2509.42
France        Mouse Pad                                    2002     3678.69
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     5827.87
Germany       Mouse Pad                                    2002     8346.44
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13
 
18 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。


LAG

構文


画像の説明

参照:

構文、セマンティクス、制限事項およびvalue_exprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

LAGは分析ファンクションです。これは、自己結合せずに、表の1つ以上の行へ同時アクセスを行います。問合せから戻される一連の行およびカーソル位置を指定すると、LAGは、その位置より前にある指定された物理オフセットにある行へアクセスします。

offsetを指定しない場合、デフォルト値は1です。オフセットがウィンドウの有効範囲を超えた場合、オプションのdefault値が戻されます。defaultを指定しない場合、デフォルトはNULLです。

value_exprには、LAGまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をvalue_exprで使用できます。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「LEAD」も参照してください。 

次の例では、employees表の各販売員について、その販売員の直前に雇用された従業員の給与を示します。

SELECT last_name, hire_date, salary,
   LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
   FROM employees
   WHERE job_id = 'PU_CLERK'
   ORDER BY last_name, hire_date, salary, prev_sal;
   
LAST_NAME                 HIRE_DATE     SALARY   PREV_SAL
------------------------- --------- ---------- ----------
Baida                     24-DEC-97       2900       2800
Colmenares                10-AUG-99       2500       2600
Himuro                    15-NOV-98       2600       2900
Khoo                      18-MAY-95       3100          0
Tobias                    24-JUL-97       2800       3100

LAST

構文

last::=

画像の説明

参照:

query_partitioning_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

FIRSTファンクションとLASTファンクションは類似しています。両方のファンクションとも、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作する集計ファンクションおよび分析ファンクションです。1つの行のみがFIRSTまたはLASTとしてランク付けされている場合、集計は、1つの要素のみを持つセットを操作します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

このファンクションの詳細および使用例は、「FIRST」を参照してください。


LAST_DAY

構文


画像の説明

用途

LAST_DAYは、dateを含む月の最終日の日付を戻します。月の最終日は、セッション・パラメータNLS_CALENDARによって定義されます。戻り型は、dateのデータ型に関係なく常にDATEです。

次の文は、現在の月の残りの日数を確認します。

SELECT SYSDATE,
   LAST_DAY(SYSDATE) "Last",
   LAST_DAY(SYSDATE) - SYSDATE "Days Left"
   FROM DUAL;
 
SYSDATE   Last       Days Left
--------- --------- ----------
30-MAY-01 31-MAY-01          1

次の例では、各従業員の雇用開始日に5か月を加えて、評価日付を戻します。

SELECT last_name, hire_date, TO_CHAR(
   ADD_MONTHS(LAST_DAY(hire_date), 5)) "Eval Date"
   FROM employees;

LAST_NAME                 HIRE_DATE Eval Date
------------------------- --------- ---------
King                      17-JUN-87 30-NOV-87
Kochhar                   21-SEP-89 28-FEB-90
De Haan                   13-JAN-93 30-JUN-93
Hunold                    03-JAN-90 30-JUN-90
Ernst                     21-MAY-91 31-OCT-91
Austin                    25-JUN-97 30-NOV-97
Pataballa                 05-FEB-98 31-JUL-98
Lorentz                   07-FEB-99 31-JUL-99
. . .

LAST_VALUE

構文


画像の説明

参照:

構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

LAST_VALUEは分析ファンクションです。これは、順序付けられた値の集合にある最後の値を戻します。集合内の最後の値がNULLの場合、IGNORE NULLSを指定していないかぎり、ファンクションはNULLを戻します。この設定は、データの稠密化に役立ちます。IGNORE NULLSを指定すると、LAST_VALUEは集合内の最初のNULLではない値を戻します。すべての値がNULLの場合はNULLを戻します。データの稠密化の例は、「パーティション化された外部結合の使用例:」を参照してください。

exprには、LAST_VALUEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

analytic_clausewindowing_clauseを省略した場合、デフォルトでRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。ウィンドウの最後の値はウィンドウの下部にあり、修復されないため、このデフォルトは予期しない値を戻す場合があります。変更は、現行の行の変更として保持されます。正しい結果を得るには、windowing_clauseRANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGとして指定します。または、windowing_clauseRANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWINGとして指定することもできます。

次の例では、給与が一番高い従業員の雇用開始日を各行に戻します。

SELECT last_name, salary, hire_date, LAST_VALUE(hire_date) OVER
   (ORDER BY salary 
   ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees WHERE department_id = 90
   ORDER BY hire_date)
ORDER BY last_name, salary, hire_date, lv;

LAST_NAME           SALARY HIRE_DATE LV
--------------- ---------- --------- ---------
De Haan              17000 13-JAN-93 17-JUN-87
King                 24000 17-JUN-87 17-JUN-87
Kochhar              17000 21-SEP-89 17-JUN-87

この例では、LAST_VALUEファンクションの非決定的な性質を示しています。KochharとDe Haanの給与は同じであるため、Kochharの次の行にDe Haanがあります。Kochharが最初に表示されているのは、副問合せの行がhire_dateで順序付けられているためです。ただし、行がhire_dateで降順に順序付けられている場合は、次の例に示すとおり、ファンクションは異なる値を戻します。

SELECT last_name, salary, hire_date, LAST_VALUE(hire_date) OVER
   (ORDER BY salary 
   ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees WHERE department_id = 90 
   ORDER BY hire_date DESC)
ORDER BY last_name, salary, hire_datea, lv;

LAST_NAME           SALARY HIRE_DATE LV
--------------- ---------- --------- ---------
De Haan              17000 13-JAN-93 17-JUN-87
King                 24000 17-JUN-87 17-JUN-87
Kochhar              17000 21-SEP-89 17-JUN-87

次の2つの例では、一意キーで順序付けることによって、LAST_VALUEファンクションを決定的にする方法を示しています。salaryおよびhire_dateでファンクション内を順序付けると、副問合せの順序付けにかかわらず、同じ結果が戻されます。

SELECT last_name, salary, hire_date, LAST_VALUE(hire_date) OVER
(ORDER BY salary, hire_date 
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees WHERE department_id = 90 
   ORDER BY hire_date)
ORDER BY last_name, salary, hire_date, lv;

LAST_NAME           SALARY HIRE_DATE LV
--------------- ---------- --------- ---------
De Haan              17000 13-JAN-93 17-JUN-87
King                 24000 17-JUN-87 17-JUN-87
Kochhar              17000 21-SEP-89 17-JUN-87

SELECT last_name, salary, hire_date, LAST_VALUE(hire_date) OVER
   (ORDER BY salary, hire_date
   ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees WHERE department_id = 90 
   ORDER BY hire_date DESC)
ORDER BY last_name, salary, hire_date, lv;

LAST_NAME           SALARY HIRE_DATE LV
--------------- ---------- --------- ---------
De Haan              17000 13-JAN-93 17-JUN-87
King                 24000 17-JUN-87 17-JUN-87
Kochhar              17000 21-SEP-89 17-JUN-87

LEAD

構文


画像の説明

参照:

構文、セマンティクス、制限事項、およびvalue_exprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

LEADは分析ファンクションです。これは、自己結合せずに、表の1つ以上の行へ同時アクセスを行います。問合せから戻される一連の行およびカーソル位置を指定すると、LEADは、その位置より後にある指定された物理オフセットの行へアクセスします。

offsetを指定しない場合、デフォルト値は1です。オフセットが表の有効範囲を超えた場合、オプションのdefault値が戻されます。defaultを指定しない場合、デフォルト値はNULLです。

value_exprには、LEADまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をvalue_exprで使用できます。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「LAG」も参照してください。 

次の例では、employees表の各従業員について、その従業員の直後に雇用された従業員の雇用開始日を示します。

SELECT last_name, hire_date, 
   LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired" 
   FROM employees WHERE department_id = 30
   ORDER BY last_name, hire_date, "NextHired";

LAST_NAME                 HIRE_DATE NextHired
------------------------- --------- ---------
Baida                     24-DEC-97 15-NOV-98
Colmenares                10-AUG-99
Himuro                    15-NOV-98 10-AUG-99
Khoo                      18-MAY-95 24-JUL-97
Raphaely                  07-DEC-94 18-MAY-95
Tobias                    24-JUL-97 24-DEC-97

LEAST

構文


画像の説明

用途

LEASTは、リストされたexpr内の最小値を戻します。比較の前に、2番目以降のすべてのexprは最初のexprのデータ型に暗黙的に変換されます。Oracle Databaseは、非空白埋め比較セマンティクスを使用してexprを比較します。このファンクションによって戻される値が文字データの場合、そのデータ型は常にVARCHAR2になります。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。「データ型の比較規則」も参照してください。 

次の文では、最小値を持つ文字列を検索します。

SELECT LEAST('HARRY','HARRIOT','HAROLD') "LEAST"
     FROM DUAL;
 
LEAST 
------
HAROLD 

LENGTH

構文

length::=

画像の説明

用途

LENGTHの各ファンクションは、charの長さを戻します。LENGTHは、入力キャラクタ・セットによって定義された文字を使用して、長さを算出します。LENGTHBは、文字のかわりにバイトを使用します。LENGTHCは、完全なUnicodeキャラクタを使用します。LENGTH2は、UCS2コードポイントを使用します。LENGTH4は、UCS4コードポイントを使用します。

charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻り値のデータ型はNUMBERです。charのデータ型がCHARの場合、その長さにはすべての後続空白が含まれます。charがNULLの場合、このファンクションはNULLを戻します。

LENGTHBの制限事項

LENGTHBファンクションは、シングルバイトのLOBでのみサポートされます。このファンクションは、マルチバイトのキャラクタ・セットのCLOBNCLOBでは使用できません。

次の例では、シングルバイトおよびマルチバイトのデータベース・キャラクタ・セットを使用するLENGTHファンクションを使用します。

SELECT LENGTH('CANDIDE') "Length in characters"
   FROM DUAL;

Length in characters
--------------------
                   7

次の例では、データベース・キャラクタ・セットがダブルバイトの場合を想定しています。

SELECT LENGTHB ('CANDIDE') "Length in bytes"
   FROM DUAL;
 
Length in bytes
---------------
             14

LN

構文


画像の説明

用途

LNは、nの自然対数を戻します(nは正の数)。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、95の自然対数を戻します。

SELECT LN(95) "Natural log of 95" FROM DUAL;

Natural log of 95
-----------------
       4.55387689

LNNVL

構文


画像の説明

用途

LNNVLは、条件のオペランドの1つまたは両方がNULLの可能性がある場合にその条件を簡単に評価する方法を提供します。このファンクションは、問合せのWHERE句でのみ使用できます。このファンクションは、引数として条件を取り、その条件がFALSEまたはUNKNOWNの場合はTRUEを戻し、TRUEの場合はFALSEを戻します。LNNVLは、スカラー式を指定できる場所であればどこでも指定でき、有効ではないが、発生する可能性があるNULLを評価するためにIS [NOT] NULLANDまたはOR条件が必要であるようなコンテキストでも指定できます。

Oracle Databaseは、LNNVLファンクションをこの方法で内部的に使用して、NOT IN条件をNOT EXISTS条件として書き換える場合があります。この場合、EXPLAIN PLANからの出力によって、この操作がPLAN TABLEに出力されます。conditionでは、どのようなスカラー値でも評価できますが、ANDORまたはBETWEENを含む複合条件は指定できません。

a = 2およびb=NULLの場合のLNNVLからの戻り値を次の表に示します。

条件  条件の真偽  LNNVLの戻り値 

a = 1 

FALSE  

TRUE  

a = 2 

TRUE  

FALSE  

a IS NULL 

FALSE  

TRUE  

b = 1 

UNKNOWN  

TRUE  

b IS NULL 

TRUE  

FALSE  

a = b 

UNKNOWN  

TRUE  

歩合を受け取らない従業員を含めて、歩合率が20%未満の従業員数を調べるとします。次の問合せは、20%未満の歩合を実際に受け取る従業員のみを戻します。

SELECT COUNT(*) FROM employees WHERE commission_pct < .2;

  COUNT(*)
----------
        11

歩合を受け取らない72人の従業員も含めるには、LNNVLファンクションを次のように使用して、この問合せを書き換えます。

SELECT COUNT(*) FROM employees WHERE LNNVL(commission_pct >= .2);

  COUNT(*)
----------
        83

LOCALTIMESTAMP

構文


画像の説明

用途

LOCALTIMESTAMPは、セッションのタイムゾーンの現在の日付および時刻をTIMESTAMPデータ型の値で戻します。これに対して、CURRENT_TIMESTAMPは、TIMESTAMP WITH TIME ZONE値を戻します。

オプションの引数timestamp_precisionには、戻される時刻値の秒の小数部の精度を指定します。

参照:

「CURRENT_TIMESTAMP」 

次の例では、LOCALTIMESTAMPCURRENT_TIMESTAMPの相違を示します。

ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP                    LOCALTIMESTAMP
-------------------------------------------------------------------
04-APR-00 01.27.18.999220 PM -05:00  04-APR-00 01.27.19 PM

ALTER SESSION SET TIME_ZONE = '-8:00';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP                    LOCALTIMESTAMP
-----------------------------------  ------------------------------
04-APR-00 10.27.45.132474 AM -08:00  04-APR-00 10.27.451 AM

LOCALTIMESTAMPで書式マスクを使用する場合は、ファンクションが戻す値と書式マスクを一致させてください。たとえば、次の表の場合を考えます。

CREATE TABLE local_test (col1 TIMESTAMP WITH LOCAL TIME ZONE);

ファンクションが戻す型のTIME ZONEの部分がマスクに含まれていないため、次の文は正常に実行されません。

INSERT INTO local_test VALUES 
   (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'));

次の文では、LOCALTIMESTAMPの戻り値の型と一致する正しい書式マスクが使用されています。

INSERT INTO local_test VALUES
   (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));

LOG

構文


画像の説明

用途

LOGは、n2を底とするn1の対数を戻します。底n1は0(ゼロ)または1以外の任意の正の値で、n2は任意の正の値です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、100の対数を戻します。

SELECT LOG(10,100) "Log base 10 of 100" FROM DUAL;

Log base 10 of 100
------------------
                 2 

LOWER

構文


画像の説明

用途

LOWERは、すべての文字を小文字にしてcharを戻します。charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義したバイナリ・マッピングに基づいて文字の形式を設定します。小文字の区別については、「NLS_LOWER」を参照してください。

次の例では、文字列を小文字にして戻します。

SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase"
   FROM DUAL;

Lowercase
--------------------
mr. scott mcmillan 

LPAD

構文


画像の説明

用途

LPADは、expr1の左側にexpr2に指定した文字を連続的に埋め込んでn桁にして戻します。このファンクションは、問合せの出力の書式設定に役立ちます。

expr1およびexpr2は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、expr1が文字データ型の場合はVARCHAR2データ型、expr1が各国語キャラクタ・データ型の場合はNVARCHAR2データ型、expr1がLOBデータ型の場合はLOBデータ型になります。expr1と同じキャラクタ・セットの文字列が戻されます。引数nは、NUMBER型の整数か、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

expr2を指定しない場合、デフォルトで空白1個が指定されます。expr1nより長い場合、このファンクションはnに収まるexpr1の一部を戻します。

引数nは、戻り値が画面に表示される場合の全体の長さです。多くのキャラクタ・セットでは、これは戻り値の文字数でもあります。ただし、マルチバイトのキャラクタ・セットでは、表示される文字列の長さが文字列の文字数と異なる場合もあります。

次の例では、文字列の左側にアスタリスクとピリオド(*.)を埋め込みます。

SELECT LPAD('Page 1',15,'*.') "LPAD example"
   FROM DUAL;

LPAD example
---------------
*.*.*.*.*Page 1

LTRIM

構文


画像の説明

用途

LTRIMは、charの左端から、setに指定されたすべての文字を削除します。setを指定しない場合、デフォルトで空白1個が指定されます。charが文字リテラルの場合、一重引用符で囲む必要があります。Oracle Databaseはcharの先頭文字からスキャンし始め、setに指定された文字をすべて削除します。setに指定された文字以外の文字が見つかった時点で結果を戻します。

charおよびsetは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型、charが各国語キャラクタデータ型の場合はNVARCHAR2データ型、charがLOBデータ型の場合はLOBデータ型になります。

参照:

「RTRIM」 

次の例では、oe.products表内の製品名のグループから、冗長な最初の語を削除します。

SELECT product_name, LTRIM(product_name, 'Monitor ') "Short Name"
   FROM products
   WHERE product_name LIKE 'Monitor%';

PRODUCT_NAME         Short Name
-------------------- ---------------
Monitor 17/HR        17/HR
Monitor 17/HR/F      17/HR/F
Monitor 17/SD        17/SD
Monitor 19/SD        19/SD
Monitor 19/SD/M      19/SD/M
Monitor 21/D         21/D
Monitor 21/HR        21/HR
Monitor 21/HR/M      21/HR/M
Monitor 21/SD        21/SD
Monitor Hinge - HD   Hinge - HD
Monitor Hinge - STD  Hinge - STD

MAKE_REF

構文


画像の説明

用途

MAKE_REFは、オブジェクト識別子が主キーに基づいている、オブジェクト・ビューの行またはオブジェクト表の行に対するREFを作成します。このファンクションは、オブジェクト・ビューを作成する場合などに有効です。

参照:

オブジェクト・ビューの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。「DEREF」も参照してください。 

サンプル・スキーマoeには、inventory_typに基づくオブジェクト・ビューoc_inventoriesが格納されています。オブジェクト識別子はproduct_idです。次の例では、3003というproduct_idを含むオブジェクト・ビューoc_inventoriesにある行へのREFを作成します。

SELECT MAKE_REF (oc_inventories, 3003) FROM DUAL;

MAKE_REF(OC_INVENTORIES,3003)
------------------------------------------------------------------
00004A038A0046857C14617141109EE03408002082543600000014260100010001
00290090606002A00078401FE0000000B03C21F040000000000000000000000000
0000000000

MAX

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

MAXexprの最大値を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

参照:

exprの書式の詳細は、「SQL式」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、hr.employees表の最高給与を検索します。

SELECT MAX(salary) "Maximum" FROM employees;
 
   Maximum
----------
      24000

分析の例

次の例では、各従業員について、その従業員と所属が同じ従業員のうち、一番高い給与を計算します。

SELECT manager_id, last_name, salary, 
   MAX(salary) OVER (PARTITION BY manager_id) AS mgr_max
   FROM employees
   ORDER BY manager_id, last_name, salary, mgr_max;

MANAGER_ID LAST_NAME                     SALARY    MGR_MAX
---------- ------------------------- ---------- ----------
       100 Cambrault                      11000      17000
       100 De Haan                        17000      17000
       100 Errazuriz                      12000      17000
       100 Fripp                           8200      17000
       100 Hartstein                      13000      17000
       100 Kaufling                        7900      17000
       100 Kochhar                        17000      17000
. . .

この問合せを述語のある親問合せで囲むと、各部門で給与の一番高い従業員がわかります。

SELECT manager_id, last_name, salary
   FROM (SELECT manager_id, last_name, salary, 
      MAX(salary) OVER (PARTITION BY manager_id) AS rmax_sal
      FROM employees) WHERE salary = rmax_sal
   ORDER BY manager_id, last_name, salary;

MANAGER_ID LAST_NAME                     SALARY
---------- ------------------------- ----------
       100 De Haan                        17000
       100 Kochhar                        17000
       101 Greenberg                      12000
       101 Higgins                        12000
       102 Hunold                          9000
       103 Ernst                           6000
       108 Faviet                          9000
       114 Khoo                            3100
       120 Nayer                           3200
       120 Taylor                          3200
       121 Sarchand                        4200
       122 Chung                           3800
       123 Bell                            4000
       124 Rajs                            3500
       145 Tucker                         10000
       146 King                           10000
       147 Vishney                        10500
       148 Ozer                           11500
       149 Abel                           11000
       201 Fay                             6000
       205 Gietz                           8300
           King                           24000
 
22 rows selected.

MEDIAN

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

MEDIANは、連続分散モデルを想定する逆分散関数です。このファンクションは、数値または日時値を取り、その中央値、または値のソート後に中央値となる補間された値を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。exprのみを指定した場合、このファンクションは引数の数値データ型と同じデータ型を戻します。OVER句を指定した場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

MEDIANの結果の計算では、まず行が順序付けされます。グループ内の行数としてNが使用され、対象の行番号(RN)がRN = (1 + (0.5×(N-1))という式で計算されます。集計ファンクションの最終結果は、行番号がCRN = CEILING(RN)およびFRN = FLOOR(RN)の行の値間の直線補間によって計算されます。

最終結果は次のとおりです。

   if (CRN = FRN = RN) then
      (value of expression from row at RN)
   else
      (CRN - RN) * (value of expression for row at FRN) +
      (RN - FRN) * (value of expression for row at CRN)

MEDIANは、分析ファンクションとして使用できます。その場合、OVER句には、query_partition_clauseのみを指定できます。各行に対して、各パーティション内の一連の値の中央値に該当する値が戻されます。

このファンクションと次のファンクションを比較してください。

集計の例

次の問合せは、hr.employees表内の各従業員の給与の中央値を戻します。

SELECT department_id, MEDIAN(salary)
   FROM employees
   GROUP BY department_id
   ORDER BY department_id, median(salary);

DEPARTMENT_ID MEDIAN(SALARY)
------------- --------------
           10           4400
           20           9500
           30           2850
           40           6500
           50           3100
           60           4800
           70          10000
           80           8900
           90          17000
          100           8000
          110          10150
                        7000

分析の例

次の問合せは、hr.employees表内の部門のサブセットのマネージャごとに給与の中央値を戻します。

SELECT manager_id, employee_id, salary,
   MEDIAN(salary) OVER (PARTITION BY manager_id) "Median by Mgr"
   FROM employees
   WHERE department_id > 60
   ORDER BY manager_id, employee_id, salary, "Median by Mgr";

MANAGER_ID EMPLOYEE_ID     SALARY Median by Mgr
---------- ----------- ---------- -------------
       100         101      17000         13500
       100         102      17000         13500
       100         145      14000         13500
       100         146      13500         13500
       100         147      12000         13500
       100         148      11000         13500
       100         149      10500         13500
       101         108      12000         12000
       101         204      10000         12000
       101         205      12000         12000
       108         109       9000          7800
       108         110       8200          7800
       108         111       7700          7800
       108         112       7800          7800
       108         113       6900          7800
       145         150      10000          8500
       145         151       9500          8500
       145         152       9000          8500
. . .

MIN

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

MINは、exprの最小値を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

参照:

exprの書式の詳細は、「SQL式」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、hr.employees表の最初の雇用開始日を戻します。

SELECT MIN(hire_date) "Earliest" FROM employees;
 
Earliest
---------
17-JUN-87

分析の例

次の例では、各従業員について、その従業員が雇用された日以前に雇用された従業員を検索します。その従業員と所属が同じ従業員のサブセットを決定し、そのサブセット内で一番低い給与を戻します。

SELECT manager_id, last_name, hire_date, salary,
   MIN(salary) OVER(PARTITION BY manager_id ORDER BY hire_date
   RANGE UNBOUNDED PRECEDING) AS p_cmin
   FROM employees
   ORDER BY manager_id, last_name, hire_date, salary, p_cmin;

MANAGER_ID LAST_NAME                 HIRE_DATE     SALARY     P_CMIN
---------- ------------------------- --------- ---------- ----------
       100 Cambrault                 15-OCT-99      11000       6500
       100 De Haan                   13-JAN-93      17000      17000
       100 Errazuriz                 10-MAR-97      12000       7900
       100 Fripp                     10-APR-97       8200       7900
       100 Hartstein                 17-FEB-96      13000       7900
       100 Kaufling                  01-MAY-95       7900       7900
       100 Kochhar                   21-SEP-89      17000      17000
       100 Mourgos                   16-NOV-99       5800       5800
       100 Partners                  05-JAN-97      13500       7900
       100 Raphaely                  07-DEC-94      11000      11000
       100 Russell                   01-OCT-96      14000       7900
. . .

MOD

構文


画像の説明

用途

MODn2n1で割った余りを戻します。n1が0の場合は、n2を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

次の例では、11を4で割ったときの余りを戻します。

SELECT MOD(11,4) "Modulus" FROM DUAL;

   Modulus
----------
         3

このファンクションは、mが負の場合には古典数学のモジュール・ファンクションとは異なる動作をします。古典数学のモジュール・ファンクションは、次の公式を用いたMODファンクションで表すことができます。

m - n * FLOOR(m/n)

次の表に、MODファンクションと古典数学のモジュール・ファンクションの相違を示します。

m  n  MOD(m,n)  古典数学のモジュール・ファンクション 

11 

4 

3 

3 

11 

-4 

3 

-1 

-11 

4 

-3 

1 

-11 

-4 

-3 

-3 

参照:

FLOOR」および「REMAINDER」を参照してください。REMAINDERMODと似ていますが、FLOORではなくROUNDを式に使用します。 


MONTHS_BETWEEN

構文


画像の説明

用途

MONTHS_BETWEENは、日付date1date2の間の月数を戻します。月および月の最終日は、パラメータNLS_CALENDARによって定義されます。date1date2より後の日付の場合、結果は正の値になります。date1date2より前の日付の場合、結果は負の値になります。date1およびdate2が、月の同じ日または月の最終日の場合、結果は常に整数になります。それ以外の場合、Oracle Databaseは結果の小数部を1か月31日として計算し、date1date2の差を割り出します。

次の例では、2つの日付間の月数を計算します。

SELECT MONTHS_BETWEEN 
   (TO_DATE('02-02-1995','MM-DD-YYYY'),
    TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
    FROM DUAL;

    Months
----------
1.03225806

NANVL

構文


画像の説明

用途

NANVLファンクションは、BINARY_FLOAT型またはBINARY_DOUBLE型の浮動小数点数のみに有効です。このファンクションは、入力値n2NaN(非数値)の場合は代替値n1を戻すようにOracle Databaseに指示します。n2NaNでない場合、Oracleはn2を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。数値の優先順位詳細は、「数値の優先順位」を参照してください。 

TO_BINARY_DOUBLE」で作成したfloat_point_demoを使用して、表に2つ目のエントリを挿入します。

Insert INTO float_point_demo
  VALUES (0,'NaN','NaN');

SELECT * FROM float_point_demo;

   DEC_NUM BIN_DOUBLE  BIN_FLOAT
---------- ---------- ----------
   1234.56 1.235E+003 1.235E+003
         0        Nan        Nan

次の例では、数値の場合はbin_floatを戻します。数値以外の場合は、0(ゼロ)を戻します。

SELECT bin_float, NANVL(bin_float,0)
  FROM float_point_demo;

 BIN_FLOAT NANVL(BIN_FLOAT,0)
---------- ------------------
1.235E+003         1.235E+003
       Nan                  0

NCHR

構文


画像の説明

用途

NCHRは、各国語キャラクタ・セットのnumberと同等のバイナリを持つ文字を戻します。戻り値は常にNVARCHAR2です。このファンクションは、CHRファンクションにUSING NCHAR_CS句を指定して使用した場合と同じ結果を戻します。

このファンクションは、引数として、NUMBER値、または暗黙的にNUMBER型に変換可能な任意の値を取り、文字を戻します。

参照:

「CHR」 

次の例では、NCHAR文字187を戻します。

SELECT NCHR(187) FROM DUAL;

NC
--
> 

SELECT CHR(187 USING NCHAR_CS) FROM DUAL;

CH
--
> 

NEW_TIME

構文


画像の説明

用途

NEW_TIMEは、タイムゾーンtimezone1の日時がdateの時点のタイムゾーンtimezone2の日時を戻します。このファンクションを使用する前に、24時間で表示されるように、NLS_DATE_FORMATパラメータを設定する必要があります。戻り型は、dateのデータ型に関係なく常にDATEです。


注意:

このファンクションが入力として取ることのできるタイムゾーンの数には制限があります。FROM_TZファンクションと日時式を組み合せることによって、より多くのタイムゾーンにアクセスできます。「FROM_TZ」および「日時式」の例を参照してください。 


引数timezone1およびtimezone2には、次のテキスト文字列のいずれかを指定できます。

次の例では、指定された太平洋標準時と同等の大西洋標準時を戻します。

ALTER SESSION SET NLS_DATE_FORMAT =
   'DD-MON-YYYY HH24:MI:SS';

SELECT NEW_TIME(TO_DATE(
   '11-10-99 01:23:45', 'MM-DD-YY HH24:MI:SS'),
   'AST', 'PST') "New Date and Time" FROM DUAL;

New Date and Time
--------------------
09-NOV-1999 21:23:45

NEXT_DAY

構文


画像の説明

用途

NEXT_DAYは、charで指定した曜日で、日付dateより後の最初の日付を戻します。戻り型は、dateのデータ型に関係なく常にDATEです。引数charは、セッションの日付言語での曜日である必要があります(フルネームでも省略形でも可)。必要最小限の文字数は、省略形の文字数です。有効な省略形の後に続けて文字が入力されていても、それらの文字は無視されます。戻り値は、引数dateと同じ時、分および秒のコンポーネントを持っています。

次の例では、2001年2月2日以降の最初の火曜日の日付を戻します。

SELECT NEXT_DAY('02-FEB-2001','TUESDAY') "NEXT DAY"
     FROM DUAL;

NEXT DAY
-----------
06-FEB-2001

NLS_CHARSET_DECL_LEN

構文


画像の説明

用途

NLS_CHARSET_DECL_LENは、NCHAR列の宣言の長さを(文字数で)戻します。byte_count引数は、列の幅です。char_set_id引数は、列のキャラクタ・セットIDです。

次の例では、マルチバイト・キャラクタ・セットを使用している場合に、列の幅が200バイトである文字の数を戻します。

SELECT NLS_CHARSET_DECL_LEN
  (200, nls_charset_id('ja16eucfixed')) 
   FROM DUAL; 

NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
                                                     100

NLS_CHARSET_ID

構文


画像の説明

用途

NLS_CHARSET_IDは、キャラクタ・セット名stringに対応するキャラクタ・セットのID番号を戻します。引数stringは、実行時のVARCHAR2値です。string値'CHAR_CS'は、サーバーのデータベース・キャラクタ・セットのID番号を戻します。string値'NCHAR_CS'は、サーバーの各国語キャラクタ・セットのID番号を戻します。

無効なキャラクタ・セット名を指定すると、NULLが戻されます。

次の例では、キャラクタ・セットのIDを戻します。

SELECT NLS_CHARSET_ID('ja16euc') 
  FROM DUAL; 

NLS_CHARSET_ID('JA16EUC')
------------------------- 
                      830

参照:

キャラクタ・セット名のリストについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


NLS_CHARSET_NAME

構文


画像の説明

用途

NLS_CHARSET_NAMEは、ID番号numberに対応するキャラクタ・セット名を戻します。キャラクタ・セット名は、データベース・キャラクタ・セットのVARCHAR2値として戻されます。

numberが有効なキャラクタ・セットIDとして認識されない場合は、このファンクションはNULLを戻します。

次の例では、キャラクタ・セットのID番号2に対応するキャラクタ・セットを戻します。

SELECT NLS_CHARSET_NAME(2)
  FROM DUAL;

NLS_CH 
------ 
WE8DEC

参照:

キャラクタ・セットIDのリストについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


NLS_INITCAP

構文


画像の説明

用途

NLS_INITCAPは、各単語の最初の文字を大文字、残りの文字を小文字にしてcharを戻します。単語は空白または英数字以外の文字で区切ります。

charおよび'nlsparam'は、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。戻される文字列は、VARCHAR2データ型であり、charと同じキャラクタ・セットです。

'nlsparam'の値は次の書式で指定します。

'NLS_SORT = sort'

sortは、言語ソート基準またはBINARYのいずれかです。言語ソート基準は、大文字と小文字の変換のために特別な言語要件を処理します。これらの要件によって、charと異なる長さの値が戻される場合があります。'nlsparam'を省略すると、このファンクションはセッションに対してデフォルトのソート基準を使用します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次に、ファンクションによって言語ソート基準がどのように異なる値を戻すかを示します。

SELECT NLS_INITCAP
   ('ijsland') "InitCap" FROM DUAL;

InitCap
-------
Ijsland

SELECT NLS_INITCAP
   ('ijsland', 'NLS_SORT = XDutch') "InitCap"
   FROM DUAL;

InitCap
-------
IJsland

参照:

ソート基準の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


NLS_LOWER

構文


画像の説明

用途

NLS_LOWERは、すべての文字を小文字にしてcharを戻します。

charおよび'nlsparam'は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型になり、charがLOBデータ型の場合はLOBになります。charと同じキャラクタ・セットの文字列が戻されます。

'nlsparam'の書式および用途は、NLS_INITCAPファンクションと同じです。

次の例では、XGerman言語ソート順序を使用する文字列'citta''を戻します。

SELECT NLS_LOWER
   ('CITTA''', 'NLS_SORT = XGerman') "Lowercase"
   FROM DUAL;

Lowerc
------
citta'

NLSSORT

構文


画像の説明

用途

NLSSORTは、charのソートに使用される文字列のバイトを戻します。

charおよび'nlsparam'は、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。戻される文字列はRAWデータ型です。

'nlsparam'の値は次の書式で指定します。

'NLS_SORT = sort'

sortは、言語ソート基準またはBINARYのいずれかです。'nlsparam'を省略すると、このファンクションはセッションに対してデフォルトのソート基準を使用します。BINARYを指定すると、このファンクションはcharを戻します。

'nlsparam'を指定した場合、言語ソート名に接尾辞_aiを追加してアクセント記号の有無を区別しないソートを行うか、または_ciを追加して大/小文字を区別しないソートを行うことができます。アクセント記号の有無および大/小文字を区別しないソートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

このファンクションを使用すると、文字列の2進値を基にしたソートおよび比較ではなく、言語ソート基準を基にしたソートおよび比較を指定できます。次の例では、2つの値を含むテスト表を作成し、戻される値がNLSSORTファンクションによってどのように順序付けられるかを示します。

CREATE TABLE test (name VARCHAR2(15));
INSERT INTO test VALUES ('Gaardiner');
INSERT INTO test VALUES ('Gaberd');
INSERT INTO test VALUES ('Gaasten');

SELECT * FROM test ORDER BY name;

NAME
---------------
Gaardiner
Gaasten
Gaberd

SELECT * FROM test ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

NAME
---------------
Gaberd
Gaardiner
Gaasten

次の例では、比較操作でのNLSSORTファンクションの使用方法を示します。

SELECT * FROM test WHERE name > 'Gaberd'
  ORDER BY name;

no rows selected

SELECT * FROM test WHERE NLSSORT(name, 'NLS_SORT = XDanish') > 
   NLSSORT('Gaberd', 'NLS_SORT = XDanish')
   ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

同一の言語ソート基準を使用する比較操作で頻繁にNLSSORTを使用する場合、NLS_COMPパラメータ(データベース用か現行のセッション用のいずれか)にLINGUISTICを設定し、セッションのNLS_SORTパラメータに必要なソート基準を設定するとより効率的です。これによって、現行のセッション中のすべてのソート操作および比較操作において、デフォルトでそのソート基準が使用されるようになります。

ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
ALTER SESSION SET NLS_SORT = 'XDanish';

SELECT * FROM test WHERE name > 'Gaberd'
  ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

参照:

ソート基準の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


NLS_UPPER

構文


画像の説明

用途

NLS_UPPERは、すべての文字を大文字にしてcharを戻します。

charおよび'nlsparam'は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型になり、charがLOBデータ型の場合はLOBになります。charと同じキャラクタ・セットの文字列が戻されます。

'nlsparam'の書式および用途は、NLS_INITCAPファンクションと同じです。

次の例では、すべての文字を大文字に変換して文字列を戻します。

SELECT NLS_UPPER ('große') "Uppercase"
     FROM DUAL;

Upper
-----
GROßE

SELECT NLS_UPPER ('große', 'NLS_SORT = XGerman') "Uppercase" 
   FROM DUAL;

Upperc
------
GROSSE

参照:

「NLS_INITCAP」 


NTILE

構文


画像の説明

参照:

構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

NTILEは分析ファンクションです。これは、順序付けられたデータセットをexprに指定した数のバケットに分割し、適切なバケット番号を各行に割り当てます。バケットには1〜exprの番号が付けられます。expr値は、パーティションごとに、正の定数に変換される必要があります。Oracle Databaseではexprは整数とみなされるため、この値が整数ではない定数の場合は整数に切り捨てられます。戻り値は、NUMBERです。

バケット内の行数は、最大で1異なります。残りの値(バケットで割った行数の余り)は、バケット1から順に、1行ずつ分割されます。

exprが行数より大きい場合、行数と等しい数のバケットに行が入れられ、余りのバケットは空になります。

exprには、NTILEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。

参照:

exprの書式の詳細は、「SQL式」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、部門100のoe.employees表のsalary列の値を4つのバケットに分割します。この部門のsalary列には6つの値が存在するため、2つの余分な値(6を4で割った余り)は、バケット1および2に割り当てられます。そのため、バケット1および2は、バケット3または4より値が1つ多くなります。

SELECT last_name, salary, NTILE(4) OVER (ORDER BY salary DESC) 
   AS quartile FROM employees
   WHERE department_id = 100
   ORDER BY last_name, salary, quartile;

LAST_NAME                     SALARY   QUARTILE
------------------------- ---------- ----------
Chen                            8200          2
Faviet                          9000          1
Greenberg                      12000          1
Popp                            6900          4
Sciarra                         7700          3
Urman                           7800          2

NULLIF

構文


画像の説明

用途

NULLIFは、expr1expr2を比較します。同じである場合は、NULLを戻します。異なる場合は、expr1を戻します。expr1には、リテラルNULLを指定できません。

両方の引数が数値データ型である場合、Oracle Databaseは、数値の優先順位が高い方の引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。2つの引数が数値ではない場合、それらのデータ型が同じである必要があります。データ型が異なる場合、Oracleはエラーを戻します。

NULLIFファンクションは、次のCASE式と論理的に同じです。

CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END

参照:

「CASE式」 

次の例では、サンプル・スキーマhrから、雇用後に職種が変更した従業員を検索します。これは、employees表の現行のjob_idjob_history表のjob_idと異なるかどうかによって識別されます。

SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID"
   FROM employees e, job_history j
   WHERE e.employee_id = j.employee_id
   ORDER BY last_name, "Old Job ID";

LAST_NAME                 Old Job ID
------------------------- ----------
De Haan                   AD_VP
Hartstein                 MK_MAN
Kaufling                  ST_MAN
Kochhar                   AD_VP
Kochhar                   AD_VP
Raphaely                  PU_MAN
Taylor                    SA_REP
Taylor
Whalen                    AD_ASST
Whalen

NUMTODSINTERVAL

構文


画像の説明

用途

NUMTODSINTERVALは、nINTERVAL DAY TO SECONDリテラルに変換します。引数nには、任意のNUMBER値か、またはNUMBER値に暗黙的に変換可能な式を指定できます。引数interval_unitのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。interval_unitの値にはnの単位を指定します。この値は次の文字列値のいずれかである必要があります。

interval_unitでは、大/小文字は区別されません。カッコ内の先行値および後続値は無視されます。デフォルトでは、戻り値の精度は9です。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、COUNT分析ファンクションにNUMTODSINTERVALを使用し、各従業員について、雇用開始日から過去100日以内に同じマネージャの部下として配属された従業員の人数を計算します。分析ファンクションの構文の詳細は、「分析ファンクション」を参照してください。

SELECT manager_id, last_name, hire_date, 
   COUNT(*) OVER (PARTITION BY manager_id ORDER BY hire_date 
   RANGE NUMTODSINTERVAL(100, 'day') PRECEDING) AS t_count 
   FROM employees;

MANAGER_ID LAST_NAME                 HIRE_DATE    T_COUNT
---------- ------------------------- --------- ----------
       100 Kochhar                   21-SEP-89          1
       100 De Haan                   13-JAN-93          1
       100 Raphaely                  07-DEC-94          1
       100 Kaufling                  01-MAY-95          1
       100 Hartstein                 17-FEB-96          1
. . .
       149 Grant                     24-MAY-99          1
       149 Johnson                   04-JAN-00          1
       201 Goyal                     17-AUG-97          1
       205 Gietz                     07-JUN-94          1
           King                      17-JUN-87          1

NUMTOYMINTERVAL

構文


画像の説明

用途

NUMTOYMINTERVALは、数値nINTERVAL YEAR TO MONTHリテラルに変換します。引数nには、任意のNUMBER値か、またはNUMBER値に暗黙的に変換可能な式を指定できます。引数interval_unitのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。interval_unitの値にはnの単位を指定します。この値は次の文字列値のいずれかである必要があります。

interval_unitでは、大/小文字は区別されません。カッコ内の先行値および後続値は無視されます。デフォルトでは、戻り値の精度は9です。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、SUM分析ファンクションにNUMTOYMINTERVALを使用し、各従業員について、その従業員の雇用日から過去1年の間に雇用された従業員の給与の合計を計算します。分析ファンクションの構文の詳細は、「分析ファンクション」を参照してください。

SELECT last_name, hire_date, salary, SUM(salary) 
   OVER (ORDER BY hire_date 
   RANGE NUMTOYMINTERVAL(1,'year') PRECEDING) AS t_sal 
   FROM employees
   ORDER BY last_name, hire_date;

LAST_NAME                 HIRE_DATE     SALARY      T_SAL
------------------------- --------- ---------- ----------
King                      17-JUN-87      24000      24000
Whalen                    17-SEP-87       4400      28400
Kochhar                   21-SEP-89      17000      17000
. . .
Markle                    08-MAR-00       2200     112400
Ande                      24-MAR-00       6400     106500
Banda                     21-APR-00       6200     109400
Kumar                     21-APR-00       6100     109400

NVL

構文


画像の説明

用途

NVLを使用すると、NULL(空白として戻される)を文字列に置換して問合せの結果に含めることができます。expr1がNULLの場合、NVLexpr2を戻します。expr1がNULLでない場合、NVLexpr1を戻します。

引数expr1およびexpr2は、任意のデータ型を持つことができます。2つの引数のデータ型が異なる場合、一方のデータ型が他方のデータ型に暗黙的に変換されます。暗黙的に変換できない場合、データベースはエラーを戻します。暗黙的な変換は、次のように実行されます。

次の例では、従業員が歩合を受け取らない場合、従業員名および従業員の歩合「Not Applicable」を表示します。

SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable')
   "COMMISSION" FROM employees
   WHERE last_name LIKE 'B%'
   ORDER BY last_name;
 
LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable

NVL2

構文


画像の説明

用途

NVL2を使用すると、指定された式がNULLかどうかに基づく問合せによって戻される値を判断できます。expr1がNULLでない場合、NVL2expr2を戻します。expr1がNULLの場合、NVL2expr3を戻します。

引数expr1は、任意のデータ型を持つことができます。引数expr2およびexpr3は、LONG以外の任意のデータ型を持つことができます。

expr2expr3のデータ型が異なる場合、次のようになります。

次の例では、employeescommission_pct列がNULLかどうかによって、従業員の収入が給与と歩合か、または給与のみかを示します。

SELECT last_name, salary, NVL2(commission_pct, 
   salary + (salary * commission_pct), salary) income
   FROM employees WHERE last_name like 'B%'
   ORDER BY last_name;

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6882
Bates                           7300       8468
Bell                            4000       4000
Bernstein                       9500      11970
Bissot                          3300       3300
Bloom                          10000      12100
Bull                            4100       4100

ORA_HASH

構文


画像の説明

用途

ORA_HASHファンクションは、指定された式のハッシュ値を計算します。このファンクションは、データのサブセットの分析や、ランダムな標本の生成などの操作に有効です。

戻り値はNUMBERです。

次の例では、sh.sales表内の顧客IDと製品IDの各組合せに対してハッシュ値を作成し、そのハッシュ値を最大100個のバケットに分割して、最初のバケット(バケット0(ゼロ))でamount_sold値の合計を戻します。3つ目の引数(5)には、ハッシュ・ファンクションのシード値を指定しています。このシード値を変更すると、同じ問合せで異なるハッシュ結果を得ることができます。

SELECT SUM(amount_sold) FROM sales
   WHERE ORA_HASH(CONCAT(cust_id, prod_id), 99, 5) = 0;

SUM(AMOUNT_SOLD)
----------------
       989431.14

PATH

構文


画像の説明

用途

PATHは、UNDER_PATHおよびEQUALS_PATH条件でのみ使用される補助ファンクションです。一次条件で指定されたリソースへの相対パスを戻します。

correlation_integerNUMBER型の任意の整数で、この補助ファンクションをその一次条件と関連付けるために使用します。1未満の値は1として扱われます。

参照:

「EQUALS_PATH条件」および「UNDER_PATH条件」を参照してください。 

EQUALS_PATH条件およびUNDER_PATH条件でこの補助ファンクションを使用する例は、関連ファンクション「DEPTH」を参照してください。


PERCENT_RANK

集計の構文

percent_rank_aggregate::=

画像の説明

分析の構文

percent_rank_analytic::=

画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

PERCENT_RANKは、CUME_DIST(累積分布)ファンクションと似ています。PERCENT_RANKが戻す値の範囲は、0〜1(0および1を含む)です。すべての集合の最初の行のPERCENT_RANKは0(ゼロ)になります。戻り値はNUMBERです。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

集計の例

次の例では、サンプル表hr.employeesから、給与が15,500ドルであり、歩合が5%である不確定な従業員のパーセント・ランクを計算します。

SELECT PERCENT_RANK(15000, .05) WITHIN GROUP
   (ORDER BY salary, commission_pct) "Percent-Rank" 
   FROM employees;

Percent-Rank
------------
  .971962617

分析の例

次の例では、従業員ごとに、部門内での給与のパーセント・ランクを計算します。

SELECT department_id, last_name, salary, 
   PERCENT_RANK() 
      OVER (PARTITION BY department_id ORDER BY salary DESC) AS pr
   FROM employees
   ORDER BY pr, salary;

DEPARTMENT_ID LAST_NAME                     SALARY         PR
------------- ------------------------- ---------- ----------
           10 Whalen                          4400          0
           40 Marvis                          6500          0
. . .
           80 Vishney                        10500 .176470588
           50 Everett                         3900 .181818182
           30 Khoo                            3100         .2
. . .
           80 Johnson                         6200 .941176471
           50 Markle                          2200 .954545455
           50 Philtanker                      2200 .954545455
           50 Olson                           2100          1
. . .

PERCENTILE_CONT

構文


画像の説明

参照:

OVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

PERCENTILE_CONTは、連続分散モデルを想定する逆分散関数です。このファンクションは、パーセンタイル値およびソート指定を用い、そのソート指定に従ってそのパーセンタイル値に該当する補間された値を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

最初のexprは、パーセンタイル値であるため、0〜1の数値で評価します。このexprは、各集計グループ内の定数である必要があります。ORDER BY句には、Oracleが補間を実行できる型である数値または日時値の単一式を指定します。

PERCENTILE_CONTの結果は、順序付けされた後の値間の直線補間によって計算されます。集計グループで、パーセンタイル値(P)および行数(N)を使用すると、ソート指定に従って行を順序付けた後の行数を計算できます。この行数(RN)は、計算式RN = (1+ (P*(N-1))に従って計算されます。集計ファンクションの最終結果は、行番号がCRN = CEILING(RN)およびFRN = FLOOR(RN)の行の値間の直線補間によって計算されます。

最終結果は次のとおりです。

  If (CRN = FRN = RN) then the result is
    (value of expression from row at RN)
  Otherwise the result is
    (CRN - RN) * (value of expression for row at FRN) +
    (RN - FRN) * (value of expression for row at CRN)

PERCENTILE_CONTファンクションは、分析ファンクションとしても使用できます。その場合、OVER句には、query_partitioning_clauseのみを指定できます。各行に対して、各パーティション内の一連の値から、指定されたパーセンタイルに該当する値を戻します。

MEDIANファンクションは、パーセンタイル値がデフォルトで0.5に指定される特別なPERCENTILE_CONTです。詳細は、「MEDIAN」を参照してください。

集計の例

次の例では、各部門の給与の中央値を計算します。

SELECT department_id,
   PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) 
      "Median cont",
   PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC) 
      "Median disc"
   FROM employees GROUP BY department_id
   ORDER BY department_id, "Median cont", "Median disc;

DEPARTMENT_ID Median cont Median disc
------------- ----------- -----------
           10        4400        4400
           20        9500       13000
           30        2850        2900
           40        6500        6500
           50        3100        3100
           60        4800        4800
           70       10000       10000
           80        8900        9000
           90       17000       17000
          100        8000        8200
          110       10150       12000
                     7000        7000

PERCENTILE_CONTおよびPERCENTILE_DISCは、異なる結果を戻す場合があります。PERCENTILE_CONTは、直線補間後の結果を計算します。PERCENTILE_DISCは、集計された一連の値から値のみを戻します。この例に示すように、パーセンタイル値が0.5の場合、PERCENTILE_CONTは、偶数の要素を持つグループの中間の2つの値の平均を戻します。それに対して、PERCENTILE_DISCは、中間の2つの値の最初の値を戻します。奇数の要素を持つ集計グループでは、どちらのファンクションも中間の要素の値を戻します。

分析の例

次の例では、0.5のパーセンタイル(Percent_Rank)に対応する部門60の中央値は4800です。部門30の給与にパーセンタイル0.5がないため、2900(パーセンタイル0.4)〜2800(パーセンタイル0.6)の範囲で2850に評価される中央値が補間される必要があります。

SELECT last_name, salary, department_id,
   PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) 
      OVER (PARTITION BY department_id) "Percentile_Cont",
   PERCENT_RANK() 
      OVER (PARTITION BY department_id ORDER BY salary DESC) "Percent_Rank"
FROM employees WHERE department_id IN (30, 60)
ORDER BY last_name, salary, department_id, "Percentile_Cont", "Percent_Rank";

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Austin                          4800            60            4800           .5
Baida                           2900            30            2850           .4
Colmenares                      2500            30            2850            1
Ernst                           6000            60            4800          .25
Himuro                          2600            30            2850           .8
Hunold                          9000            60            4800            0
Khoo                            3100            30            2850           .2
Lorentz                         4200            60            4800            1
Pataballa                       4800            60            4800           .5
Raphaely                       11000            30            2850            0
Tobias                          2800            30            2850           .6

PERCENTILE_DISC

構文


画像の説明

参照:

OVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

PERCENTILE_DISCは、不連続分散モデルを想定する逆分散関数です。このファンクションでは、パーセンタイル値およびソート指定を指定し、そのセットから要素を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

最初のexprは、パーセンタイル値であるため、0〜1の数値で評価します。このexprは、各集計グループ内の定数である必要があります。ORDER BY句には、ソート可能な型の単一式を指定します。

指定されたパーセンタイル値Pに対して、PERCENTILE_DISCは、ORDER BY句の式の値をソートし、P以上である(同じソート指定に従う)最小CUME_DIST値を持つ値を戻します。

集計の例

PERCENTILE_CONT」の例を参照してください。

分析の例

次の例では、サンプル表hr.employeesの各従業員の給与の中央値不連続パーセンタイルを計算します。

SELECT last_name, salary, department_id,
   PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC)
      OVER (PARTITION BY department_id) "Percentile_Disc",
   CUME_DIST() OVER (PARTITION BY department_id 
      ORDER BY salary DESC) "Cume_Dist"
FROM employees where department_id in (30, 60)
ORDER BY last_name, salary, department_id, "Percentile_Disc", "Cume_Dist";

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Disc  Cume_Dist
------------------------- ---------- ------------- --------------- ----------
Austin                          4800            60            4800         .8
Baida                           2900            30            2900         .5
Colmenares                      2500            30            2900          1
Ernst                           6000            60            4800         .4
Himuro                          2600            30            2900 .833333333
Hunold                          9000            60            4800         .2
Khoo                            3100            30            2900 .333333333
Lorentz                         4200            60            4800          1
Pataballa                       4800            60            4800         .8
Raphaely                       11000            30            2900 .166666667
Tobias                          2800            30            2900 .666666667

部門30の中央値の値は2900です。この値の対応するパーセンタイル(Cume_Dist)は、0.5以上の最小値です。部門60の中央値の値は4800です。この値の対応するパーセンタイルは、0.5以上の最小値です。


POWER

構文


画像の説明

用途

POWERは、n2n1乗した値を戻します。底n2および指数n1は任意の数です。ただし、n2が負の場合、n1は整数である必要があります。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、3の2乗を戻します。

SELECT POWER(3,2) "Raised" FROM DUAL;

    Raised
----------
         9

POWERMULTISET

構文


画像の説明

用途

POWERMULTISETは、入力としてネストした表を取り、入力されたネストした表のすべての空でないサブセットを含む、ネストした表のネストした表(サブ多重集合という)を戻します。

まず、cust_address_tab_typeデータ型のネストした表であるデータ型を作成します。

CREATE TYPE cust_address_tab_tab_typ
  AS TABLE OF cust_address_tab_typ;

次に、POWERMULTISETファンクションを使用して、customers_demo表から、ネストした表の列cust_address_ntabを選択します。

SELECT CAST(POWERMULTISET(cust_address_ntab)
         AS cust_address_tab_tab_typ)
  FROM customers_demo;

CAST(POWERMULTISET(CUST_ADDRESS_NTAB) AS CUST_ADDRESS_TAB_TAB_TYP)
  (STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
------------------------------------------------------------------
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
  ('514 W Superior St', '46901', 'Kokomo', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
  ('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
  ('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
  ('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US')))
. . .

前述の例では、customers_demo表、およびデータを含むネストした表の列が必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。


POWERMULTISET_BY_CARDINALITY

構文


画像の説明

用途

POWERMULTISET_BY_CARDINALITYは、入力としてネストした表およびカーディナリティを取り、指定されたカーディナリティを持つネストした表のすべての空でないサブセットを含む、ネストした表のネストした表(サブ多重集合という)を戻します。

まず、ネストした表のすべての行内の要素を複製し、ネストした表の行のカーディナリティを2に増やします。

UPDATE customers_demo
  SET cust_address_ntab = cust_address_ntab MULTISET UNION cust_address_ntab;

次に、POWERMULTISET_BY_CARDINALITYファンクションを使用して、customers_demo表から、ネストした表の列cust_address_ntabを選択します。

SELECT CAST(POWERMULTISET_BY_CARDINALITY(cust_address_ntab, 2)
         AS cust_address_tab_tab_typ)
  FROM customers_demo;

CAST(POWERMULTISET_BY_CARDINALITY(CUST_ADDRESS_NTAB,2) AS CUST_ADDRESS_TAB_TAB_TYP)
  (STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------------------------------------------------------------------------------------
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
  (CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'), 
   CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
  (CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'), 
   CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
  (CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'), 
   CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US')))
. . .

前述の例では、customers_demo表、およびデータを含むネストした表の列が必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。


PREDICTION

構文


画像の説明

cost_matrix_clause::=

画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIで作成したモデルで使用するためのものです。このファンクションは、モデルの最適な予測を戻します。戻されるデータ型は、モデルの作成中に使用するターゲット値の型によって異なります。回帰モデルの場合、このファンクションは期待値を戻します。

cost_matrix_clause

COST句は、すべての分類モデルに対して有効です。

cost_matrix_clause句を指定しない場合、最適な予測は最も高い確率を持つターゲット・クラスになります。2つ以上のクラスが最も高い確率にある場合、そのうちの1つのクラスが選択されます。

mining_attribute_clause

これは、モデルの作成時に提供された予測子をマップします。USING *を指定すると、基礎となる入力(表、ビューなど)から取り出すことができる列と式にすべての予測子がマップされます。

次の例では、提携カードを使用している可能性のある顧客の平均年齢を性別ごとに戻します。PREDICTIONファンクションでは、cust_marital_statuseducationおよびhousehold_sizeの予測子のみを考慮します。

この例と前提条件のデータ・マイニング操作(ビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmdtdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
   FROM mining_data_apply_v
   WHERE PREDICTION(DT_SH_Clas_sample COST MODEL
      USING cust_marital_status, education, household_size) = 1
   GROUP BY cust_gender
   ORDER BY cust_gender;

C        CNT    AVG_AGE
- ---------- ----------
F        170         38
M        685         42

PREDICTION_BOUNDS

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

PREDICTION_BOUNDSファンクションは、汎用化された線形モデルにのみ使用します。このファンクションは、LOWERUPPERの2つのNUMBERフィールドを持つオブジェクトを戻します。回帰マイニング・ファンクションの場合は、予測の値に限度が適用されます。分類マイニング・ファンクションの場合は、確率値に限度が適用されます。リッジ回帰を使用してGLMが構築されたか、または構築中に共分散マトリックスに異常があると認識された場合は、両方のフィールドにNULLが戻されます。

次の例では、98%の確度で年齢が25〜45才と予測される顧客の分布を戻します。

この例と前提条件のデータ・マイニング操作は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmglcdem.sqlで確認できます。次に、このファンクションの構文の使用例を示します。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。

SELECT count(cust_id) cust_count, cust_marital_status
  FROM (SELECT cust_id, cust_marital_status
    FROM mining_data_apply_v
    WHERE PREDICTION_BOUNDS(glmr_sh_regr_sample,0.98 USING *).LOWER > 24 AND
          PREDICTION_BOUNDS(glmr_sh_regr_sample,0.98 USING *).UPPER < 46)
    GROUP BY cust_marital_status;
 
    CUST_COUNT CUST_MARITAL_STATUS
-------------- --------------------
            46 NeverM
             7 Mabsent
             5 Separ.
            35 Divorc.
            72 Married

PREDICTION_COST

構文


画像の説明

cost_matrix_clause::=

画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIで作成した任意の分類モデルで使用するためのものです。また、指定した予測のコストのメジャーをOracleのNUMBERとして戻します。

オプションのclassパラメータを指定すると、このファンクションは指定したクラスのコストを戻します。classパラメータを指定しない場合、最適な予測に関連付けられたコストが戻されます。この形式とPREDICTIONファンクションを組み合せて使用すると、予測値とコストの最適な組合せを取得できます。

COST句は、すべての分類モデルに対して有効です。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの概要およびコストの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

  • DBMS_DATA_MININGパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

 

次の例では、イタリア在住で、提携カードの使用を薦める上で最もコストが低い顧客を10人検索します。

この例と前提条件のデータ・マイニング操作は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmdtdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

WITH
cust_italy AS (
SELECT cust_id
  FROM mining_data_apply_v
 WHERE country_name = 'Italy'
ORDER BY PREDICTION_COST(DT_SH_Clas_sample, 1 COST MODEL USING *) ASC, 1
)
SELECT cust_id
  FROM cust_italy
 WHERE rownum < 11;

   CUST_ID
----------
    100081
    100179
    100185
    100324
    100344
    100554
    100662
    100733
    101250
    101306
 
10 rows selected.

PREDICTION_DETAILS

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIで作成した決定ツリー・モデルと単一機能のAdaptive Bayes Network(ABN)モデルで使用するためのものです。このファンクションは、入力行のスコアリングに関連するモデル固有の情報を含むXML文字列を戻します。今回のリリースでは、戻り値は次の書式になります。

<Node id= "integer"/>

ここで、integerはデータ・マイニングのツリー・ノードの識別子です。出力の形式は、変更される可能性があります。今後のリリースでは、追加の予測情報を提供するように拡張される可能性があります。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、DT_SH_Clas_sample決定ツリー・モデルの関連する予測子であるmining_data_apply_vビューから、すべての属性を使用します。テクニカル・サポートで働く25才未満の顧客の場合、DT_SH_Clas_sampleモデルを持つレコードのスコアリングの結果からツリー・ノードが戻されます。

この例と前提条件のデータ・マイニング操作(ビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmdtdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT cust_id, education,
   PREDICTION_DETAILS(DT_SH_Clas_sample using *) treenode
   FROM mining_data_apply_v
   WHERE occupation = 'TechSup' AND age < 25
   ORDER BY cust_id;

   CUST_ID EDUCATION             TREENODE
---------- --------------------- -------------------------
    100234 < Bach.               <Node id="21"/>
    100320 < Bach.               <Node id="21"/>
    100349 < Bach.               <Node id="21"/>
    100419 < Bach.               <Node id="21"/>
    100583 < Bach.               <Node id="13"/>
    100657 HS-grad               <Node id="21"/>
    101171 < Bach.               <Node id="21"/>
    101225 < Bach.               <Node id="21"/>
    101338 < Bach.               <Node id="21"/>
 
9 rows selected.

PREDICTION_PROBABILITY

構文


画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIで作成した分類モデルで使用するためのものです。このファンクションは、他の型のモデルに対しては無効です。また、指定した予測の確率をOracleのNUMBERとして戻します。

オプションのclassパラメータを指定すると、このファンクションは指定したクラスの確率を戻します。これは、指定したターゲット・クラス値の選択に関連付けられた確率と同じです。

classパラメータを指定しない場合、最適な予測に関連付けられた確率が戻されます。この形式とPREDICTIONファンクションを組み合せて使用すると、予測値と確率の最適な組合せを取得できます。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

 

次の例では、提携カードを使用している可能性が最も高いイタリア在住の顧客を10人戻します。

この例と前提条件のデータ・マイニング操作(ビューの作成など)は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmdtdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT cust_id FROM (
   SELECT cust_id
   FROM mining_data_apply_v
   WHERE country_name = 'Italy'
   ORDER BY PREDICTION_PROBABILITY(DT_SH_Clas_sample, 1 USING *)
      DESC, cust_id)
   WHERE rownum < 11;
 
   CUST_ID
----------
    100081
    100179
    100185
    100324
    100344
    100554
    100662
    100733
    101250
    101306
 
10 rows selected.

PREDICTION_SET

構文


画像の説明

cost_matrix_clause::=

画像の説明

mining_attribute_clause::=

画像の説明

用途

このファンクションは、DBMS_DATA_MININGパッケージまたはOracle Data Mining Java APIを使用して作成した分類モデルで使用するためのものです。このファンクションは、他の型のモデルに対しては無効です。このファンクションは、複数クラスの分類の使用例で、すべてのクラスを含むオブジェクトのVARRAYを戻します。オブジェクト・フィールドには、PREDICTIONPROBABILITYおよびCOSTの名前が付きます。PREDICTIONフィールドのデータ型は、モデルの作成中に使用するターゲット値の型によって異なります。他の2つのフィールドは、両方ともOracleのNUMBERになります。要素は最適な予測から最低の予測の順序で戻されます。

cost_matrix_clause句は、すべての分類モデルに対して有効です。この句を指定すると、bestNcutoffの両方は、予測の確率ではなく予測コストに関して処理されます。bestNの値は、結果をNの最適(最低)コストを持つターゲット・クラスに制限し、cutoffは、ターゲット・クラスを、指定したカットオフ以下のコストを持つターゲット・クラスに制限します。

この句を指定すると、コレクションの各オブジェクトは、予測値を含むスカラー値(データ型はモデルの作成時に使用されるターゲット値の型によって異なる)、予測確率および予測コスト(両方ともOracleのNUMBER)になります。

この句を指定しない場合、VARRAYの各オブジェクトは、予測値と予測確率を含むスカラーの組になります。戻されるデータ型は、前述の説明と同様です。

mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。詳細は、「mining_attribute_clause」を参照してください。

参照:

  • Oracle Data Miningの詳細は、『Oracle Data Mining概要』を参照してください。

  • コードで使用可能なデモ・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

  • SQLデータ・マイニング・ファンクションを使用したリアルタイム・スコアリングの詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

  • DBMS_DATA_MININGパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

 

次の例では、提携カードの使用および不使用の可能性とコストを、10人の顧客それぞれで示します。この例はバイナリ・ターゲットを持ちますが、このような問合せは「Low」、「Med」、「High」などの複数クラスの分類でも有効です。

この例と前提条件のデータ・マイニング操作は、デモ・ファイル$ORACLE_HOME/rdbms/demo/dmdtdemo.sqlで確認できます。データ・マイニングのデモ・ファイルの一般情報は、『Oracle Data Mining管理者ガイド』を参照してください。次に、このファンクションの構文の使用例を示します。

SELECT T.cust_id, S.prediction, S.probability, S.cost
  FROM (SELECT cust_id,
               PREDICTION_SET(dt_sh_clas_sample COST MODEL USING *) pset
          FROM mining_data_apply_v
         WHERE cust_id < 100011) T,
       TABLE(T.pset) S
ORDER BY cust_id, S.prediction;

   CUST_ID PREDICTION PROBABILITY  COST
---------- ---------- ----------- -----
    100001          0      .96682   .27
    100001          1      .03318   .97
    100002          0      .74038  2.08
    100002          1      .25962   .74
    100003          0      .90909   .73
    100003          1      .09091   .91
    100004          0      .90909   .73
    100004          1      .09091   .91
    100005          0      .27236  5.82
    100005          1      .72764   .27
    100006          0     1.00000   .00
    100006          1      .00000  1.00
    100007          0      .90909   .73
    100007          1      .09091   .91
    100008          0      .90909   .73
    100008          1      .09091   .91
    100009          0      .27236  5.82
    100009          1      .72764   .27
    100010          0      .80808  1.54
    100010          1      .19192   .81
 
20 rows selected.

PRESENTNNV

構文


画像の説明

用途

PRESENTNNVファンクションは、SELECT文のmodel_clauseでのみ、およびモデル・ルールの右側でのみ使用できます。このファンクションは、cell_referencemodel_clauseの実行前に存在し、PRESENTNNVの評価時にNULLではない場合にexpr1を戻します。それ以外の場合はexpr2を戻します。このファンクションは、NVL2とは異なります。NVL2は、model_clauseの実行前の状態のデータを評価するのではなく、実行時のデータを評価します。

参照:

  • 構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

  • 比較については、「NVL2」を参照してください。

 

次の例では、2002年のマウス・パッドの売上を含む行が存在し、その売上値がNULLではない場合、その売上値を変更しません。その行が存在し、売上値がNULLの場合、その売上値を10に設定します。その行が存在しない場合、売上値を10に設定して行を作成します。

SELECT country, prod, year, s
  FROM sales_view_ref
  MODEL
    PARTITION BY (country)
    DIMENSION BY (prod, year)
    MEASURES (sale s)
    IGNORE NAV
    UNIQUE DIMENSION
    RULES UPSERT SEQUENTIAL ORDER
    ( s['Mouse Pad', 2002] = 
        PRESENTNNV(s['Mouse Pad', 2002], s['Mouse Pad', 2002], 10)
    )
  ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     3269.09
France        Mouse Pad                                    2002          10
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     9535.08
Germany       Mouse Pad                                    2002          10
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

18 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「例」を参照してください。


PRESENTV

構文


画像の説明

用途

PRESENTVファンクションは、SELECT文のmodel_clauseでのみ、およびモデル・ルールの右側でのみ使用できます。このファンクションは、cell_referenceが存在する場合、model_clauseを実行する前にexpr1を戻します。それ以外の場合はexpr2を戻します。

参照:

構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。 

次の例では、2000年のマウス・パッドの売上を含む行が存在する場合、2001年のマウス・パッドの売上を2000年のマウス・パッドの売上値に設定します。その行が存在しない場合、2001年のマウス・パッドの売上値を0(ゼロ)に設定して行を作成します。

SELECT country, prod, year, s
  FROM sales_view_ref
  MODEL
    PARTITION BY (country)
    DIMENSION BY (prod, year)
    MEASURES (sale s)
    IGNORE NAV
    UNIQUE DIMENSION
    RULES UPSERT SEQUENTIAL ORDER
    (
      s['Mouse Pad', 2001] =
        PRESENTV(s['Mouse Pad', 2000], s['Mouse Pad', 2000], 0)
    )
  ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     3000.72
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     7375.46
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。


PREVIOUS

構文


画像の説明

用途

PREVIOUSファンクションは、SELECT文のmodel_clauseでのみ、およびmodel_rules_clauseITERATE ... [ UNTIL ]句でのみ使用できます。このファンクションは、各反復の最初にcell_referenceの値を戻します。

参照:

構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。 

次の例では、反復の最初と最後にあるcur_valの値の差が1未満になるまで、最大1000回ルールを繰り返します。

SELECT dim_col, cur_val, num_of_iterations
  FROM (SELECT 1 AS dim_col, 10 AS cur_val FROM dual)
  MODEL
    DIMENSION BY (dim_col)
    MEASURES (cur_val, 0 num_of_iterations)
    IGNORE NAV
    UNIQUE DIMENSION
    RULES ITERATE (1000) UNTIL (PREVIOUS(cur_val[1]) - cur_val[1] < 1)
    (
      cur_val[1] = cur_val[1]/2,
      num_of_iterations[1] = num_of_iterations[1] + 1
    );

   DIM_COL    CUR_VAL NUM_OF_ITERATIONS
---------- ---------- -----------------
         1       .625                 4

RANK

集計の構文

rank_aggregate::=

画像の説明

分析の構文

rank_analytic::=

画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

RANKは、一連の値における値のランクを計算します。戻り型は、NUMBERです。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

ランク付け基準と同じ値を持つ行は、同じランクになります。Oracle Databaseは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。このファンクションは、上位N番および下位N番のレポートに有効です。

集計の例

次の例では、サンプル表hr.employeesから、給与が15,500ドルであり、歩合が5%である不確定な従業員のランクを計算します。

SELECT RANK(15500, .05) WITHIN GROUP
   (ORDER BY salary, commission_pct) "Rank"
   FROM employees;

      Rank
----------
       105

同様に、次の問合せは、従業員の給与から給与が15,500ドルのランクを戻します。

SELECT RANK(15500) WITHIN GROUP 
   (ORDER BY salary DESC) "Rank of 15500" 
   FROM employees;

Rank of 15500
--------------
             4

分析の例

次の例では、サンプル・スキーマhrの部門80の従業員を、その給与および歩合に基づいてランク付けします。給与が同じ場合は同じランクになるため、連続しないランクになります。この例と、「DENSE_RANK」の例を比較してください。

SELECT department_id, last_name, salary, commission_pct,
   RANK() OVER (PARTITION BY department_id
   ORDER BY salary DESC, commission_pct) "Rank"
FROM employees WHERE department_id = 80
ORDER BY department_id, last_name, salary, commission_pct, "Rank";

DEPARTMENT_ID LAST_NAME                     SALARY COMMISSION_PCT       Rank
------------- ------------------------- ---------- -------------- ----------
           80 Abel                           11000             .3          5
           80 Ande                            6400             .1         31
           80 Banda                           6200             .1         32
           80 Bates                           7300            .15         26
           80 Bernstein                       9500            .25         14
           80 Bloom                          10000             .2          9
           80 Cambrault                       7500             .2         23
           80 Cambrault                      11000             .3          5
           80 Doran                           7500             .3         24
           80 Errazuriz                      12000             .3          3
           80 Fox                             9600             .2         12
           80 Greene                          9500            .15         13
           80 Hall                            9000            .25         16
           80 Hutton                          8800            .25         18
           80 Johnson                         6200             .1         32
           80 King                           10000            .35         11
           80 Kumar                           6100             .1         34
           80 Lee                             6800             .1         30
           80 Livingston                      8400             .2         20
           80 Marvins                         7200             .1         27
           80 McEwen                          9000            .35         17
           80 Olsen                           8000             .2         21
           80 Ozer                           11500            .25          4
           80 Partners                       13500             .3          2
           80 Russell                        14000             .4          1
           80 Sewall                          7000            .25         29
           80 Smith                           7400            .15         25
           80 Smith                           8000             .3         22
           80 Sully                           9500            .35         15
           80 Taylor                          8600             .2         19
           80 Tucker                         10000             .3         10
           80 Tuvault                         7000            .15         28
           80 Vishney                        10500            .25          8
           80 Zlotkey                        10500             .2          7

RATIO_TO_REPORT

構文


画像の説明

参照:

構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。 

用途

RATIO_TO_REPORTは分析ファンクションです。このファンクションは、ある値の集合の合計に対する、その値の比率を計算します。exprがNULLの場合は、値もNULLになります。

値の集合は、query_partition_clauseによって決まります。この句を省略すると、比率は、問合せによって戻されるすべての行で計算されます。

exprには、RATIO_TO_REPORTまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

次の例では、すべての事務員の給与の合計に対する各事務員の給与の割合の値を計算します。

SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
   FROM employees
   WHERE job_id = 'PU_CLERK'
   ORDER BY last_name, salary, rr;

LAST_NAME                     SALARY         RR
------------------------- ---------- ----------
Baida                           2900 .208633094
Colmenares                      2500 .179856115
Himuro                          2600  .18705036
Khoo                            3100 .223021583
Tobias                          2800 .201438849

RAWTOHEX

構文


画像の説明

用途

RAWTOHEXは、rawを16進表記で表した文字値に変換します。

SQL組込みファンクションとして使用される場合、RAWTOHEXは、LONGLONG RAWCLOBBLOBまたはBFILE以外のすべてのスカラー・データ型の引数を取ります。このファンクションは、rawの値を構成するバイトの16進表記でVARCHAR2値を戻します。各バイトは、2桁の16進数で表されます。


注意:

RAWTOHEXは、PL/SQL組込みファンクションとして使用される場合は異なる動作をします。詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。 


次の例は、RAW列の値に等しい16進を戻します。

SELECT RAWTOHEX(raw_column) "Graphics"
   FROM graphics;

Graphics
--------
7D  

参照:

「RAWデータ型とLONG RAWデータ型」および「HEXTORAW」を参照してください。 


RAWTONHEX

構文


画像の説明

用途

RAWTONHEXは、rawを16進表記で表した文字値に変換します。RAWTONHEX (raw)は、TO_NCHAR(RAWTOHEX(raw))と同じです。戻り値は、常に各国語キャラクタ・セットです。

次の例は、RAW列の値に等しい16進を戻します。

SELECT RAWTONHEX(raw_column),
   DUMP ( RAWTONHEX (raw_column) ) "DUMP" 
   FROM graphics; 

RAWTONHEX(RA)           DUMP 
----------------------- ------------------------------ 
7D                      Typ=1 Len=4: 0,55,0,68 

REF

構文


画像の説明

用途

REFは、引数としてオブジェクト表またはオブジェクト・ビューの行に関連付けられた相関変数(表別名)を取ります。変数または行にバインドされたオブジェクト・インスタンスについてのREF値が戻ります。

サンプル・スキーマoeには、次のように定義されたcust_address_typという型が含まれます。

 Attribute                                 Type
 ----------------------------- ----------------
 STREET_ADDRESS                    VARCHAR2(40)
 POSTAL_CODE                       VARCHAR2(10)
 CITY                              VARCHAR2(30)
 STATE_PROVINCE                    VARCHAR2(10)
 COUNTRY_ID                             CHAR(2)

次の例では、サンプル型oe.cust_address_typに基づく表(addresses表)を作成した後、その表に行を挿入し、その表からその型のオブジェクト・インスタンスのREF値を取り出します。

CREATE TABLE addresses OF cust_address_typ;

INSERT INTO addresses VALUES (
   '123 First Street', '4GF H1J', 'Our Town', 'Ourcounty', 'US');

SELECT REF(e) FROM addresses e;

REF(E)
-----------------------------------------------------------------------------------
00002802097CD1261E51925B60E0340800208254367CD1261E51905B60E034080020825436010101820000

参照:

REFの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。 


REFTOHEX

構文


画像の説明

用途

REFTOHEXは、引数exprを16進で表した文字値に変換します。exprは、REFを戻す必要があります。

サンプル・スキーマoeにはwarehouse_typが含まれています。次の例では、その型を基に、ある列のREF値をそれに等しい16進を含む文字値に変換する方法を示します。

CREATE TABLE warehouse_table OF warehouse_typ
   (PRIMARY KEY (warehouse_id));

CREATE TABLE location_table
   (location_number NUMBER, building REF warehouse_typ 
   SCOPE IS warehouse_table);

INSERT INTO warehouse_table VALUES (1, 'Downtown', 99);

INSERT INTO location_table SELECT 10, REF(w) FROM warehouse_table w;

SELECT REFTOHEX(building) FROM location_table;

REFTOHEX(BUILDING)
--------------------------------------------------------------------------
0000220208859B5E9255C31760E034080020825436859B5E9255C21760E034080020825436

REGEXP_COUNT

構文


画像の説明

用途

REGEXP_COUNTは、ソース文字列でパターンが発生した回数を戻すことによって、REGEXP_INSTRファンクションの機能を補完します。このファンクションは、入力キャラクタ・セットによって定義された文字を使用して、文字列を評価します。また、patternの発生回数を示す整数を戻します。一致する値が見つからない場合は0(ゼロ)を戻します。

次の例では、pattern内の部分正規表現のカッコが無視されることを示します。

SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
   FROM DUAL;
 
REGEXP_COUNT
------------
           5

次の例では、ファンクションは3番目の文字でソース文字列の評価を開始するため、patternの最初の出現はスキップされます。

SELECT REGEXP_COUNT('123123123123', '123', 3, 'i') COUNT FROM DUAL; 

     COUNT
----------
         3

REGEXP_INSTR

構文


画像の説明

用途

REGEXP_INSTRは、正規表現パターンで文字列を検索できるようにINSTRの機能を拡張したものです。このファンクションは、入力キャラクタ・セットによって定義された文字を使用して、文字列を評価します。また、return_option引数の値に基づいて、一致したサブストリングの開始位置または終了位置を示す整数を戻します。一致する値が見つからない場合は0(ゼロ)を戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録C「Oracleの正規表現のサポート」を参照してください。

次の例では、文字列を調べて、空白以外の文字を検索します。Oracleは、文字列の最初の文字から検索を開始し、空白以外の文字が6つ目に出現する開始位置(デフォルト)を戻します。

SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[^ ]+', 1, 6) "REGEXP_INSTR"
  FROM DUAL;

REGEXP_INSTR
------------
          37

次の例では、文字列を調べて、大/小文字を区別せずにsrまたはpで始まり、任意の6つのアルファベット文字が続く単語を検索します。Oracleは、文字列の3つ目の文字から検索を開始し、大文字か小文字のsrまたはpで始まる7文字の単語が2つ目に出現した後の文字の、文字列内の位置を戻します。

SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
  FROM DUAL;

REGEXP_INSTR
------------
          28

次の例では、subexpr引数を使用してpattern内の特定の部分正規表現を検索します。最初の文は、最初の部分正規表現にある最初の文字のソース文字列(123)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 1) 
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
1

次の文は、2番目の部分正規表現にある最初の文字のソース文字列(45678)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 2) 
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
4

次の文は、4番目の部分正規表現にある最初の文字のソース文字列(78)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 4) 
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
7

REGEXP_REPLACE

構文


画像の説明

用途

REGEXP_REPLACEは、正規表現パターンで文字列を検索できるようにREPLACEの機能を拡張したものです。デフォルトでは、このファンクションは、正規表現パターンに一致するすべての文字をreplace_stringに置き換えてsource_charを戻します。source_charと同じキャラクタ・セットの文字列が戻されます。このファンクションは、1つ目の引数がLOBではない場合はVARCHAR2を戻し、1つ目の引数がLOBの場合はCLOBを戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録C「Oracleの正規表現のサポート」を参照してください。

次の例では、phone_numberを調べて、xxx.xxx.xxxxというパターンを検索します。その後、このパターンを(xxx) xxx-xxxxという書式に変更します。

SELECT
  REGEXP_REPLACE(phone_number,
                 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
                 '(\1) \2-\3') "REGEXP_REPLACE"
  FROM employees
  ORDER BY "REGEXP_REPLACE";

REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .

次の例では、country_nameを調べます。文字列内のNULLでない各文字の後に空白を挿入します。

SELECT
  REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"
  FROM countries;

REGEXP_REPLACE
--------------------------------------------------------------------------------
A r g e n t i n a
A u s t r a l i a
B e l g i u m
B r a z i l
C a n a d a
. . .

次の例では、文字列を調べて、2つ以上の空白を検索します。検索された2つ以上の空白を、それぞれ1つの空白に置換します。

SELECT
  REGEXP_REPLACE('500   Oracle     Parkway,    Redwood  Shores, CA',
                 '( ){2,}', ' ') "REGEXP_REPLACE"
  FROM DUAL;

REGEXP_REPLACE
--------------------------------------
500 Oracle Parkway, Redwood Shores, CA

REGEXP_SUBSTR

構文


画像の説明

用途

REGEXP_SUBSTRは、正規表現パターンで文字列を検索できるようにSUBSTRの機能を拡張したものです。REGEXP_INSTRと似ていますが、REGEXP_INSTRはサブストリングの位置ではなくサブストリング自体を戻します。このファンクションは、一致文字列の内容のみが必要で、ソース文字列内での位置は必要ない場合に有効です。このファンクションは、文字列をVARCHAR2またはCLOBデータとして、source_charと同じキャラクタ・セットで戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録C「Oracleの正規表現のサポート」を参照してください。

次の例では、文字列を調べて、カンマで区切られた最初のサブストリングを検索します。Oracle Databaseは、後にカンマが付いているカンマでない1つ以上の文字の前にあるカンマを検索します。該当するサブストリングが、前後のカンマを含めて戻されます。

SELECT
  REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
                ',[^,]+,') "REGEXPR_SUBSTR"
  FROM DUAL;

REGEXPR_SUBSTR
-----------------
, Redwood Shores,

次の例では、文字列を調べて、1つ以上の英数字を含むサブストリング、および任意でピリオド(.)が続くhttp://を検索します。Oracleは、http://と、スラッシュ(/)または文字列の末尾のいずれかとの間で、3〜4つのこのサブストリングを検索します。

SELECT
  REGEXP_SUBSTR('http://www.example.com/products',
                'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
  FROM DUAL;

REGEXP_SUBSTR
----------------------
http://www.example.com/

次の2つの例では、subexpr引数を使用してpattern内の特定の部分正規表現を戻します。最初の文は、pattern内の最初の部分正規表現を戻します。

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) 
"REGEXP_SUBSTR" FROM DUAL;

REGEXP_SUBSTR
-------------------
123

次の文は、pattern内の4番目の部分正規表現を戻します。

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4) 
"REGEXP_SUBSTR" FROM DUAL;

REGEXP_SUBSTR
-------------------
78

REGR_(線形回帰)ファンクション

線形回帰ファンクションは次のとおりです。

構文

linear_regr::=

画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

線形回帰ファンクションは、微分最小2乗法で求めた回帰直線を数値の組の集合に対応付けます。これは、集計ファンクションまたは分析ファンクションとして使用できます。

参照:

exprの書式の詳細は、「集計ファンクション」および「SQL式」を参照してください。 

これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

Oracleは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1 , expr2)の集合に適用します。Oracleは、データでの引渡し中、同時にすべての回帰ファンクションを計算します。

expr1は、従属変数の値(y値)として解析されます。expr2は、独立変数の値(x値)として解析されます。

これ以外のすべての回帰ファンクションの戻り値は数値データ型で、NULLになる場合もあります。

REGR_SXYREGR_SXXREGR_SYYは補助ファンクションです。これらは、様々な診断統計の計算に使用されます。

次の例は、サンプル表sh.salesおよびsh.productsに基づいています。

一般的な線形回帰の例

次の例では、分析書式で使用される様々な線形回帰ファンクションを比較します。これらのファンクションの分析書式は、モデル別で従業員ごとに予測される給与の検索などの計算で、回帰統計を使用する場合に有効です。次の個々の線形回帰ファンクションについての項では、これらのファンクションの集計書式の例を示します。

SELECT job_id, employee_id ID, salary,
REGR_SLOPE(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) intcpt,
REGR_R2(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) rsqr,
REGR_COUNT(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) count,
REGR_AVGX(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) avgx,
REGR_AVGY(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) avgy
   FROM employees
   WHERE department_id in (50, 80)
   ORDER BY job_id, employee_id;

JOB_ID        ID     SALARY SLOPE    INTCPT  RSQR  COUNT       AVGX      AVGY
---------- ----- ---------- ----- --------- ----- ------ ---------- ---------
SA_MAN       145      14000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       146      13500  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       147      12000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       148      11000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       149      10500  .355 -1707.035  .832      5  12200.000  2626.589
SA_REP       150      10000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       151       9500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       152       9000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       153       8000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       154       7500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       155       7000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       156      10000  .257   404.763  .647     29   8396.552  2561.244
...

REGR_SLOPEおよびREGR_INTERCEPTの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与に関する線形回帰モデルの傾きと回帰を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_SLOPE(SYSDATE-hire_date, salary) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary) intercept
   FROM employees
   WHERE department_id in (50,80)
   GROUP BY job_id
   ORDER BY job_id;

JOB_ID     SLOPE    INTERCEPT
---------- ----- ------------
SA_MAN      .355 -1707.030762
SA_REP      .257   404.767151
SH_CLERK    .745   159.015293
ST_CLERK    .904   134.409050
ST_MAN      .479  -570.077291

REGR_COUNTの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与について、job_id別の数を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_COUNT(SYSDATE-hire_date, salary) count
   FROM employees
   WHERE department_id in (30, 50)
   GROUP BY job_id
   ORDER BY job_id, count;

JOB_ID          COUNT
---------- ----------
PU_CLERK            5
PU_MAN              1
SH_CLERK           20
ST_CLERK           20
ST_MAN              5

REGR_R2の例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の線形回帰に対する決定係数を計算します。

SELECT job_id,
REGR_R2(SYSDATE-hire_date, salary) Regr_R2
   FROM employees
   WHERE department_id in (80, 50)
   GROUP by job_id
  ORDER BY job_id, Regr_R2;

JOB_ID        REGR_R2
---------- ----------
SA_MAN      .83244748
SA_REP     .647007156
SH_CLERK   .879799698
ST_CLERK   .742808493
ST_MAN      .69418508

REGR_AVGYおよびREGR_AVGXの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の平均値を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_AVGY(SYSDATE-hire_date, salary) avgy,
REGR_AVGX(SYSDATE-hire_date, salary) avgx
   FROM employees
   WHERE department_id in (30,50)
   GROUP BY job_id
   ORDER BY job_id, avgy, avgx;

JOB_ID           AVGY       AVGX
---------- ---------- ----------
PU_CLERK    2950.3778       2780
PU_MAN      4026.5778      11000
SH_CLERK    2773.0778       3215
ST_CLERK    2872.7278       2785
ST_MAN      3140.1778       7280

REGR_SXY、REGR_SXXおよびREGR_SYYの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の線形回帰について、3種類の診断統計を計算します。

SELECT job_id,
REGR_SXY(SYSDATE-hire_date, salary) regr_sxy,
REGR_SXX(SYSDATE-hire_date, salary) regr_sxx,
REGR_SYY(SYSDATE-hire_date, salary) regr_syy
   FROM employees
   WHERE department_id in (80, 50)
   GROUP BY job_id
   ORDER BY job_id;
 
JOB_ID       REGR_SXY    REGR_SXX   REGR_SYY
---------- ---------- ----------- ----------
SA_MAN        3303500   9300000.0    1409642
SA_REP     16819665.5  65489655.2 6676562.55
SH_CLERK      4248650   5705500.0    3596039
ST_CLERK      3531545   3905500.0 4299084.55
ST_MAN        2180460   4548000.0  1505915.2

REMAINDER

構文


画像の説明

用途

REMAINDERn2n1で割った余りを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

MODファンクションはREMAINDERと似ていますが、MODの式ではFLOORを使用します。これに対してREMAINDERではROUNDを使用します。詳細は、「MOD」を参照してください。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。 

次の例では、「例」で作成されたfloat_point_demo表を使用して、2つの浮動小数点数を割り、算出された余りを戻します。

SELECT bin_float, bin_double, REMAINDER(bin_float, bin_double)
  FROM float_point_demo;

 BIN_FLOAT BIN_DOUBLE REMAINDER(BIN_FLOAT,BIN_DOUBLE)
---------- ---------- -------------------------------
1.235E+003 1.235E+003                      5.859E-005

REPLACE

構文


画像の説明

用途

REPLACEは、replacement_stringですべてのsearch_stringを変換してcharを戻します。replacement_stringを指定しない場合またはNULLの場合、すべてのsearch_stringが削除されます。search_stringがNULLの場合、charが戻されます。

charと同様に、search_stringおよびreplacement_stringは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。charと同じキャラクタ・セットの文字列が戻されます。このファンクションは、1つ目の引数がLOBではない場合はVARCHAR2を戻し、1つ目の引数がLOBの場合はCLOBを戻します。

REPLACEは、TRANSLATEファンクションに関連する機能を提供します。TRANSLATEは、単一文字を1対1で置き換えます。REPLACEファンクションでは、1つの文字列の置換および複数の文字列の削除を実行できます。

参照:

「TRANSLATE」 

次の例では、JBLに置換します。

SELECT REPLACE('JACK and JUE','J','BL') "Changes"
     FROM DUAL;

Changes
--------------
BLACK and BLUE

ROUND(数値)

構文

round_number::=

画像の説明

用途

ROUNDは、nを小数点以下integer桁に丸めた値を戻します。integerを指定しない場合、nは小数点以下が丸められます。integerが負の場合、nは小数点の左側に丸められます。

nには、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を指定できます。integerを指定しない場合、このファンクションは、nの数値データ型と同じデータ型で値ROUND(n, 0)を戻します。integerを指定すると、このファンクションはNUMBERを戻します。

ROUNDは、次の規則を使用して実行されます。

  1. nが0の場合、ROUNDintegerに関係なく常に0を戻します。

  2. nが負の場合、ROUND(n, integer)は、-ROUND(-n, integer)を戻します。

  3. nが正の場合は、次のとおりです。

    ROUND(n, integer) = FLOOR(n * POWER(10, integer) + 0.5) * POWER(10, -integer)
    
    

NUMBER値に適用されたROUNDが、浮動小数点で表現された同じ値に適用されたROUNDと少し異なる場合があります。この結果の相違は、NUMBERと浮動小数点値の内部表現の違いから発生します。相違が発生した場合、その相違は丸められた桁で1になります。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。Oracle DatabaseによるBINARY_FLOATおよびBINARY_DOUBLE値の処理方法の詳細は、「浮動小数点数」を参照してください。 

次の例では、数値を小数点以下1桁に丸めます。

SELECT ROUND(15.193,1) "Round" FROM DUAL;

     Round
----------
      15.2

次の例では、数値の小数点の左1桁を丸めます。

SELECT ROUND(15.193,-1) "Round" FROM DUAL;

     Round
----------
        20 


ROUND(日付)

構文

round_date::=

画像の説明

用途

ROUNDは、dateを書式モデルfmtで指定した単位に丸めた結果を戻します。このファンクションは、NLS_CALENDARセッション・パラメータの影響を受けません。このファンクションはグレゴリオ暦の規則に従って動作します。戻される値は、dateに異なる日時データ型を指定した場合でも、常にDATEデータ型です。fmtを省略すると、dateは最も近い日に丸められます。date式は、DATE値に変換される必要があります。

参照:

fmtで使用できる書式モデルについては、「ROUNDおよびTRUNC日付ファンクション」を参照してください。 

次の例では、次の年の最も近い日に丸めます。

SELECT ROUND (TO_DATE ('27-OCT-00'),'YEAR')
   "New Year" FROM DUAL;
 
New Year
---------
01-JAN-01

ROW_NUMBER

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

ROW_NUMBERは分析ファンクションです。このファンクションは、order_by_clauseに指定された行の、1から始まる順序シーケンスで、このファンクションが適用される各行(パーティションの各行、または問合せが戻す各行)に一意の数値を割り当てます。

指定された範囲のROW_NUMBER値を取得する問合せ内に、ROW_NUMBERを使用した副問合せをネストすることで、内側の問合せの結果から正確な行のサブセットを得ることができます。この方法でこのファンクションを使用すると、上位N番、下位N番および内部N番のレポートを実行できます。一貫した結果を戻すには、問合せで決定的なソート順序を使用する必要があります。

exprには、ROW_NUMBERまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

次の例では、hr.employees表で各部門の最も支給額の高い上位3人の従業員を検索します。従業員が3人未満の部門については、3行未満の行が戻されます。

SELECT department_id, first_name, last_name, salary
FROM
(
  SELECT
    department_id, first_name, last_name, salary,
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary desc) rn
  FROM employees
)
WHERE rn <= 3
ORDER BY department_id, salary DESC, last_name;

次の例は、sh.sales表の結合問合せです。1999年の売上高が上位5つの製品について2000年の売上高を検索し、2000年と1999年の差を比較します。各販売チャネルにおいて売上高上位の10製品が計算されます。

SELECT sales_2000.channel_desc, sales_2000.prod_name,
       sales_2000.amt amt_2000,  top_5_prods_1999_year.amt amt_1999,
       sales_2000.amt  - top_5_prods_1999_year.amt amt_diff
FROM
/* The first subquery finds the 5 top-selling products per channel in year 1999. */
  (SELECT channel_desc, prod_name, amt
   FROM
   (
     SELECT channel_desc, prod_name, sum(amount_sold) amt,
       ROW_NUMBER () OVER (PARTITION BY channel_desc
                           ORDER BY SUM(amount_sold) DESC) rn
     FROM sales, times, channels, products
     WHERE sales.time_id = times.time_id
       AND times.calendar_year = 1999
       AND channels.channel_id = sales.channel_id
       AND products.prod_id = sales.prod_id
     GROUP BY channel_desc, prod_name
   )
   WHERE rn <= 5
  ) top_5_prods_1999_year,
/* The next subquery finds sales per product and per channel in 2000. */
  (SELECT channel_desc, prod_name, sum(amount_sold) amt
     FROM sales, times, channels, products
     WHERE sales.time_id = times.time_id
       AND times.calendar_year = 2000
       AND channels.channel_id = sales.channel_id
       AND products.prod_id = sales.prod_id
     GROUP BY channel_desc, prod_name
  ) sales_2000
WHERE sales_2000.channel_desc = top_5_prods_1999_year.channel_desc
  AND sales_2000.prod_name = top_5_prods_1999_year.prod_name
ORDER BY sales_2000.channel_desc, sales_2000.prod_name
;
CHANNEL_DESC    PROD_NAME                                          AMT_2000   AMT_1999   AMT_DIFF
--------------- --------------==-------------------------------- ---------- ---------- ----------
Direct Sales     17" LCD w/built-in HDTV Tuner                     628855.7 1163645.78 -534790.08
Direct Sales     Envoy 256MB - 40GB                               502938.54  843377.88 -340439.34
Direct Sales     Envoy Ambassador                                2259566.96 1770349.25  489217.71
Direct Sales     Home Theatre Package with DVD-Audio/Video Play  1235674.15 1260791.44  -25117.29
Direct Sales     Mini DV Camcorder with 3.5" Swivel LCD           775851.87 1326302.51 -550450.64
Internet         17" LCD w/built-in HDTV Tuner                     31707.48   160974.7 -129267.22
Internet         8.3 Minitower Speaker                            404090.32  155235.25  248855.07
Internet         Envoy 256MB - 40GB                                28293.87  154072.02 -125778.15
Internet         Home Theatre Package with DVD-Audio/Video Play   155405.54  153175.04     2230.5
Internet         Mini DV Camcorder with 3.5" Swivel LCD            39726.23  189921.97 -150195.74
Partners         17" LCD w/built-in HDTV Tuner                    269973.97  325504.75  -55530.78
Partners         Envoy Ambassador                                1213063.59  614857.93  598205.66
Partners         Home Theatre Package with DVD-Audio/Video Play   700266.58  520166.26  180100.32
Partners         Mini DV Camcorder with 3.5" Swivel LCD           404265.85  520544.11 -116278.26
Partners         Unix/Windows 1-user pack                         374002.51  340123.02   33879.49

15 rows selected.

ROWIDTOCHAR

構文


画像の説明

用途

ROWIDTOCHARは、ROWIDの値をVARCHAR2データ型に変換します。この変換の結果は常に18文字です。

次の例では、employees表のROWID値を文字値に変換します。(結果はサンプル・データベースのビルドごとに異なります。)

SELECT ROWID FROM employees 
   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'
   ORDER BY ROWID;

ROWID
------------------
AAAFfIAAFAAAABSAAb

ROWIDTONCHAR

構文


画像の説明

用途

ROWIDTONCHARは、ROWID値をNVARCHAR2データ型に変換します。この変換の結果は、常に、各国語キャラクタ・セットの文字で、18文字です。

次の例では、ROWID値をNVARCHAR2文字列に変換します。

SELECT LENGTHB( ROWIDTONCHAR(ROWID) ) Length, ROWIDTONCHAR(ROWID) 
   FROM employees
   ORDER BY length; 

    LENGTH ROWIDTONCHAR(ROWID
---------- ------------------
        36 AAAL52AAFAAAABSABD
        36 AAAL52AAFAAAABSABV
. . .

RPAD

構文


画像の説明

用途

RPADは、expr1の右にexpr2で指定した文字を必要に応じて連続的に埋め込み、長さnにして戻します。このファンクションは、問合せの出力の書式設定に役立ちます。

expr1およびexpr2は、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、expr1が文字データ型の場合はVARCHAR2データ型、expr1が各国語キャラクタ・データ型の場合はNVARCHAR2データ型、expr1がLOBデータ型の場合はLOBデータ型になります。expr1と同じキャラクタ・セットの文字列が戻されます。引数nは、NUMBER型の整数か、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

expr1はNULL以外である必要があります。expr2を指定しない場合、デフォルトで空白1個が指定されます。expr1nより長い場合、このファンクションはnに収まるexpr1の一部を戻します。

引数nは、戻り値が画面に表示される場合の全体の長さです。多くのキャラクタ・セットでは、これは戻り値の文字数でもあります。ただし、マルチバイトのキャラクタ・セットでは、表示される文字列の長さが文字列の文字数と異なる場合もあります。

次の例では、空白にアスタリスクを埋め込んで、給与額の単純なチャートを作成します。

SELECT last_name, RPAD(' ', salary/1000/1, '*') "Salary"
   FROM employees
   WHERE department_id = 80
   ORDER BY last_name, "Salary";

LAST_NAME                 Salary
------------------------- ---------------
Abel                       **********
Ande                       *****
Banda                      *****
Bates                      ******
Bernstein                  ********
Bloom                      *********
Cambrault                  **********
Cambrault                  ******
Doran                      ******
Errazuriz                  ***********
Fox                        ********
Greene                     ********
Hall                       ********
Hutton                     *******
Johnson                    *****
King                       *********
. . .

RTRIM

構文


画像の説明

用途

RTRIMは、charの右端から、setに指定されたすべての文字を削除します。このファンクションは、問合せの出力の書式設定に役立ちます。

setを指定しない場合、デフォルトで空白1個が指定されます。charが文字リテラルの場合、一重引用符で囲む必要があります。RTRIMLTRIMと同様の働きをします。

charおよびsetは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型、charが各国語キャラクタデータ型の場合はNVARCHAR2データ型、charがLOBデータ型の場合はLOBデータ型になります。

参照:

「LTRIM」 

次の例では、文字列の右端にあるすべてのピリオド、スラッシュおよび等号を文字列から削除します。

SELECT RTRIM('BROWNING: ./=./=./=./=./=.=','/=.') "RTRIM example" FROM DUAL;
 
RTRIM exam
----------
BROWNING:

SCN_TO_TIMESTAMP

構文


画像の説明

用途

SCN_TO_TIMESTAMPは、引数として、システム変更番号(SCN)と評価される数値を取り、そのSCNに関連付けられた概数のタイムスタンプを戻します。戻り値のデータ型はTIMESTAMPです。このファンクションは、SCNに関連付けられたタイムスタンプを調べる場合に有効です。たとえば、このファンクションをORA_ROWSCN疑似列とともに使用して、行への最新の変更にタイムスタンプを関連付けることができます。

注意:

  • 結果値の通常の精度は3秒です。

  • SCNとSCN生成時のタイムスタンプの関連は、一定期間データベースで記憶されます。この期間は、最大で自動調整されたUNDO保存期間(データベースが自動UNDO管理モードで実行されている場合)およびデータベース内のすべてのフラッシュバック・アーカイブの保存時間となりますが、120時間以上になります。関連が不要となるまでの経過時間には、データベースが開かれているときの時間のみが加算されます。SCN_TO_TIMESTAMPの引数に対して指定されたSCNが古すぎる場合は、エラーが戻されます。

 

参照:

「ORA_ROWSCN疑似列」および「TIMESTAMP_TO_SCN」を参照してください。 

次の例では、ORA_ROWSCN疑似列を使用して行への最新の変更のシステム変更番号を判断し、SCN_TO_TIMESTAMPを使用してそのSCNをタイムスタンプに変換します。

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
   WHERE employee_id = 188;

このような問合せを使用して、Oracleフラッシュバック問合せで使用するためにシステム変更番号をタイムスタンプに変換することもできます。

SELECT salary FROM employees WHERE employee_id = 188;
    SALARY
----------
      3800

UPDATE employees SET salary = salary*10 WHERE employee_id = 188;
COMMIT;

SELECT salary FROM employees WHERE employee_id = 188;
    SALARY
----------
     38000

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
   WHERE employee_id = 188;
SCN_TO_TIMESTAMP(ORA_ROWSCN)
---------------------------------------------------------------------------
28-AUG-03 01.58.01.000000000 PM

FLASHBACK TABLE employees TO TIMESTAMP
   TO_TIMESTAMP('28-AUG-03 01.00.00.000000000 PM');

SELECT salary FROM employees WHERE employee_id = 188;  
    SALARY
----------
      3800

SESSIONTIMEZONE

構文


画像の説明

用途

SESSIONTIMEZONEは、現行のセッションのタイムゾーンを戻します。戻り型は、タイムゾーン・オフセット('[+|]TZH:TZM'という書式の文字列型)またはタイムゾーン地域名です。これは、最近のALTER SESSION文でユーザーが指定したセッション・タイムゾーンの値によって異なります。


注意:

環境変数ORA_SDTZを使用して、デフォルトのクライアント・セッションのタイムゾーンを設定できます。この変数の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


次の例では、現行のセッションのタイムゾーンを戻します。

SELECT SESSIONTIMEZONE FROM DUAL;

SESSION
-------
-08:00

SET

構文


画像の説明

用途

SETは、重複を排除することによってネストした表を単一の集合に変換します。このファンクションは、各要素が一意であるネストした表を戻します。戻されるネストした表のデータ型は、入力されたネストした表と同じです。

ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

次の例では、customers_demo表から、ネストした表列cust_address_ntabの一意の要素を選択します。

SELECT customer_id, SET(cust_address_ntab) address
  FROM customers_demo
  ORDER BY customer_id;

CUSTOMER_ID ADDRESS(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------- ------------------------------------------------------------------------
        101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
        102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
        103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
        104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
        105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
. . .

この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。


SIGN

構文


画像の説明

用途

SIGNは、nの符号を戻します。このファンクションは、引数として、任意の数値データ型、または暗黙的にNUMBERに変換可能な数値以外のデータ型を取り、NUMBERを戻します。

NUMBER型の値の場合、符号は次のとおりです。

浮動小数点数(BINARY_FLOATおよびBINARY_DOUBLE)の場合、このファンクションは数値の符号ビットを戻します。符号ビットは次のとおりです。

次の例では、ファンクションの引数(-15)が0より小さいことを示します。

SELECT SIGN(-15) "Sign" FROM DUAL;

      Sign
----------
        -1

SIN

構文


画像の説明

用途

SINは、n(ラジアンで表された角度)のサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、30度のサインを戻します。

SELECT SIN(30 * 3.14159265359/180)
 "Sine of 30 degrees" FROM DUAL;

Sine of 30 degrees
------------------
                .5

SINH

構文


画像の説明

用途

SINHは、nの双曲線サインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、1の双曲線サインを戻します。

SELECT SINH(1) "Hyperbolic sine of 1" FROM DUAL;

Hyperbolic sine of 1
--------------------
          1.17520119

SOUNDEX

構文


画像の説明

用途

SOUNDEXは、charと同じ音声表現を持つ文字列を戻します。このファンクションによって、綴りが異なっても発音が類似した英単語を比較できます。

音声表現については、『The Art of Computer Programming, Volume 3: Sorting and Searching』(Donald E. Knuth著)で次のように定義されています。

  1. 文字列の最初の文字を残し、a、e、h、i、o、u、w、yの文字が出てきた場合にはすべて削除します。

  2. 残った2文字目以降の文字に対し、次のように数値を割り当てます。

    b, f, p, v = 1
    c, g, j, k, q, s, x, z = 2
    d, t = 3
    l = 4
    m, n = 5
    r = 6
    
    
  3. 元の名前(1つ目の定義を行う前)で、同じ数値を持つ2つ以上の文字が並んでいるか、またはhとwの間の文字以外と並んでいる場合は、最初の文字以外のすべての文字を削除します。

  4. 最初の4バイトを0(ゼロ)で埋めて戻します。

charは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。戻り値は、charと同じデータ型です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、「Smyth」と同じ音声表現を持つ従業員を戻します。

SELECT last_name, first_name
     FROM hr.employees
     WHERE SOUNDEX(last_name)
         = SOUNDEX('SMYTHE')
     ORDER BY last_name, first_name;

LAST_NAME  FIRST_NAME
---------- ----------
Smith      Lindsey
Smith      William

SQRT

構文


画像の説明

用途

SQRTは、nの平方根を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、26の平方根を戻します。

SELECT SQRT(26) "Square root" FROM DUAL;

Square root
-----------
5.09901951 

STATS_BINOMIAL_TEST

構文


画像の説明

用途

STATS_BINOMIAL_TESTは、有効な値が2つのみである二値変数に使用する直接確立法です。このファンクションは、標本の割合と指定された割合との差をテストします。このテストでは通常、小さいサイズの標本が使用されます。

このファンクションは4つの引数を取ります。expr1はテスト対象の標本、expr2は割合を求める値、pはテストの基準となる割合です。4つ目の引数はVARCHAR2型の戻り値です。4つ目の引数を指定しない場合、デフォルトでTWO_SIDED_PROBが戻り値になります。表5-3に、戻り値の意味を示します。

表5-3    STATS_BINOMIAL_TESTの戻り値 
戻り値  意味 

TWO_SIDED_PROB 

指定された母集団の割合pが、観測された割合より外側になる確率 

EXACT_PROB 

指定された母集団の割合pが、観測された割合と正確に同じ値になる確率 

ONE_SIDED_PROB_OR_MORE 

指定された母集団の割合pが、観測された割合以上になる確率 

ONE_SIDED_PROB_OR_LESS 

指定された母集団の割合pが、観測された割合以下になる確率 

EXACT_PROBでは、pと一致する割合が戻される確率が戻されます。標本における割合が、50%と大幅に異なるか(有意差があるか)どうかをテストする場合、通常、pを0.50に設定します。割合が異なるかどうかのみをテストする場合、戻り値にTWO_SIDED_PROBを使用します。割合がexpr2の値より大きいかどうかをテストする場合、戻り値にONE_SIDED_PROB_OR_MOREを使用します。割合がexpr2より小さいかどうかをテストする場合、戻り値にONE_SIDED_PROB_OR_LESSを使用します。

STATS_BINOMIAL_TESTの例

次の例では、母集団の69%が男性であるという仮定に基づいて観測された男性数が、実際の男性数と正確に同一となる確率を判断します。

SELECT AVG(DECODE(cust_gender, 'M', 1, 0)) real_proportion,
       STATS_BINOMIAL_TEST
         (cust_gender, 'M', 0.68, 'EXACT_PROB') exact,
       STATS_BINOMIAL_TEST
         (cust_gender, 'M', 0.68, 'ONE_SIDED_PROB_OR_LESS') prob_or_less
  FROM sh.customers;

STATS_CROSSTAB

構文


画像の説明

用途

クロス集計は、2つの名義変数の分析に使用する方法です。STATS_CROSSTABファンクションは、2つの式とVARCHAR2型の戻り値の3つの引数を取ります。expr1およびexpr2は、分析対象の2つの変数です。このファンクションは、3つ目の引数に従って1つの数値を戻します。3つ目の引数を指定しない場合、デフォルトでCHISQ_SIGが戻り値になります。表5-4に、戻り値の意味を示します。

表5-4    STATS_CROSSTABの戻り値 
戻り値  意味 

CHISQ_OBS 

カイ2乗の観測値 

CHISQ_SIG 

カイ2乗の観測値の有意性 

CHISQ_DF 

カイ2乗の自由度 

PHI_COEFFICIENT 

ファイ係数 

CRAMERS_V 

クラメールのV統計 

CONT_COEFFICIENT 

一致係数 

COHENS_K 

コーエンのカッパ 

STATS_CROSSTABの例

次の例では、性別と収入水準の関連の強さを判断します。

SELECT STATS_CROSSTAB
         (cust_gender, cust_income_level, 'CHISQ_OBS') chi_squared,
       STATS_CROSSTAB
         (cust_gender, cust_income_level, 'CHISQ_SIG') p_value,
       STATS_CROSSTAB
         (cust_gender, cust_income_level, 'PHI_COEFFICIENT') phi_coefficient
  FROM sh.customers;

CHI_SQUARED    P_VALUE PHI_COEFFICIENT
----------- ---------- ---------------
 251.690705 1.2364E-47      .067367056


STATS_F_TEST

構文


画像の説明

用途

STATS_F_TESTは、2つの分散に有意差があるかどうかをテストします。fの観測値は、他方の分散に対する一方の分散の比率です。この値が1と大きく異なる場合は、通常、有意差があることを示しています。

このファンクションは3つの引数を取ります。expr1はグループ変数または独立変数で、expr2は値の標本です。このファンクションは、3つ目の引数に従って1つの数値を戻します。3つ目の引数を指定しない場合、デフォルトでTWO_SIDED_SIGが戻り値になります。表5-5に、戻り値の意味を示します。

表5-5    STATS_F_TESTの戻り値 
戻り値  意味 

STATISTIC 

fの観測値 

DF_NUM 

分子の自由度 

DF_DEN 

分母の自由度 

ONE_SIDED_SIG 

fの片側有意 

TWO_SIDED_SIG 

fの両側有意 

片側有意は常に上側確率に関連します。最後の引数expr3は、expr1で指定した2つのグループのうち、大きい値または分子(棄却域が上側確率の値)のグループを示します。

fの観測値は、2つ目のグループの分散に対する1つ目のグループの分散の比率です。fの観測値の有意性は、2つの分散が偶然に異なる確率で、0(ゼロ)〜1の数値です。この有意性の値が小さい場合、2つの分散に有意差があることを示しています。各分散の自由度は、標本における観測数から1を引いた値です。

STATS_F_TESTの例

次の例では、男性と女性のクレジット利用限度額に有意差があるかどうかを判断します。p_valueが0(ゼロ)に近くなく、f_statisticが1に近いという結果は、男性と女性のクレジット利用限度額の差が有意でないことを示しています。

SELECT VARIANCE(DECODE(cust_gender, 'M', cust_credit_limit, null)) var_men,
       VARIANCE(DECODE(cust_gender, 'F', cust_credit_limit, null)) var_women,
       STATS_F_TEST(cust_gender, cust_credit_limit, 'STATISTIC', 'F') f_statistic,
       STATS_F_TEST(cust_gender, cust_credit_limit) two_sided_p_value
  FROM sh.customers;

   VAR_MEN  VAR_WOMEN F_STATISTIC TWO_SIDED_P_VALUE
---------- ---------- ----------- -----------------
12879896.7   13046865  1.01296348        .311928071

STATS_KS_TEST

構文


画像の説明

用途

STATS_KS_TESTは、2つの標本を比較して、それらが同じ母集団に属しているか、または同じ分布を持つ母集団に属しているかをテストするKolmogorov-Smirnovファンクションです。このファンクションでは、標本の母集団が正規分布に従うとは仮定されません。

このファンクションは、2つの式とVARCHAR2型の戻り値の3つの引数を取ります。expr1には、データを2つのサンプルに分類する値を指定します。expr2には、各サンプルの値を指定します。expr1に、行を1つのみか3つ以上のサンプルに分類する値を指定すると、エラーが発生します。このファンクションは、3つ目の引数に従って1つの値を戻します。3つ目の引数を指定しない場合、デフォルトでSIGが戻り値になります。表5-6に、戻り値の意味を示します。

表5-6    STATS_KS_TESTの戻り値 
戻り値  意味 

STATISTIC 

Dの観測値 

SIG 

Dの有意性 

STATS_KS_TESTの例

次の例では、Kolmogorov-Smirnov検定を使用して、男性と女性に対する売上の分布が偶然であるかどうかを判断します。

SELECT stats_ks_test(cust_gender, amount_sold, 'STATISTIC') ks_statistic,
       stats_ks_test(cust_gender, amount_sold) p_value
  FROM sh.customers c, sh.sales s
  WHERE c.cust_id = s.cust_id;

KS_STATISTIC    P_VALUE
------------ ----------
  .003841396 .004080006


STATS_MODE

構文


画像の説明

用途

STATS_MODEは、引数として値の集合を取り、最も出現頻度の高い値を戻します。複数の最頻値が存在する場合、Oracle Databaseは1つの最頻値を選択し、その値のみを戻します。

複数の最頻値(存在する場合)を取得する場合は、次の不確定な問合せに示すとおり、他のファンクションの組合せを使用する必要があります。

SELECT x FROM (SELECT x, COUNT(x) AS cnt1
   FROM t GROUP BY x)
   WHERE cnt1 =
      (SELECT MAX(cnt2) FROM (SELECT COUNT(x) AS cnt2 FROM t GROUP BY x));

次の例では、hr.employees表の部門ごとの給与の最頻値を戻します。

SELECT department_id, STATS_MODE(salary) FROM employees
   GROUP BY department_id
   ORDER BY department_id, stats_mode(salary);

DEPARTMENT_ID STATS_MODE(SALARY)
------------- ------------------
           10               4400
           20               6000
           30               2500
           40               6500
           50               2500
           60               4800
           70              10000
           80               9500
           90              17000
          100               6900
          110               8300
                            7000

複数の最頻値が存在し、そのすべての最頻値を取得する必要がある場合は、次の例に示すとおり、他のファンクションの組合せを使用します。

SELECT commission_pct FROM
   (SELECT commission_pct, COUNT(commission_pct) AS cnt1 FROM employees
      GROUP BY commission_pct)
   WHERE cnt1 = 
      (SELECT MAX (cnt2) FROM
         (SELECT COUNT(commission_pct) AS cnt2
         FROM employees GROUP BY commission_pct))
   ORDER BY commission_pct;

COMMISSION_PCT
--------------
            .2
            .3

STATS_MW_TEST

構文


画像の説明

用途

Mann-Whitney検定では、2つの独立した標本を比較して、2つの母集団が同じ分布ファンクションを持つという帰無仮説を、2つの分布ファンクションは異なるという対立仮説に対してテストします。

STATS_MW_TESTでは、STATS_T_TEST_*ファンクションとは異なり、標本間の差が正規分布するとは仮定されません。このファンクションは、3つの引数とVARCHAR2型の戻り値を取ります。expr1には、データをグループに分類する値を指定します。expr2には、各グループの値を指定します。このファンクションは、3つ目の引数に従って1つの値を戻します。3つ目の引数を指定しない場合、デフォルトでTWO_SIDED_SIGが戻り値になります。表7-7に、戻り値の意味を示します。

ZまたはUの観測値の有意性は、2つの分散が偶然に異なる確率で、0(ゼロ)〜1の数値です。この有意性の値が小さい場合、2つの分散に有意差があることを示しています。各分散の自由度は、標本における観測数から1を引いた値です。

表5-7    STATS_MW_TESTの戻り値 
戻り値  意味 

STATISTIC 

Zの観測値 

U_STATISTIC 

Uの観測値 

ONE_SIDED_SIG 

Zの片側有意 

TWO_SIDED_SIG 

Zの両側有意 

片側有意は常に上側確率に関連します。最後の引数expr3は、expr1で指定した2つのグループのうち、大きい値(棄却域が上側確率の値)のグループを示します。

STATS_MW_TESTは、値の順位の合計における差を確認して、標本が同じ分布からのものである確率を計算します。標本が同じ分布に属している場合、各標本の合計値は近くなります。

STATS_MW_TESTの例

次の例では、Mann-Whitney検定を使用して、男性と女性に対する売上の分布が偶然であるかどうかを判断します。

SELECT STATS_MW_TEST
         (cust_gender, amount_sold, 'STATISTIC') z_statistic,
       STATS_MW_TEST
         (cust_gender, amount_sold, 'ONE_SIDED_SIG', 'F') one_sided_p_value
  FROM sh.customers c, sh.sales s
  WHERE c.cust_id = s.cust_id;

Z_STATISTIC ONE_SIDED_P_VALUE
----------- -----------------
 -1.4011509        .080584471

STATS_ONE_WAY_ANOVA

構文


画像の説明

用途

STATS_ONE_WAY_ANOVAファンクションによる一元配置分散分析では、分散の2つの異なる推定値を比較して、(複数のグループまたは変数の)平均値の差をテストして統計学的有意差を求めます。1つ目の推定値は、各グループまたはカテゴリ内の分散に基づきます。これは、群内平均平方または平均平方誤差と呼ばれます。2つ目の推定値は、グループの平均値の分散に基づきます。これは、群間平均平方と呼ばれます。グループの平均値に有意差がある場合、その群間平均平方は期待値より大きくなり、群内平均平方に一致しません。グループの平均平方が一貫している場合、2つの分散の推定値はほぼ同じになります。

STATS_ONE_WAY_ANOVAは、2つの式とVARCHAR2型の戻り値の3つの引数を取ります。expr1には、データをグループの集合に分割する独立変数またはグループ変数を指定します。expr2には、グループの各構成要素に対応する値を含む従属変数(数式)を指定します。このファンクションは、3つ目の引数に従って1つの数値を戻します。3つ目の引数を指定しない場合、デフォルトでSIGが戻り値になります。表5-8に、戻り値の意味を示します。

表5-8    STATS_ONE_WAY_ANOVAの戻り値 
戻り値  意味 

SUM_SQUARES_BETEEN 

グループ間平方和 

SUM_SQUARES_WITHIN 

グループ内平方和 

DF_BETWEEN 

グループ間の自由度 

DF_WITHIN 

グループ内の自由度 

MEAN_SQUARES_BETWEEN 

グループ間平均平方 

MEAN_SQUARES_WITHIN 

グループ内平均平方 

F_RATIO 

群内平方和に対する群間平方和の比率(MSB(グループ間平均平方)/MSW(グループ内平均平方)) 

SIG 

有意性 

一元配置分散分析の有意性は群間平均平方と群内平均平方の比率に対するf検定の片側有意を求めることによって判断されます。f検定では片側有意を使用する必要があります。これは、群間平均平方は、群内平均平方以上のみになるためです。そのため、STATS_ONE_WAY_ANOVAが戻す有意性は、グループ間の差が偶然である確率で、0(ゼロ)〜1の数値です。この数値が小さいほど、グループ間の有意差が大きくなります。f検定の実行の詳細は、「STATS_F_TEST」を参照してください。

STATS_ONE_WAY_ANOVAの例

次の例では、収入水準内での売上平均の差と、収入水準間での売上平均の差の有意性を判断します。p_valuesが0(ゼロ)に近いという結果は、男性と女性の両方に対して、様々な収入水準の人々に販売された商品の金額には有意差があることを示しています。

SELECT cust_gender,
       STATS_ONE_WAY_ANOVA(cust_income_level, amount_sold, 'F_RATIO') f_ratio,
       STATS_ONE_WAY_ANOVA(cust_income_level, amount_sold, 'SIG') p_value
  FROM sh.customers c, sh.sales s
  WHERE c.cust_id = s.cust_id
  GROUP BY cust_gender
  ORDER BY cust_gender;

C    F_RATIO    P_VALUE
- ---------- ----------
F 5.59536943 4.7840E-09
M  9.2865001 6.7139E-17


STATS_T_TEST_*

t検定ファンクションを次に示します。

構文

stats_t_test::=

画像の説明

用途

t検定では、平均値の差の有意性を測定します。この検定を使用して、2つのグループの平均値の比較、または1つのグループの平均値と定数の比較を行えます。1標本および2標本STATS_T_TEST_*ファンクションは、2つの式とVARCHAR2型の戻り値の3つの引数を取ります。このファンクションは、3つ目の引数に従って1つの数値を戻します。3つ目の引数を指定しない場合、デフォルトでTWO_SIDED_SIGが戻り値になります。表5-9に、戻り値の意味を示します。

表5-9    STATS_T_TEST_*の戻り値 
戻り値  意味 

STATISTIC 

tの観測値 

DF 

自由度 

ONE_SIDED_SIG 

tの片側有意 

TWO_SIDED_SIG 

tの両側有意 

2つの独立したSTATS_T_TEST_*ファンクションは、3つ目の引数がSTATISTICまたはONE_SIDED_SIGとして指定されている場合、4つ目の引数(expr3)を取ることができます。この場合、expr3は、expr1のどちらの値が大きい値(棄却域が上側確率の値)であるかを示します。

tの観測値の有意性は、tの値が偶然得られた確率で、0(ゼロ)〜1の数値です。この値が小さいほど、平均値間の有意差が大きくなります。片側有意は常に上側確率に関連します。1標本および対応のあるt-testの場合、最初の式が大きい値になります。独立したt-testの場合、expr3で指定した値が大きい値になります。

自由度は、tの観測値を求めるために使用したt検定の種類によって異なります。たとえば、1標本t検定(STATS_T_TEST_ONE)の場合、自由度は標本における観測数から1を引いた値です。


STATS_T_TEST_ONE

STATS_T_TEST_ONEファンクションでは、expr1には標本を指定し、expr2には標本平均値の比較対象となる定数平均値を指定します。このt-testの場合にのみ、expr2はオプションとなります。定数平均値は、デフォルトで0になります。このファンクションは、標本平均値と既知の平均値の差を、平均値の標準誤差で割ってt値を求めます(STATS_T_TEST_PAIREDでは、平均値の差の標準誤差で割ります)。

STATS_T_TEST_ONEの例

次の例では、平均表示価格と定数値60の差の有意性を判断します。

SELECT AVG(prod_list_price) group_mean,
       STATS_T_TEST_ONE(prod_list_price, 60, 'STATISTIC') t_observed,
       STATS_T_TEST_ONE(prod_list_price, 60) two_sided_p_value
  FROM sh.products;

GROUP_MEAN T_OBSERVED TWO_SIDED_P_VALUE
---------- ---------- -----------------
139.545556 2.32107746        .023158537

STATS_T_TEST_PAIRED

STATS_T_TEST_PAIREDファンクションでは、expr1およびexpr2には、比較する平均値の計算元の2つの標本をそれぞれ指定します。このファンクションは、標本平均値の差を、平均値の差の標準誤差で割ってt値を求めます(STATS_T_TEST_ONEでは、平均値の標準誤差で割ります)。


STATS_T_TEST_INDEPおよびSTATS_T_TEST_INDEPU

STATS_T_TEST_INDEPおよびSTATS_T_TEST_INDEPUファンクションでは、expr1はグループ列で、expr2は値の標本です。併合分散用のファンクション(STATS_T_TEST_INDEP)は、同様の分散を持つ2つの分布において、平均値が同じか異なるかをテストします。非併合分散用のファンクション(STATS_T_TEST_INDEPU)は、既知の有意差のある分散を持つ2つの分布においても、平均値が同じか異なるかをテストします。

これらのファンクションを使用する前に、標本の分散に有意差があるかどうかを判断しておくことをお薦めします。有意差がある場合、そのデータは異なる形状の分布に属している可能性があり、平均値の差が有効でない場合があります。f検定を実行して、分散の差を判断できます。分散に有意差がない場合、STATS_T_TEST_INDEPを使用します。有意差がある場合は、STATS_T_TEST_INDEPUを使用します。f検定の実行の詳細は、「STATS_F_TEST」を参照してください。

STATS_T_TEST_INDEPの例

次の例では、各分布の分散が同様である(併合分散)として、男性と女性に対する平均売上間の差の有意性を判断します。

SELECT SUBSTR(cust_income_level, 1, 22) income_level,
      AVG(DECODE(cust_gender, 'M', amount_sold, null)) sold_to_men,
      AVG(DECODE(cust_gender, 'F', amount_sold, null)) sold_to_women,
      STATS_T_TEST_INDEP(cust_gender, amount_sold, 'STATISTIC', 'F') t_observed,
      STATS_T_TEST_INDEP(cust_gender, amount_sold) two_sided_p_value
  FROM sh.customers c, sh.sales s
  WHERE c.cust_id = s.cust_id
  GROUP BY ROLLUP(cust_income_level)
  ORDER BY income_level, sold_to_men, sold_to_women, t_observed;

INCOME_LEVEL           SOLD_TO_MEN SOLD_TO_WOMEN T_OBSERVED TWO_SIDED_P_VALUE
---------------------- ----------- ------------- ---------- -----------------
A: Below 30,000          105.28349    99.4281447 -1.9880629        .046811482
B: 30,000 - 49,999       102.59651    109.829642 3.04330875        .002341053
C: 50,000 - 69,999      105.627588    110.127931 2.36148671        .018204221
D: 70,000 - 89,999      106.630299     110.47287 2.28496443        .022316997
E: 90,000 - 109,999     103.396741    101.610416 -1.2544577        .209677823
F: 110,000 - 129,999     106.76476    105.981312 -.60444998        .545545304
G: 130,000 - 149,999    108.877532     107.31377 -.85298245        .393671218
H: 150,000 - 169,999    110.987258    107.152191 -1.9062363        .056622983
I: 170,000 - 189,999    102.808238     107.43556 2.18477851        .028908566
J: 190,000 - 249,999    108.040564    115.343356 2.58313425        .009794516
K: 250,000 - 299,999    112.377993    108.196097 -1.4107871        .158316973
L: 300,000 and above    120.970235    112.216342 -2.0642868        .039003862
                        107.121845     113.80441 .686144393        .492670059
                        106.663769    107.276386 1.08013499        .280082357
14 rows selected.
STATS_T_TEST_INDEPUの例

次の例では、各分布の分散に既知の有意差がある(非併合分散)として、男性と女性に対する平均売上間の差の有意性を判断します。

SELECT SUBSTR(cust_income_level, 1, 22) income_level,
       AVG(DECODE(cust_gender, 'M', amount_sold, null)) sold_to_men,
       AVG(DECODE(cust_gender, 'F', amount_sold, null)) sold_to_women,
       STATS_T_TEST_INDEPU(cust_gender, amount_sold, 'STATISTIC', 'F') t_observed,
       STATS_T_TEST_INDEPU(cust_gender, amount_sold) two_sided_p_value
  FROM sh.customers c, sh.sales s
  WHERE c.cust_id = s.cust_id
  GROUP BY ROLLUP(cust_income_level)
  ORDER BY income_level, sold_to_men, sold_to_women, t_observed;

INCOME_LEVEL           SOLD_TO_MEN SOLD_TO_WOMEN T_OBSERVED TWO_SIDED_P_VALUE
---------------------- ----------- ------------- ---------- -----------------
A: Below 30,000          105.28349    99.4281447 -2.0542592        .039964704
B: 30,000 - 49,999       102.59651    109.829642 2.96922332        .002987742
C: 50,000 - 69,999      105.627588    110.127931  2.3496854        .018792277
D: 70,000 - 89,999      106.630299     110.47287 2.26839281        .023307831
E: 90,000 - 109,999     103.396741    101.610416 -1.2603509        .207545662
F: 110,000 - 129,999     106.76476    105.981312 -.60580011        .544648553
G: 130,000 - 149,999    108.877532     107.31377 -.85219781        .394107755
H: 150,000 - 169,999    110.987258    107.152191 -1.9451486        .051762624
I: 170,000 - 189,999    102.808238     107.43556 2.14966921        .031587875
J: 190,000 - 249,999    108.040564    115.343356 2.54749867        .010854966
K: 250,000 - 299,999    112.377993    108.196097 -1.4115514        .158091676
L: 300,000 and above    120.970235    112.216342 -2.0726194        .038225611
                        107.121845     113.80441 .689462437        .490595765
                        106.663769    107.276386 1.07853782        .280794207
14 rows selected.

STATS_WSR_TEST

構文


画像の説明

用途

STATS_WSR_TESTは、対応のある標本のウィルコクソンの符号順位検定であり、標本間の差の中央値と0(ゼロ)に有意差があるかどうかを判断します。差の絶対値は、標本を順序付けし、順位に符号を付けて求められます。また、帰無仮説によって、正の差の順位の合計が、負の差の順位の合計に等しいと仮定されます。

このファンクションは3つの引数を取ります。expr1およびexpr2は分析対象の2つの標本で、3つ目の引数はVARCHAR2型の戻り値です。3つ目の引数を指定しない場合、デフォルトでTWO_SIDED_SIGが戻り値になります。表5-10に、戻り値の意味を示します。

表5-10    STATS_WSR_TEST_*の戻り値 
戻り値  意味 

STATISTIC 

Zの観測値 

ONE_SIDED_SIG 

Zの片側有意 

TWO_SIDED_SIG 

Zの両側有意 

片側有意は常に上側確率に関連します。expr1が大きい値(棄却域が上側確率の値)になります。


STDDEV

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

STDDEVは、数値の集合であるexprの標本標準偏差を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。このファンクションは、STDDEV_SAMPがNULLを戻すことに対して、入力データが1行のみの場合にSTDDEVが0(ゼロ)を戻すという点で、STDDEV_SAMPと異なります。

Oracle Databaseは、VARIANCE集計ファンクションに対して定義された分散の平方根として標準偏差を計算します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

DISTINCTを指定する場合は、analytic_clausequery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

参照:

 

集計の例

次の例では、サンプル表hr.employeesの給与値の標本標準偏差を戻します。

SELECT STDDEV(salary) "Deviation"
   FROM employees;
 
 Deviation
----------
3909.36575

分析の例

次の例では、hire_dateで順序付けられたサンプル表hr.employeesの部門80の給与の値の累積標準偏差を戻します。

SELECT last_name, salary, 
   STDDEV(salary) OVER (ORDER BY hire_date) "StdDev"
   FROM employees  
   WHERE department_id = 30
   ORDER BY last_name, salary, "StdDev"; 
 
LAST_NAME                     SALARY     StdDev
------------------------- ---------- ----------
Baida                           2900 4035.26125
Colmenares                      2500 3362.58829
Himuro                          2600  3649.2465
Khoo                            3100 5586.14357
Raphaely                       11000          0
Tobias                          2800  4650.0896

STDDEV_POP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

STDDEV_POPは母集団標準偏差を計算し、母集団分散の平方根を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

このファンクションは、VAR_POPファンクションの平方根と同じです。VAR_POPがNULLを戻す場合、このファンクションもNULLを戻します。

参照:

 

集計の例

次の例では、サンプル表sh.salesにある売上高の母集団標準偏差および標本標準偏差を戻します。

SELECT STDDEV_POP(amount_sold) "Pop", 
   STDDEV_SAMP(amount_sold) "Samp"
   FROM sales;

       Pop       Samp
---------- ----------
896.355151 896.355592

分析の例

次の例では、サンプル表hr.employeesの部門ごとの給与の母集団標準偏差を戻します。

SELECT department_id, last_name, salary, 
   STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_std
   FROM employees
   ORDER BY department_id, last_name, salary, pop_std;

DEPARTMENT_ID LAST_NAME                     SALARY    POP_STD
------------- ------------------------- ---------- ----------
           10 Whalen                          4400          0
           20 Fay                             6000       3500
           20 Hartstein                      13000       3500
           30 Baida                           2900  3069.6091
. . .
         100 Urman                           7800 1644.18166
          110 Gietz                           8300       1850
          110 Higgins                        12000       1850
              Grant                           7000          0

STDDEV_SAMP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

STDDEV_SAMPは標本累積標準偏差を計算し、標本分散の平方根を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

このファンクションは、VAR_SAMPファンクションの平方根と同じです。VAR_SAMPがNULLを戻す場合、このファンクションもNULLを戻します。

参照:

 

集計の例

STDDEV_POP」の集計の例を参照してください。

分析の例

次の例では、employees表の部門ごとの給与の標本標準偏差を戻します。

SELECT department_id, last_name, hire_date, salary, 
   STDDEV_SAMP(salary) OVER (PARTITION BY department_id 
      ORDER BY hire_date 
      ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev 
   FROM employees
   ORDER BY department_id, last_name, hire_date, salary, cum_sdev;

DEPARTMENT_ID LAST_NAME       HIRE_DATE     SALARY   CUM_SDEV
------------- --------------- --------- ---------- ----------
           10 Whalen                    17-SEP-87       4400
           20 Fay                       17-AUG-97       6000 4949.74747
           20 Hartstein                 17-FEB-96      13000
           30 Baida                     24-DEC-97       2900 4035.26125
           30 Colmenares                10-AUG-99       2500 3362.58829
           30 Himuro                    15-NOV-98       2600  3649.2465
           30 Khoo                      18-MAY-95       3100 5586.14357
           30 Raphaely                  07-DEC-94      11000
. . .
          100 Greenberg                 17-AUG-94      12000 2121.32034
          100 Popp                      07-DEC-99       6900 1801.11077
          100 Sciarra                   30-SEP-97       7700 1925.91969
          100 Urman                     07-MAR-98       7800 1785.49713
          110 Gietz                     07-JUN-94       8300 2616.29509
          110 Higgins                   07-JUN-94      12000
              Grant                     24-MAY-99       7000

SUBSTR

構文

substr::=

画像の説明

用途

SUBSTRの各ファンクションは、charpositionの文字からsubstring_length文字分の文字列を抜き出して戻します。SUBSTRは、入力キャラクタ・セットによって定義された文字を使用して、長さを計算します。SUBSTRBは、文字のかわりにバイトを使用します。SUBSTRCは、完全なUnicodeキャラクタを使用します。SUBSTR2は、UCS2コードポイントを使用します。SUBSTR4は、UCS4コードポイントを使用します。

charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。positionおよびsubstring_lengthは、NUMBERデータ型か、または暗黙的にNUMBERに変換可能な任意のデータ型で、整数である必要があります。戻り値は、charと同じデータ型です。引数としてSUBSTRに渡された浮動小数点数は、自動的に整数に変換されます。

参照:

異なるロケールでのSUBSTRファンクションおよび長さセマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 

次の例では、「ABCDEFG」の指定されたサブストリングを戻します。

SELECT SUBSTR('ABCDEFG',3,4) "Substring"
     FROM DUAL;
 
Substring
---------
CDEF

SELECT SUBSTR('ABCDEFG',-5,4) "Substring"
     FROM DUAL;

Substring
---------
CDEF

データベース・キャラクタ・セットがダブルバイトの場合を想定します。

SELECT SUBSTRB('ABCDEFG',5,4.2) "Substring with bytes"
     FROM DUAL;

Substring with bytes
--------------------
CD

SUM

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

SUMは、exprの値の合計を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

DISTINCTを指定する場合は、analytic_clausequery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、サンプル表hr.employeesにあるすべての給与の合計を計算します。

SELECT SUM(salary) "Total"
     FROM employees;
 
     Total
----------
    691400

分析の例

次の例では、サンプル表hr.employeesの各マネージャについて、そのマネージャの下で働く従業員の現在の給与以下の給与の累積合計を計算します。RaphaelyおよびCambraultが同じ累積を持っています。これは、RaphaelyおよびCambraultが同じ給与であるため、Oracle Databaseが給与の値を同時に追加し、同じ累積合計を両方の行に対して適用したためです。

SELECT manager_id, last_name, salary,
   SUM(salary) OVER (PARTITION BY manager_id ORDER BY salary
   RANGE UNBOUNDED PRECEDING) l_csum
   FROM employees
   ORDER BY manager_id, last_name, salary, l_csum;

MANAGER_ID LAST_NAME           SALARY     L_CSUM
---------- --------------- ---------- ----------
MANAGER_ID LAST_NAME                     SALARY     L_CSUM
---------- ------------------------- ---------- ----------
       100 Cambrault                      11000      68900
       100 De Haan                        17000     155400
       100 Errazuriz                      12000      80900
       100 Fripp                           8200      36400
       100 Hartstein                      13000      93900
       100 Kaufling                        7900      20200
       100 Kochhar                        17000     155400
       100 Mourgos                         5800       5800
       100 Partners                       13500     107400
       100 Raphaely                       11000      68900
       100 Russell                        14000     121400
. . .
       149 Hutton                          8800      39000
       149 Johnson                         6200       6200
       149 Livingston                      8400      21600
       149 Taylor                          8600      30200
       201 Fay                             6000       6000
       205 Gietz                           8300       8300
           King                           24000      24000

SYS_CONNECT_BY_PATH

構文


画像の説明

用途

SYS_CONNECT_BY_PATHは、階層問合せのみで有効です。このファンクションは、ルートからノードへの列の値のパスを、CONNECT BY条件によって戻された各行をcharで区切った列の値とともに戻します。

columnおよびcharは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型です。戻される文字列は、VARCHAR2データ型であり、columnと同じキャラクタ・セットです。

参照:

階層問合せおよびCONNECT BY条件の詳細は、「階層問合せ」を参照してください。 

次の例では、従業員KochharからKochharのすべての従業員(およびそれらの従業員の従業員)への従業員名のパスを戻します。

SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') "Path"
   FROM employees
   START WITH last_name = 'Kochhar'
   CONNECT BY PRIOR employee_id = manager_id;

Path
------------------------------
     /Kochhar/Greenberg/Chen
     /Kochhar/Greenberg/Faviet
     /Kochhar/Greenberg/Popp
     /Kochhar/Greenberg/Sciarra
     /Kochhar/Greenberg/Urman
     /Kochhar/Higgins/Gietz
   /Kochhar/Baer
   /Kochhar/Greenberg
   /Kochhar/Higgins
   /Kochhar/Mavris
   /Kochhar/Whalen
 /Kochhar

SYS_CONTEXT

構文


画像の説明

用途

SYS_CONTEXTは、コンテキストnamespaceに関連付けられたparameterの値を戻します。このファンクションは、SQL文およびPL/SQL文で使用できます。

namespaceおよびparameterには、文字列、またはネームスペースまたは属性を指定する文字列に変換する式を指定できます。コンテキストnamespaceはすでに作成されている必要があり、関連付けられたparameterおよびその値は、DBMS_SESSION.set_contextプロシージャを使用して設定されている必要があります。namespaceは有効なSQL識別子である必要があります。parameter名には、すべての文字列を指定できます。大/小文字を区別しますが、長さは30バイト以下です。

戻り値のデータ型はVARCHAR2です。戻り値のデフォルトの最大サイズは、256バイトです。オプションのlengthパラメータを指定して、このデフォルトを上書きできます。このパラメータは、NUMBERか、または暗黙的にNUMBERに変換可能な値である必要があります。値の有効範囲は1〜4000バイトです。無効な値を指定すると、Oracle Databaseはその値を無視してデフォルト値を使用します。

Oracleでは、現行のセッションを記述するUSERENVという組込みネームスペースを提供しています。ネームスペースUSERENVの事前定義パラメータについては、表5-11を参照してください。

参照:

  • アプリケーション開発でのアプリケーション・コンテキスト機能の使用方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • ユーザー定義のコンテキスト・ネームスペースの作成方法については、「CREATE CONTEXT」を参照してください。

  • DBMS_SESSION.set_contextプロシージャについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

 

次の例では、データベースにログインしたユーザー名を戻します。

CONNECT OE/password
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') 
   FROM DUAL;

SYS_CONTEXT ('USERENV', 'SESSION_USER')
------------------------------------------------------
OE


注意:

この機能の説明を簡単にするために、この例ではデプロイされたシステムで通常使用されるパスワード管理技術を実行しません。本番環境では、Oracle Databaseのパスワード管理ガイドラインに従って、サンプル・アカウントを無効にします。パスワード管理ガイドラインおよびその他のセキュリティ推奨事項については、『Oracle Databaseセキュリティ・ガイド』を参照してください。 


次の例では、hr_appsの作成時に、コンテキストhr_appsに関連付けられたPL/SQLパッケージの属性group_noに対する値として設定されたグループ番号を戻します。

SELECT SYS_CONTEXT ('hr_apps', 'group_no') "User Group" 
   FROM DUAL;

表5-11    ネームスペースUSERENVの事前定義パラメータ 
パラメータ  戻り値 

ACTION 

モジュール(アプリケーション名)内の位置を識別します。DBMS_APPLICATION_INFOパッケージまたはOCIを使用して設定します。 

AUDITED_CURSORID 

監査をトリガーによって実行したSQLのカーソルIDを戻します。このパラメータは、ファイングレイン監査環境では無効です。このパラメータをファイングレイン監査環境で指定すると、Oracle Databaseは常にNULLを戻します。 

AUTHENTICATED_IDENTITY 

認証で使用する識別を戻します。次のリストでは、ユーザーのタイプの後に、戻される値を示します。

  • Kerberos認証済のエンタープライズ・ユーザー: Kerberosプリンシパル名

  • Kerberos認証済の外部ユーザー: Kerberosプリンシパル名(スキーマ名と同一)

  • SSL認証済のエンタープライズ・ユーザー: ユーザーのPKI証明書のDN

  • SSL認証済の外部ユーザー: ユーザーのPKI証明書のDN

  • パスワード認証済のエンタープライズ・ユーザー: ニックネーム(ログイン名と同一)

  • パスワード認証済のデータベース・ユーザー: データベースのユーザー名(スキーマ名と同一)

  • OS認証済の外部ユーザー: 外部オペレーティング・システムのユーザー名

  • RADIUS/DCE認証済の外部ユーザー: スキーマ名

  • DN付きプロキシ: クライアントのOracle Internet Directory DN

  • 証明書付きプロキシ: クライアントの証明書DN

  • ユーザー名付きプロキシ: クライアントがローカル・データベースのユーザーの場合はデータベース・ユーザー名、クライアントがエンタープライズ・ユーザーの場合はニックネーム

  • パスワード・ファイルを使用するSYSDBA/SYSOPER: ログイン名

  • OS認証を使用するSYSDBA/SYSOPER: オペレーティング・システムのユーザー名

 

AUTHENTICATION_DATA 

ログイン・ユーザーの認証に使用されるデータを戻します。X.503認証セッションでは、このフィールドはHEX2形式での認証のコンテキストを戻します。

注意: 構文のlengthパラメータを使用して、AUTHENTICATION_DATA属性の戻り値を変更できます。最大4000までの値を指定できます。この属性は、Oracle Databaseがこのような変更を実行するUSERENVの唯一の属性です。 

AUTHENTICATION_METHOD 

認証方式を戻します。次のリストでは、ユーザーのタイプの後に、戻される方法を示します。

  • パスワード認証済のエンタープライズ・ユーザー、ローカル・データベースのユーザー、またはパスワード・ファイルを使用するSYSDBA/SYSOPER(パスワードを使用するユーザー名付きのプロキシ): PASSWORD

  • Kerberos認証済のエンタープライズ・ユーザーまたは外部ユーザー: KERBEROS

  • SSL認証済のエンタープライズ・ユーザーまたは外部ユーザー: SSL

  • RADIUS認証済の外部ユーザー: RADIUS

  • OS認証済の外部ユーザーまたはSYSDBA/SYSOPER: OS

  • DCE認証済の外部ユーザー: DCE

  • 証明書付きプロキシ、DN、またはパスワードを使用しないユーザー名: NONE

  • バックグラウンド・プロセス(ジョブ・キュー・スレーブ・プロセス): JOB

IDENTIFICATION_TYPEを使用すると、認証方式がPASSWORD、KERBEROSまたはSSLの場合に、外部ユーザーとエンタープライズ・ユーザーを区別できます。 

BG_JOB_ID 

現行のセッションがOracle Databaseのバックグラウンド・プロセスで確立された場合、そのセッションのジョブIDを戻します。セッションがバックグラウンド・プロセスで確立されていない場合は、NULLを戻します。 

CLIENT_IDENTIFIER 

アプリケーションによって設定された識別子を、DBMS_SESSION.SET_IDENTIFIERプロシージャ、OCI属性OCI_ATTR_CLIENT_IDENTIFIERまたはJavaクラスOracle.jdbc.OracleConnection.setClientIdentifierを使用して戻します。この属性は、同じデータベース・ユーザーとして認証される複数の軽量アプリケーション・ユーザーを識別するために、様々なデータベース・コンポーネントによって使用されます。 

CLIENT_INFO 

DBMS_APPLICATION_INFOパッケージを使用するアプリケーションが格納できる64バイトまでのユーザー・セッション情報を戻します。 

CURRENT_BIND  

ファイングレイン監査のバインド変数。 

CURRENT_SCHEMA 

現在アクティブなデフォルトのスキーマの名前。この値は、セッションの存続期間中にALTER SESSION SET CURRENT_SCHEMA文を使用して変更できます。また、この値は、セッションの存続期間中に、アクティブな定義者権限オブジェクトの所有者を反映するために変更することもできます。この値をビュー定義の本体で直接使用すると、そのビューを使用しているカーソルを実行するときに使用されるデフォルトのスキーマが戻されます。定義者権限としてカーソルで使用されるビューは考慮されません。

注意: ストアドPL/SQLユニット内からSQL文ALTER SESSION SET CURRENT_SCHEMAを発行しないことをお薦めします。 

CURRENT_SCHEMAID 

現在アクティブなデフォルトのスキーマの識別子。 

CURRENT_SQL

CURRENT_SQLn 

CURRENT_SQLは、ファイングレイン監査イベントをトリガーによって実行した現行のSQLの最初の4KBを戻します。CURRENT_SQLn属性は、後続の4KBずつを戻します。nは、1〜7(1および7を含む)の整数です。CURRENT_SQL1は5〜8KB、CURRENT_SQL2は9〜12KBのように戻します。これらの属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。 

CURRENT_SQL_LENGTH  

ファイングレイン監査または行レベルのセキュリティ(RLS)ポリシーのファンクションまたはイベント・ハンドラをトリガーする現行のSQL文の長さ。ファンクションまたはイベント・ハンドラ内のみで有効です。 

CURRENT_USER 

権限が現在アクティブになっているデータベース・ユーザーの名前。この値は、セッションの存続期間中に、アクティブな定義者の権限オブジェクトの所有者を反映するために変更できます。定義者権限オブジェクトがアクティブでない場合、CURRENT_USERSESSION_USERと同じ値を戻します。この値をビュー定義の本体で直接使用すると、そのビューを使用しているカーソルを実行しているユーザーが戻されます。定義者権限としてカーソルで使用されるビューは考慮されません。 

CURRENT_USERID 

権限が現在アクティブになっているデータベース・ユーザーの識別子。 

DB_DOMAIN 

DB_DOMAIN初期化パラメータで指定されたデータベースのドメインを戻します。 

DB_NAME 

DB_NAME初期化パラメータで指定されたデータベース名を戻します。 

DB_UNIQUE_NAME 

DB_UNIQUE_NAME初期化パラメータで指定されたデータベース名を戻します。 

ENTRYID 

現行の監査エントリ番号を戻します。監査エントリIDの順序は、ファイングレイン監査レコードと通常の監査レコードで共通です。この属性を分散SQL文で使用することはできません。正しい監査エントリ識別子は、標準またはファイングレイン監査の監査ハンドラを介してのみ参照できます。 

ENTERPRISE_IDENTITY 

ユーザーのエンタープライズ全体の識別を戻します。

  • エンタープライズ・ユーザーの場合: Oracle Internet Directory DN

  • 外部ユーザーの場合: 外部識別(Kerberosプリンシパル名、RADIUSおよびDCEスキーマ名、OSユーザー名、証明書DN)

  • ローカル・ユーザーおよびSYSDBA/SYSOPERログインの場合: NULL

属性の値はプロキシ方式によって異なります。

  • DN付きプロキシの場合: クライアントのOracle Internet Directory DN

  • 証明書付きプロキシの場合: クライアントの証明書DN(外部ユーザー)、Oracle Internet Directory DN(グローバル・ユーザー)

  • ユーザー名付きプロキシの場合: クライアントがエンタープライズ・ユーザーの場合はOracle Internet Directory DN、クライアントがローカル・データベースのユーザーの場合はNULL

 

FG_JOB_ID 

現行のセッションがOracleのフォアグラウンド・プロセスで確立された場合、そのセッションのジョブIDを戻します。セッションがフォアグラウンド・プロセスで確立されていない場合は、NULLを戻します。 

GLOBAL_CONTEXT_MEMORY  

コンテキストへのグローバルなアクセスによって、システム・グローバル領域で使用された数値を戻します。 

GLOBAL_UID  

エンタープライズ・ユーザー・セキュリティ(EUS)ログインの場合は、Oracle Internet Directoryからグローバル・ユーザーIDを戻します。その他のすべてのログインの場合は、NULLを戻します。 

HOST 

接続中のクライアントのホスト・マシン名を戻します。 

IDENTIFICATION_TYPE 

データベースでユーザーのスキーマを作成した方法を戻します。特に、CREATE/ALTER USER構文に、IDENTIFIED句が反映されます。次のリストでは、スキーマの作成中に使用する構文の後に、戻される識別タイプが続きます。

  • IDENTIFIED BYパスワード: LOCAL

  • IDENTIFIED EXTERNALLY: EXTERNAL

  • IDENTIFIED GLOBALLY: GLOBAL SHARED

  • IDENTIFIED GLOBALLY AS DN: GLOBAL PRIVATE

 

INSTANCE 

現行のインスタンスのインスタンス識別番号を戻します。 

INSTANCE_NAME  

インスタンス名。 

IP_ADDRESS 

接続中のクライアントのマシンのIPアドレスを戻します。 

ISDBA 

オペレーティング・システムまたはパスワード・ファイルによって、ユーザーがDBA権限を持っていると認証された場合、TRUEを戻します。 

LANG 

言語名のISO略称を戻します。これは、既存の'LANGUAGE'パラメータを短縮したものです。 

LANGUAGE 

現行のセッションで使用している言語(language)および地域(territory)を、データベース・キャラクタ・セット(character set)も含めて次の書式で戻します。

language_territory.characterset 

MODULE  

DBMS_APPLICATION_INFOパッケージまたはOCIを使用して設定されたアプリケーション名(モジュール)を戻します。 

NETWORK_PROTOCOL 

接続文字列の'PROTOCOL=protocol'の部分で指定された、通信に使用されるネットワーク・プロトコルを戻します。 

NLS_CALENDAR  

現行のセッションの現行のカレンダを戻します。 

NLS_CURRENCY  

現行のセッションの通貨を戻します。 

NLS_DATE_FORMAT  

セッションの日付書式を戻します。 

NLS_DATE_LANGUAGE  

日付の表示に使用される言語を戻します。 

NLS_SORT  

BINARYまたは言語ソート基準を戻します。 

NLS_TERRITORY  

現行のセッションの地域を戻します。 

OS_USER 

データベース・セッションを初期化するクライアント・プロセスのオペレーティング・システム・ユーザー名を戻します。 

POLICY_INVOKER  

行レベルのセキュリティ(RLS)・ポリシーのファンクションの実行者。 

PROXY_ENTERPRISE_IDENTITY 

プロキシ・ユーザーがエンタープライズ・ユーザーの場合に、Oracle Internet Directory DNを戻します。 

PROXY_USER 

SESSION_USERのかわりに現行のセッションを開いたデータベース・ユーザー名を戻します。 

PROXY_USERID 

SESSION_USERのかわりに現行のセッションを開いたデータベース・ユーザーのIDを戻します。 

SERVER_HOST  

インスタンスを実行しているマシンのホスト名。 

SERVICE_NAME 

任意のセッションで接続しているサービスの名前を戻します。 

SESSION_USER 

ログオン時のデータベース・ユーザーの名前。エンタープライズ・ユーザーの場合、スキーマを戻します。その他のユーザーの場合、データベース・ユーザー名を戻します。この値は、セッションの存続期間中は同じです。 

SESSION_USERID 

ログオン時のデータベース・ユーザーの識別子。 

SESSIONID 

監査セッション識別子を戻します。この属性を分散SQL文で使用することはできません。 

SID  

セッション番号(セッションIDとは異なります)。 

STATEMENTID 

文の監査の識別子を戻します。STATEMENTIDは、任意のセッションで監査されたSQL文の番号を示します。この属性を分散SQL文で使用することはできません。正しい文の監査の識別子は、標準またはファイングレイン監査の監査ハンドラを介してのみ参照できます。 

TERMINAL 

現行のセッションのクライアントに対するオペレーティング・システムの識別子を戻します。分散SQL文では、この属性はローカル・セッションの識別子を戻します。分散環境では、リモートのSELECTに対してのみこのオプションを使用でき、リモートのINSERTUPDATEまたはDELETEには使用できません。(このパラメータの戻り値の長さはオペレーティング・システムによって異なります。) 

表5-12に、非推奨になったネームスペースUSERENVのパラメータを示します。これらのパラメータはどれも指定しないでください。かわりに、「コメント」列で提案する代替手段を使用します。

表5-12    非推奨になったネームスペースUSERENVのパラメータ 
パラメータ  コメント 

AUTHENTICATION_TYPE 

このパラメータは、ユーザーの認証方法を示す値を戻しました。現在、同じ情報は、IDENTIFICATION_TYPEと組み合せた新しいAUTHENTICATION_METHODパラメータから取得できます。 

EXTERNAL_NAME 

このパラメータは、ユーザーの外部名を戻しました。詳細な情報は、AUTHENTICATED_IDENTITYおよびENTERPRISE_IDENTITYパラメータから取得できます。 


SYS_DBURIGEN

構文


画像の説明

用途

SYS_DBURIGenは、引数として1つ以上の列または属性、およびオプションでROWIDを取り、特定の列または行オブジェクトへのDBUriTypeデータ型のURLを生成します。これによって、データベースからXML文書を検索するためのURLを使用できるようになります。

参照されるすべての列または属性は、サンプル表に存在する必要があります。これらは、主キーの役割を果たす必要があります。実際に表の主キーに一致する必要はありませんが、一意の値を参照する必要があります。複数の列を指定すると、最後の列以外のすべての列はデータベースの行を識別し、指定された最後の列は行にある列を識別します。

デフォルトでは、URLはフォーマットされたXML文書を指します。ドキュメントのテキストのみを指す場合は、オプションの'text()'を指定します


注意:

このXMLコンテキストでは、小文字のtextはキーワードであり、構文のプレースホルダではありません。 


列または属性を含む表またはビューが、問合せのコンテキストで指定されるスキーマを持たない場合、Oracle Databaseは、表名またはビュー名をパブリック・シノニムとして解析します。

参照:

データベースのURITypeデータ型およびXML文書の詳細は、『Oracle XML Developer's Kitプログラマーズ・ガイド』を参照してください。 

次の例では、SYS_DBURIGenファンクションを使用して、サンプル表hr.employeesemployee_id = 206である行のemail列へのDBUriTypeデータ型のURLを生成します。

SELECT SYS_DBURIGEN(employee_id, email)
   FROM employees
   WHERE employee_id = 206;

SYS_DBURIGEN(EMPLOYEE_ID,EMAIL)(URL, SPARE)
--------------------------------------------------------------------
DBURITYPE('/PUBLIC/EMPLOYEES/ROW[EMPLOYEE_ID=''206'']/EMAIL', NULL)

SYS_EXTRACT_UTC

構文


画像の説明

用途

SYS_EXTRACT_UTCは、タイムゾーン・オフセットまたはタイムゾーン地域名を含む日時値から協定世界時(UTC)(以前のグリニッジ標準時)を抽出します。

次の例では、指定された日時からUTCを抽出します。

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -08:00')
   FROM DUAL;

SYS_EXTRACT_UTC(TIMESTAMP'2000-03-2811:30:00.00-08:00')
-----------------------------------------------------------------
28-MAR-00 07.30.00 PM

SYS_GUID

構文


画像の説明

用途

SYS_GUIDは、16バイトで構成されたグローバルな一意の識別子(RAW値)を生成して戻します。多くのプラットフォームでは、生成された識別子は、ホスト識別子、プロセス、またはファンクションをコールするプロセスやスレッドのスレッド識別子、およびそのプロセスやスレッドに対する非反復値(バイトの順序)で構成されています。

次の例では、サンプル表hr.locationsに列を追加後、一意の識別子を各行に挿入し、グローバルな一意識別子の16バイトのRAW値を32文字の16進表記で戻します。

ALTER TABLE locations ADD (uid_col RAW(32));

UPDATE locations SET uid_col = SYS_GUID();

SELECT location_id, uid_col FROM locations
   ORDER BY location_id, uid_col;

LOCATION_ID UID_COL
----------- ----------------------------------------------------------------
       1000 09F686761827CF8AE040578CB20B7491
       1100 09F686761828CF8AE040578CB20B7491
       1200 09F686761829CF8AE040578CB20B7491
       1300 09F68676182ACF8AE040578CB20B7491
       1400 09F68676182BCF8AE040578CB20B7491
       1500 09F68676182CCF8AE040578CB20B7491
. . .

SYS_TYPEID

構文


画像の説明

用途

SYS_TYPEIDは、オペランドで最も指定される型の型IDを戻します。この値は、主に、置換可能な列の基礎となる型判別式の列を識別するために使用されます。たとえば、型判別式の列に索引を構築するために、SYS_TYPEIDによって戻される値を使用できます。

このファンクションは、オブジェクト型のオペランドのみで使用してください。すべての最終ルート・オブジェクト型(型階層に属さない最終型)は、NULL型のIDを持ちます。Oracle Databaseは、型階層に属するすべての型に、NULL以外の一意の型IDを割り当てます。

参照:

型IDの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。 

次の例では、「置換可能な表および列のサンプル:」で作成された表personsおよびbooksを使用します。最初の問合せは、persons表に格納されたオブジェクト・インスタンスの最も指定される型を戻します。

SELECT name, SYS_TYPEID(VALUE(p)) "Type_id" FROM persons p;

NAME                      Type_id
------------------------- --------------------------------
Bob                       01
Joe                       02
Tim                       03

次の問合せは、books表に格納された作者の最も指定される型を戻します。

SELECT b.title, b.author.name, SYS_TYPEID(author)
   "Type_ID" FROM books b;

TITLE                     AUTHOR.NAME          Type_ID
------------------------- -------------------- -------------------
An Autobiography          Bob                  01
Business Rules            Joe                  02
Mixing School and Work    Tim                  03

SYS_TYPEIDファンクションを使用すると、表の型判別式の列に索引を作成できます。「置換可能な列の索引の作成例:」を参照してください。


SYS_XMLAGG

構文


画像の説明

用途

SYS_XMLAGGは、exprによって表されるすべてのXML文書またはXMLフラグメントを集約し、単一のXML文書を生成します。このファンクションは、デフォルト名ROWSETの新しい囲み要素を追加します。XML文書を別の方法でフォーマットする場合は、XMLFormatオブジェクトのインスタンスであるfmtを指定します。

参照:

SYS_XMLAggの結果をフォーマットするためのXMLFormat型の属性の使用については、「SYS_XMLGEN」および「XML書式モデル」を参照してください。 

次の例では、SYS_XMLGENファンクションを使用して、従業員名の最初の文字がRであるサンプル表employeesの各行に対して、XML文書を生成した後、デフォルトの囲み要素ROWSETの1つのXML文書にすべての行を集約します。

SELECT SYS_XMLAGG(SYS_XMLGEN(last_name)) XMLAGG
   FROM employees
   WHERE last_name LIKE 'R%'
   ORDER BY xmlagg;

XMLAGG
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
<LAST_NAME>Rajs</LAST_NAME>
<LAST_NAME>Raphaely</LAST_NAME>
<LAST_NAME>Rogers</LAST_NAME>
<LAST_NAME>Russell</LAST_NAME>
</ROWSET>

SYS_XMLGEN

構文


画像の説明

用途

SYS_XMLGENは、データベースの特定の行および列を評価する式を取り、XML文書を含むXMLType型のインスタンスを戻します。exprは、スカラー値、ユーザー定義型またはXMLTypeインスタンスです。

デフォルトでは、XML文書の要素はexprの要素と一致します。たとえば、exprが列名に変換される場合、XMLの囲み要素は同じ列名になります。XML文書を別の方法でフォーマットする場合は、XMLFormatオブジェクトのインスタンスであるfmtを指定します。

参照:

  • XMLFormat型の詳細およびSYS_XMLGENの結果を書式化するための属性の使用方法については、「XML書式モデル」を参照してください。

  • XML型およびそれらの使用の概要については、『Oracle Database概要』を参照してください。

 

次の例では、サンプル表oe.employeesからemployee_id値が205の従業員の電子メールIDを検出し、EMAIL要素を持つXML文書を含むXMLTypeのインスタンスを生成します。

SELECT SYS_XMLGEN(email)      
   FROM employees
   WHERE employee_id = 205;

SYS_XMLGEN(EMAIL)
-------------------------------------------------------------------
<?xml version="1.0"?>
<EMAIL>SHIGGINS</EMAIL>

SYSDATE

構文


画像の説明

用途

SYSDATEは、データベースが存在するオペレーティング・システムの現在の日付と時刻のセットを戻します。戻り値のデータ型はDATEです。戻り値の書式は、NLS_DATE_FORMAT初期化パラメータの値によって異なります。このファンクションに引数は不要です。分散SQL文では、このファンクションはローカル・データベースのオペレーティング・システムの日付と時刻のセットを戻します。CHECK制約の条件でこのファンクションは使用できません。

次の例では、オペレーティング・システムの現在の日付および時刻を戻します。

SELECT TO_CHAR
    (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW"
     FROM DUAL;

NOW
-------------------
04-13-2001 09:45:51

SYSTIMESTAMP

構文


画像の説明

用途

SYSTIMESTAMPは、データベースが存在するシステムの、秒の小数部とタイムゾーンを含む日付を戻します。戻り型は、TIMESTAMP WITH TIME ZONEです。

次の例では、システムのタイムスタンプを戻します。

SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
------------------------------------------------------------------
28-MAR-00 12.38.55.538741 PM -08:00

次の例では、秒の小数部を明示的に指定する方法を示します。

SELECT TO_CHAR(SYSTIMESTAMP, 'SSSSS.FF') FROM DUAL;

TO_CHAR(SYSTIME
---------------
55615.449255

TAN

構文


画像の説明

用途

TANは、n(ラジアンで表された角度)のタンジェントを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、135度のタンジェントを戻します。

SELECT TAN(135 * 3.14159265359/180)
   "Tangent of 135 degrees"  FROM DUAL;

Tangent of 135 degrees
----------------------
                   - 1

TANH

構文


画像の説明

用途

TANHは、nの双曲線タンジェントを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、5の双曲線タンジェントを戻します。

SELECT TANH(.5) "Hyperbolic tangent of .5" 
   FROM DUAL;

Hyperbolic tangent of .5
------------------------
              .462117157 

TIMESTAMP_TO_SCN

構文


画像の説明

用途

TIMESTAMP_TO_SCNは、引数としてタイムスタンプ値を取り、そのタイムスタンプに関連付けられたシステム変更番号(SCN)の概数を戻します。戻り値のデータ型はNUMBERです。このファンクションは、特定のタイムスタンプに関連付けられたSCNを調べる場合に有効です。

注意:

SCNとSCN生成時のタイムスタンプの関連は、一定期間データベースで記憶されます。この期間は、最大で自動調整されたUNDO保存期間(データベースが自動UNDO管理モードで実行されている場合)およびデータベース内のすべてのフラッシュバック・アーカイブの保存時間となりますが、120時間以上になります。関連が不要となるまでの経過時間には、データベースが開かれているときの時間のみが加算されます。TIMESTAMP_TO_SCNの引数に対して指定されたSCNが古すぎる場合は、エラーが戻されます。 

参照:

SCNをタイムスタンプへ変換する方法については、「SCN_TO_TIMESTAMP」を参照してください。 

次の例では、行をoe.orders表に挿入し、TIMESTAMP_TO_SCNを使用して、挿入操作のシステム変更番号を判断します。(実際に戻されるSCNは、システムごとに異なります。)

INSERT INTO orders (order_id, order_date, customer_id, order_total)
   VALUES (5000, SYSTIMESTAMP, 188, 2345);
1 row created.

COMMIT;
Commit complete.

SELECT TIMESTAMP_TO_SCN(order_date) FROM orders
   WHERE order_id = 5000;

TIMESTAMP_TO_SCN(ORDER_DATE)
----------------------------
                      574100

TO_BINARY_DOUBLE

構文


画像の説明

用途

TO_BINARY_DOUBLEは、倍精度の浮動小数点数を戻します。

expr文字列には、浮動小数点数の書式要素(FfDまたはd)は使用できません。

文字列またはNUMBERからBINARY_DOUBLEへの変換は、正確に行われない場合があります。これは、NUMBERおよび文字列型では単精度、BINARY_DOUBLEで倍精度を使用して数値を表現するためです。

BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

参照:

TO_CHAR(数値)」および「浮動小数点数」を参照してください。 

次の例では、それぞれ異なる数値データ型の3つの列を持つ次の表を使用します。

CREATE TABLE float_point_demo
  (dec_num NUMBER(10,2), bin_double BINARY_DOUBLE, bin_float BINARY_FLOAT);

INSERT INTO float_point_demo
  VALUES (1234.56,1234.56,1234.56);

SELECT * FROM float_point_demo;

   DEC_NUM BIN_DOUBLE  BIN_FLOAT
---------- ---------- ----------
   1234.56 1.235E+003 1.235E+003

次の例では、NUMBERデータ型の値をBINARY_DOUBLEデータ型の値に変換します。

SELECT dec_num, TO_BINARY_DOUBLE(dec_num)
  FROM float_point_demo;

   DEC_NUM TO_BINARY_DOUBLE(DEC_NUM)
---------- -------------------------
   1234.56                1.235E+003

次の例では、dec_num列およびbin_double列から抽出されたダンプ情報を比較します。

SELECT DUMP(dec_num) "Decimal",
   DUMP(bin_double) "Double"
   FROM float_point_demo;

Decimal                     Double
--------------------------- ---------------------------------------------
Typ=2 Len=4: 194,13,35,57   Typ=101 Len=8: 192,147,74,61,112,163,215,10


TO_BINARY_FLOAT

構文


画像の説明

用途

TO_BINARY_FLOATは、単精度の浮動小数点数を戻します。

expr文字列には、浮動小数点数の書式要素(FfDまたはd)は使用できません。

文字列またはNUMBERからBINARY_FLOATへの変換は、正確に行われない場合があります。これは、NUMBERおよび文字列型では単精度、BINARY_FLOATでは倍精度を使用して数値を表現するためです。

BINARY_DOUBLE値に、BINARY_FLOATがサポートする数を超える精度ビットが使用されている場合、BINARY_DOUBLEからBINARY_FLOATへの変換は正確に行われません。

参照:

TO_CHAR(数値)」および「浮動小数点数」を参照してください。 

次の例では、「TO_BINARY_DOUBLE」で作成したfloat_point_demo表を使用して、NUMBERデータ型の値をBINARY_FLOATデータ型の値に変換します。

SELECT dec_num, TO_BINARY_FLOAT(dec_num)
  FROM float_point_demo;

   DEC_NUM TO_BINARY_FLOAT(DEC_NUM)
---------- ------------------------
   1234.56               1.235E+003

TO_BLOB

構文

to_blob::=

画像の説明

用途

TO_BLOBは、LONG RAWおよびRAW値をBLOB値に変換します。

次の例は、RAW列の値としてBLOBを戻します。

SELECT TO_BLOB(raw_column) blob FROM raw_table;

BLOB
-----------------------
00AADD343CDBBD

TO_CHAR(文字)

構文

to_char_char::=

画像の説明

用途

TO_CHAR(文字)は、NCHARNVARCHAR2CLOBまたはNCLOBデータをデータベース・キャラクタ・セットに変換します。戻り値は常にVARCHAR2です。

このファンクションを使用してキャラクタLOBをデータベース・キャラクタ・セットに変換すると、変換するLOB値がターゲットの型よりも大きい場合、エラーが戻されます。

このファンクションは任意のXMLファンクションと組み合せて使用できますが、生成される日付の書式は、XMLスキーマの標準書式ではなく、データベースの書式になります。

参照:

  • XMLの日付およびタイムスタンプの書式設定とその例については、『Oracle XML DB開発者ガイド』を参照してください。

  • XMLファンクションのリストについては、「XMLファンクション」を参照してください。

 

次の例では、単純な文字列を文字データとして解析します。

SELECT TO_CHAR('01110') FROM DUAL;

TO_CH
-----
01110

この例と、「TO_CHAR(数値)」の最初の例を比較してください。

次の例では、pm.print_media表のCLOBデータをデータベース・キャラクタ・セットに変換します。

SELECT TO_CHAR(ad_sourcetext) FROM print_media
      WHERE product_id = 2268;

TO_CHAR(AD_SOURCETEXT)
--------------------------------------------------------------------
******************************
TIGER2 2268...Standard Hayes Compatible Modem
Product ID: 2268
The #1 selling modem in the universe! Tiger2's modem includes call management
and Internet voicing. Make real-time full duplex phone calls at the same time
you're online.
**********************************

TO_CHAR(日時)

構文

to_char_date::=

画像の説明

用途

TO_CHAR(日時)は、DATETIMESTAMPTIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEデータ型の日時値または期間値を日付書式fmtで指定された書式のVARCHAR2データ型に変換します。fmtを省略すると、次のように、dateVARCHAR2値に変換されます。

日時書式の詳細は、「書式モデル」を参照してください。

'nlsparam'引数には、月と日の名前および略称が戻される言語を指定します。この引数は、次の書式で指定します。

'NLS_DATE_LANGUAGE = language' 

'nlsparam'を指定しないと、このファンクションはセッションのデフォルト日付言語を使用します。

参照:

「データ変換のセキュリティ上の考慮事項」 

次の例で使用する表は、次のとおりです。

CREATE TABLE date_tab (
   ts_col      TIMESTAMP,
   tsltz_col   TIMESTAMP WITH LOCAL TIME ZONE,
   tstz_col    TIMESTAMP WITH TIME ZONE);

次の例では、TO_CHARを別のTIMESTAMPデータ型に適用した結果を示します。TIMESTAMP WITH LOCAL TIME ZONE列の結果は、セッションのタイムゾーンを識別します。これに対して、TIMESTAMPおよびTIMESTAMP WITH TIME ZONE列の結果は、セッションのタイムゾーンを識別しません。

ALTER SESSION SET TIME_ZONE = '-8:00';
INSERT INTO date_tab VALUES (  
   TIMESTAMP'1999-12-01 10:00:00',
   TIMESTAMP'1999-12-01 10:00:00',
   TIMESTAMP'1999-12-01 10:00:00');
INSERT INTO date_tab VALUES (
   TIMESTAMP'1999-12-02 10:00:00 -8:00', 
   TIMESTAMP'1999-12-02 10:00:00 -8:00',
   TIMESTAMP'1999-12-02 10:00:00 -8:00');

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_date,
   TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_date
   FROM date_tab
   ORDER BY ts_date, tstz_date;
 
TS_DATE                        TSTZ_DATE
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE, 
   TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz
   FROM date_tab
   ORDER BY sessiontimezone, tsltz;

SESSIONTIM TSLTZ
---------- ------------------------------
-08:00     01-DEC-1999 10:00:00.000000
-08:00     02-DEC-1999 10:00:00.000000

ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_col,
   TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_col
   FROM date_tab
   ORDER BY ts_col, tstz_col;
 
TS_COL                         TSTZ_COL
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz_col
   FROM date_tab
   ORDER BY sessiontimezone, tsltz_col;
  2    3    4
SESSIONTIM TSLTZ_COL
---------- ------------------------------
-05:00     01-DEC-1999 13:00:00.000000
-05:00     02-DEC-1999 13:00:00.000000

TO_CHAR(数値)

構文

to_char_number::=

画像の説明

用途

TO_CHAR(数値)は、nを、オプションの数値書式fmtを使用してVARCHAR2データ型の値に変換します。n値には、NUMBERBINARY_FLOATまたはBINARY_DOUBLE型の値を指定できます。fmtを指定しないと、nの有効桁数を保持するために十分な長さのVARCHAR2値に変換されます。

nが負の場合、書式が適用された後で符号が適用されます。したがって、TO_CHAR(-1, '$9')は、$-1ではなく-$1を戻します。

日時書式の詳細は、「書式モデル」を参照してください。

'nlsparam'引数には、数値書式要素によって戻される次の文字を指定します。

この引数は、次の書式で指定します。

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

文字dおよびgは、それぞれ小数点文字および桁区切りを表します。これらは、異なるシングルバイト文字である必要があります。引用符付き文字列の中では、パラメータ値を囲む一重引用符を2つ使用する必要があります。通貨記号には10文字使用できます。

'nlsparam'またはパラメータのいずれか1つを省略すると、このファンクションはセッションのデフォルト・パラメータ値を使用します。

参照:

「データ変換のセキュリティ上の考慮事項」 

次の文は、暗黙的な変換を使用して、文字列と数値を数値に結合します。

SELECT TO_CHAR('01110' + 1) FROM dual;

TO_C
----
1111

この例と、「TO_CHAR(文字)」の最初の例を比較してください。

次の例では、出力で通貨記号の左側に空白埋めが行われます。

SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount"
     FROM DUAL;

Amount
--------------
  $10,000.00-

SELECT TO_CHAR(-10000,'L99G999D99MI',
   'NLS_NUMERIC_CHARACTERS = '',.''
   NLS_CURRENCY = ''AusDollars'' ') "Amount"
     FROM DUAL;

Amount
-------------------
AusDollars10.000,00-

オプションの数値書式fmtでは、Lは各国通貨記号を、MIは後に付くマイナス記号(-)を表します。すべての数値書式要素のリストは、表2-17「FX書式モデル修飾子による文字データと書式モデルの一致」を参照してください。


TO_CLOB

構文


画像の説明

用途

TO_CLOBは、LOB列またはその他の文字列のNCLOB値をCLOB値に変換します。charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。Oracle Databaseは、基礎となるLOBデータを各国語キャラクタ・セットからデータベース・キャラクタ・セットに変換することによって、このファンクションを実行します。

次の文は、サンプル表pm.print_mediaNCLOBデータをCLOBに変換し、CLOB列に挿入します。

UPDATE PRINT_MEDIA 
   SET AD_FINALTEXT = TO_CLOB (AD_FLTEXTN); 

TO_DATE

構文


画像の説明

用途

TO_DATEは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型のcharを、DATEデータ型の値に変換します。


注意:

このファンクションは、データを別の日時データ型へは変換しません。他の日時変換の詳細は、「TO_TIMESTAMP」、「TO_TIMESTAMP_TZ」、「TO_DSINTERVAL」および「TO_YMINTERVAL」を参照してください。 


fmtは、charの書式を指定する日時書式モデルです。fmtを指定しない場合、charはデフォルトの日付書式である必要があります。デフォルトの日付書式は、NLS_TERRITORY初期化パラメータによって暗黙的に決まります。NLS_DATE_FORMATパラメータによって明示的に設定することもできます。fmtJ(ユリウス日)の場合、charは整数である必要があります。


注意:

次の項の例に示すとおり、TO_DATEでは、常に書式マスク(fmt)を指定することをお薦めします。書式マスクを指定しないと、このファンクションは、charNLS_TERRITORYまたはNLS_DATE_FORMATパラメータで指定されたものと同じ書式を使用している場合にのみ有効になります。さらに、依存性を回避するために明示的な書式マスクが指定されていない場合は、データベース間でファンクションが不安定になることがあります。 


'nlsparam'引数は、日付変換のTO_CHARファンクションの場合と同じ用途で使用されます。

引数charDATE値を持つTO_DATEファンクションは使用しないでください。戻されるDATE値は、fmtまたはデフォルトの日付書式によって、元のcharとは異なる世紀の値を持つことがあります。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「日時書式モデル」および「データ型の比較規則」を参照してください。 

次の例では、文字列をタイムスタンプに変換します。

SELECT TO_DATE(
    'January 15, 1989, 11:00 A.M.',
    'Month dd, YYYY, HH:MI A.M.',
     'NLS_DATE_LANGUAGE = American')
     FROM DUAL;

TO_DATE('
---------
15-JAN-89

戻された値は、NLS_TERRITORYパラメータが'AMERICA'に設定されている場合は、デフォルトの日付書式を反映します。異なるNLS_TERRITORYの値が設定されている場合は、異なるデフォルトの日付書式となります。

ALTER SESSION SET NLS_TERRITORY = 'KOREAN';

SELECT TO_DATE(
    'January 15, 1989, 11:00 A.M.',
    'Month dd, YYYY, HH:MI A.M.',
     'NLS_DATE_LANGUAGE = American')
     FROM DUAL;

TO_DATE(
--------
89/01/15

TO_DSINTERVAL

構文


画像の説明

sql_format::=

画像の説明

ds_iso_format::=

画像の説明

用途

TO_DSINTERVALは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型の文字列を、INTERVAL DAY TO SECOND型に変換します。

TO_DSINTERVALは、2つの書式のいずれかの引数を取ります。

SQL書式では、daysは0(ゼロ)〜999999999の整数、hoursは0(ゼロ)〜23の整数、minutessecondsは0(ゼロ)〜59の整数になります。frac_secsは秒の小数部であり、.0〜.999999999になります。日付と時間は1つ以上の空白で区切ります。これ以外に、書式要素の間にも空白を使用できます。

ISO書式では、dayshoursminutesおよびsecondsは、0(ゼロ)〜999999999の整数になります。frac_secsは秒の小数部であり、.0〜.999999999になります。値に空白は使用できません。

次の例では、1990年1月1日から100日以上勤務している従業員をhr.employees表から検索します。

SELECT employee_id, last_name FROM employees
   WHERE hire_date + TO_DSINTERVAL('100 00:00:00')
   <= DATE '1990-01-01'
   ORDER BY employee_id;

EMPLOYEE_ID LAST_NAME
----------- ---------------
        100 King
        101 Kochhar
        200 Whalen

TO_LOB

構文


画像の説明

用途

TO_LOBは、long_column列のLONGまたはLONG RAW値をLOB値に変換します。このファンクションはLONGまたはLONG RAW列に対してのみ、およびINSERT文における副問合せのSELECT構文のリストにおいてのみ適用できます。

このファンクションを使用する前に、LOB列を作成して変換されたLONG値を受け取る必要があります。LONG値を変換する場合は、CLOB列を作成します。LONG RAW値を変換する場合は、BLOB列を作成します。

索引構成表を作成する場合は、CREATE TABLE ... AS SELECT文の副問合せで、TO_LOBファンクションを使用してLONG列をLOB列に変換することはできません。LONG列を含まない索引構成表を作成し、INSERT ...AS SELECT文でTO_LOBファンクションを使用してください。

参照:

  • LONG列をLOBに変換する別の方法については、「ALTER TABLE」の「modify_col_properties」を参照してください。

  • INSERT文の副問合せについては、「INSERT」を参照してください。

 

次の例では、不確定な表old_tableLONGデータに対するTO_LOBファンクションの使用方法を示します。

CREATE TABLE new_table (col1, col2, ... lob_col CLOB);
INSERT INTO new_table (select o.col1, o.col2, ... TO_LOB(o.old_long_col)
   FROM old_table o;

TO_MULTI_BYTE

構文


画像の説明

用途

TO_MULTI_BYTEは、シングルバイト文字を、対応するマルチバイト文字に変換してcharを戻します。charのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。戻り値は、charと同じデータ型です。

char内に同等のマルチバイト文字がないシングルバイト文字は、シングルバイト文字として出力されます。このファンクションは、ご使用のデータベース・キャラクタ・セットに、シングルバイト文字およびマルチバイト文字の両方が含まれている場合にのみ有効です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、シングルバイトAからUTF8のマルチバイトAへの変換を示します。

SELECT dump(TO_MULTI_BYTE( 'A')) FROM DUAL; 

DUMP(TO_MULTI_BYTE('A')) 
------------------------ 
Typ=1 Len=3: 239,188,161

TO_NCHAR(文字)

構文

to_nchar_char::=

画像の説明

用途

TO_NCHAR(文字)は、文字列、CHARVARCHAR2CLOBまたはNCLOB値を各国語キャラクタ・セットに変換します。戻り値は常にNVARCHAR2です。このファンクションは、各国語キャラクタ・セットでUSING句を指定したTRANSLATE ... USINGファンクションと同じです。

参照:

「データ変換」および「TRANSLATE ... USING」を参照してください。 

次の例では、oe.customers表のVARCHAR2データを各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(cust_last_name) FROM customers
   WHERE customer_id=103;

TO_NCHAR(CUST_LAST_NAME)
--------------------------------------------------
Taylor

TO_NCHAR(日時)

構文

to_nchar_date::=

画像の説明

用途

TO_NCHAR(日時)は、DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONEINTERVAL MONTH TO YEARまたはINTERVAL DAY TO SECONDデータ型の文字列をデータベース・キャラクタ・セットから各国語キャラクタ・セットに変換します。

参照:

「データ変換のセキュリティ上の考慮事項」 

次の例では、状態が9であるすべての注文のorder_dateを各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(ORDER_DATE) AS order_date
   FROM ORDERS
   WHERE ORDER_STATUS > 9
   ORDER BY order_date;

ORDER_DATE
--------------------------------------------------------------------------
06-DEC-99 02.22.34.225609 PM
13-SEP-99 10.19.00.654279 AM
14-SEP-99 09.53.40.223345 AM
26-JUN-00 10.19.43.190089 PM
27-JUN-00 09.53.32.335522 PM

TO_NCHAR(数値)

構文

to_nchar_number::=

画像の説明

用途

TO_NCHAR(数値)は、nを各国語キャラクタ・セットの文字列に変換します。n値には、NUMBERBINARY_FLOATまたはBINARY_DOUBLE型の値を指定できます。このファンクションは、引数と同じ型の値を戻します。オプションのfmtnに対応する'nlsparam'は、DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONEINTERVAL MONTH TO YEARまたはINTERVAL DAY TO SECONDデータ型です。

参照:

「データ変換のセキュリティ上の考慮事項」 

次の例では、oe.ordersサンプル表のcustomer_id値を各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(customer_id) "NCHAR_Customer_ID"  FROM orders 
   WHERE order_status > 9
   ORDER BY "NCHAR_Customer_ID";

NCHAR_Customer_ID
----------------------------------------
102
103
148
148
149

TO_NCLOB

構文


画像の説明

用途

TO_NCLOBは、LOB列またはその他の文字列のCLOB値をNCLOB値に変換します。charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。Oracle Databaseは、charのキャラクタ・セットをデータベース・キャラクタ・セットから各国語キャラクタ・セットに変換することによって、このファンクションを実行します。

次の例では、TO_NCLOBファンクションでデータを変換後、pm.print_media表のNCLOB列に文字データを挿入します。

INSERT INTO print_media (product_id, ad_id, ad_fltextn)
   VALUES (3502, 31001, 
      TO_NCLOB('Placeholder for new product description'));

TO_NUMBER

構文


画像の説明

用途

TO_NUMBERは、exprを、NUMBERデータ型の値に変換します。exprには、BINARY_DOUBLE値、またはオプションの書式モデルfmtによって指定された書式の数値を含むCHARVARCHAR2NCHARNVARCHAR2データ型の値を指定できます。

BINARY_FLOATexprを指定できます。ただし、浮動小数点はその内部表示によってのみ解釈されるため、この指定は意味がありません。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、文字列データを数値に変換します。

UPDATE employees SET salary = salary + 
   TO_NUMBER('100.00', '9G999D99')
   WHERE last_name = 'Perkins';

このファンクションの'nlsparam'引数は、数値変換のTO_CHARファンクションの場合と同じ用途に使用されます。詳細は、「TO_CHAR(数値)」を参照してください。

SELECT TO_NUMBER('-AusDollars100','L9G999D99',
   ' NLS_NUMERIC_CHARACTERS = '',.''
     NLS_CURRENCY            = ''AusDollars''
   ') "Amount"
     FROM DUAL;

    Amount
----------
      -100

TO_SINGLE_BYTE

構文


画像の説明

用途

TO_SINGLE_BYTEは、マルチバイト文字を、対応するシングルバイト文字に変換してcharを戻します。charのデータ型は、CHARVARCHAR2NCHARまたはNVARCHAR2です。戻り値は、charと同じデータ型です。

char内に同等のシングルバイト文字がないマルチバイト文字は、マルチバイト文字として出力されます。このファンクションは、ご使用のデータベース・キャラクタ・セットに、シングルバイト文字およびマルチバイト文字の両方が含まれている場合にのみ有効です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、UTF8のマルチバイトAからシングルバイトのASCIIのAへの変換を示します。

SELECT TO_SINGLE_BYTE( CHR(15711393)) FROM DUAL; 

T 
- 
A 

TO_TIMESTAMP

構文


画像の説明

用途

TO_TIMESTAMPは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型のcharを、TIMESTAMPデータ型の値に変換します。

オプションのfmtは、charの書式を指定します。fmtを指定しない場合、charはデフォルト書式のTIMESTAMPデータ型である必要があります。このデータ型は、NLS_TIMESTAMP_FORMAT初期化パラメータによって決まります。オプションの'nlsparam'引数は、日付変換のTO_CHARファンクションの場合と同じ用途で使用されます。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、文字列をタイムスタンプに変換します。文字列がデフォルトのTIMESTAMP書式ではないため、書式マスクを指定する必要があります。

SELECT TO_TIMESTAMP ('10-Sep-02 14:10:10.123000', 'DD-Mon-RR HH24:MI:SS.FF')
   FROM DUAL;

TO_TIMESTAMP('10-SEP-0214:10:10.123000','DD-MON-RRHH24:MI:SS.FF')
---------------------------------------------------------------------------
10-SEP-02 02.10.10.123000000 PM

参照:

デフォルトのTIMESTAMP書式の詳細は、『Oracle Databaseリファレンス』のNLS_TIMESTAMP_FORMATパラメータに関する項を参照してください。書式マスクの指定の詳細は、「日時書式モデル」を参照してください。 


TO_TIMESTAMP_TZ

構文

画像の説明

用途

TO_TIMESTAMP_TZは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型のcharを、TIMESTAMP WITH TIME ZONEデータ型の値に変換します。


注意:

このファンクションは、文字列をTIMESTAMP WITH LOCAL TIME ZONEに変換しません。変換するには、「CAST」で示すように、CASTファンクションを使用してください。 


オプションのfmtは、charの書式を指定します。fmtを指定しない場合、charはデフォルト書式のTIMESTAMP WITH TIME ZONEデータ型である必要があります。オプションの'nlsparam'は、日付変換のTO_CHARファンクションの場合と同じ用途で使用されます。

次の例では、文字列をTIMESTAMP WITH TIME ZONE値に変換します。

SELECT TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00',
   'YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;

TO_TIMESTAMP_TZ('1999-12-0111:00:00-08:00','YYYY-MM-DDHH:MI:SSTZH:TZM')
--------------------------------------------------------------------
01-DEC-99 11.00.00.000000000 AM -08:00

次の例では、サンプル表oe.order_itemsおよびoe.ordersを使用して、UNION演算のNULL列をTIMESTAMP WITH LOCAL TIME ZONEとしてキャストします。

SELECT order_id, line_item_id,
   CAST(NULL AS TIMESTAMP WITH LOCAL TIME ZONE) order_date
   FROM order_items
UNION
SELECT order_id, to_number(null), order_date
   FROM orders;

  ORDER_ID LINE_ITEM_ID ORDER_DATE
---------- ------------ -----------------------------------
      2354            1
      2354            2
      2354            3
      2354            4
      2354            5
      2354            6
      2354            7
      2354            8
      2354            9
      2354           10
      2354           11
      2354           12
      2354           13
      2354              14-JUL-00 05.18.23.234567 PM
      2355            1
      2355            2
...

TO_YMINTERVAL

構文


画像の説明

ym_iso_format::=

画像の説明

用途

TO_YMINTERVALは、CHARVARCHAR2NCHARまたはNVARCHAR2データ型の文字列を、INTERVAL YEAR TO MONTH型に変換します。

TO_YMINTERVALは、2つの書式のいずれかの引数を取ります。

SQL書式では、yearsは0(ゼロ)〜999999999の整数、monthsは0(ゼロ)〜11の整数になります。これ以外に、書式要素の間に空白を使用できます。

ISO書式では、yearsとmonthsは、0(ゼロ)〜999999999の整数になります。Days、hoursminutessecondsおよびfrac_secsは、負でない整数になります。負の整数を指定した場合は、無視されます。値に空白は使用できません。

次の例では、サンプル表hr.employeesの各従業員の雇用された後から1年と2か月後の日付を計算します。

SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') "14 months"
   FROM employees;

HIRE_DATE 14 months
--------- ---------
17-JUN-87 17-AUG-88
21-SEP-89 21-NOV-90
13-JAN-93 13-MAR-94
03-JAN-90 03-MAR-91
21-MAY-91 21-JUL-92
. . .

TRANSLATE

構文


画像の説明

用途

TRANSLATEは、from_string内のすべての文字をto_string内の対応する文字に置換してexprを戻します。from_string内に存在しないexpr内の文字は置換されません。引数from_stringには、to_stringより多い文字を指定できます。この場合、from_stringの終わりにある余分な文字には、to_string内に対応する文字がありません。これらの余分な文字がexpr内にある場合、それらの文字は戻り値から削除されます。

from_string内に1つの文字が複数回現れた場合は、最初の出現に対応するto_stringマッピングが使用されます。

戻り値からfrom_string内のすべての文字を削除するために、to_stringに空の文字列を使用することはできません。Oracle Databaseは空の文字列をNULLと解析するため、このファンクションにNULLの引数がある場合、NULLが戻されます。from_string内の文字をすべて削除するには、from_stringの先頭に別の文字を結合し、この文字をto_stringとして指定します。たとえば、TRANSLATE( expr, 'x0123456789', 'x')では、すべての数字がexprから削除されます。

TRANSLATEは、REPLACEファンクションに関連する機能を提供します。REPLACEファンクションでは、単一の文字列から別の単一の文字列への置換、および文字列の削除を実行できます。TRANSLATEでは、1回の操作で複数の単一文字を1対1で置き換えることができます。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。「REPLACE」も参照してください。 

次の文は、本のタイトルを、ファイル名などに使用するために文字列に変換します。from_stringには、空白、アスタリスク、スラッシュおよびアポストロフィの4つの文字(およびエスケープ文字のアポストロフィ)が含まれています。to_stringには、3つのアンダースコアのみが含まれています。from_stringの4つ目の文字に対応する置換文字がないため、戻り値ではアポストロフィが削除されています。

SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;

TRANSLATE('SQL*PLUSU
--------------------
SQL_Plus_Users_Guide

TRANSLATE ... USING

構文


画像の説明

用途

TRANSLATE ... USINGは、charをデータベース・キャラクタ・セットと各国語キャラクタ・セット間の変換に指定されたキャラクタ・セットに変換します。


注意:

TRANSLATE ... USINGは、主にANSIとの互換性のためにサポートされているファンクションです。TO_CHARおよびTO_NCHARファンクションを使用してデータをデータベース・キャラクタ・セットまたは各国語キャラクタ・セットに適切に変換することをお薦めします。TO_CHARおよびTO_NCHARは、文字データのみを受け入れるTRANSLATE ... USINGに比べ、より多くのデータ型を引数として取ることができます。 


引数charは変換する式です。

このファンクションは、OracleのCONVERTファンクションに似ていますが、入力または出力のデータ型にNCHARまたはNVARCHAR2を使用する場合は、CONVERTではなくこのファンクションを使用する必要があります。入力にUCS2コードポイントまたはバックスラッシュ(\)が含まれる場合は、UNISTRファンクションを使用してください。

参照:

CONVERT」および「UNISTR」を参照してください。 

次の文は、サンプル表oe.product_descriptionsのデータを使用して、TRANSLATE ... USINGファンクションの使用方法を示しています。

CREATE TABLE translate_tab (char_col  VARCHAR2(100),
                            nchar_col NVARCHAR2(50));
INSERT INTO translate_tab 
   SELECT NULL, translated_name
      FROM product_descriptions
      WHERE product_id = 3501;

SELECT * FROM translate_tab;

CHAR_COL             NCHAR_COL
-------------------- --------------------------------------------------
. . .
                     C pre SPNIX4.0 - Sys
                     C pro SPNIX4.0 - Sys
                     C til SPNIX4.0 - Sys
                     C voor SPNIX4.0 - Sys
. . .

UPDATE translate_tab 
   SET char_col = TRANSLATE (nchar_col USING CHAR_CS);

SELECT * FROM translate_tab;

CHAR_COL                  NCHAR_COL
------------------------- -------------------------
. . .
C per a SPNIX4.0 - Sys    C per a SPNIX4.0 - Sys
C pro SPNIX4.0 - Sys      C pro SPNIX4.0 - Sys
C for SPNIX4.0 - Sys      C for SPNIX4.0 - Sys
C til SPNIX4.0 - Sys      C til SPNIX4.0 - Sys
. . .

TREAT

構文


画像の説明

用途

TREATは式の宣言型を変更します。

このファンクションを使用する場合は、typeに対するEXECUTEオブジェクト権限が必要です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、「置換可能な表および列のサンプル:」で作成された表oe.personsを使用します。次の例では、persons表のすべての人物の給与属性を検索します。従業員ではない人物のインスタンスの値はNULLです。

SELECT name, TREAT(VALUE(p) AS employee_t).salary salary 
   FROM persons p;

NAME                          SALARY
------------------------- ----------
Bob
Joe                           100000
Tim                             1000

TREATファンクションを使用すると、置換可能列のサブタイプ属性に索引を作成できます。「置換可能な列の索引の作成例:」を参照してください。


TRIM

構文


画像の説明

用途

TRIMによって、文字列の先行または後続文字(またはその両方)を切り捨てることができます。trim_characterまたはtrim_sourceが文字リテラルの場合、一重引用符で囲む必要があります。

trim_charactertrim_sourceは両方とも、VARCHAR2またはVARCHAR2に暗黙的に変換できる任意のデータ型です。戻される文字列は、trim_sourceが文字データ型の場合はVARCHAR2データ型になり、trim_sourceがLOBデータ型の場合はLOBになります。trim_sourceと同じキャラクタ・セットの文字列が戻されます。

次の例では、hrスキーマの従業員の雇用日から先行0(ゼロ)を切り捨てます。

SELECT employee_id,
      TO_CHAR(TRIM(LEADING 0 FROM hire_date))
      FROM employees
      WHERE department_id = 60
      ORDER BY employee_id;

EMPLOYEE_ID TO_CHAR(T
----------- ---------
        103 3-JAN-90
        104 21-MAY-91
        105 25-JUN-97
        106 5-FEB-98
        107 7-FEB-99

TRUNC(数値)

構文

trunc_number::=

画像の説明

用途

TRUNC(数値)ファンクションは、n1を小数第n2位までに切り捨てた値を戻します。n2を指定しない場合、n1の小数点以下を切り捨てます。n2が負の場合は、小数点の左n2桁を切り捨てて、0(ゼロ)にします。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。n2を指定しない場合、このファンクションは、引数の数値データ型と同じデータ型を戻します。n2を指定すると、このファンクションはNUMBERを戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

次の例では、数値を切り捨てます。

SELECT TRUNC(15.79,1) "Truncate" FROM DUAL;

  Truncate
----------
      15.7

SELECT TRUNC(15.79,-1) "Truncate" FROM DUAL;

  Truncate
----------
        10

TRUNC(日付)

構文

trunc_date::=

画像の説明

用途

TRUNC(日付)ファンクションは、時刻部分を書式モデルfmtで指定された単位まで切り捨てたdateを戻します。このファンクションは、NLS_CALENDARセッション・パラメータの影響を受けません。このファンクションはグレゴリオ暦の規則に従って動作します。戻される値は、dateに異なる日時データ型を指定した場合でも、常にDATEデータ型です。fmtを省略すると、dateは最も近い日に切り捨てられます。fmtで使用できる書式モデルについては、「ROUNDおよびTRUNC日付ファンクション」を参照してください。

次の例では、日付を切り捨てます。

SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')
  "New Year" FROM DUAL;
 
New Year
---------
01-JAN-92 

TZ_OFFSET

構文


画像の説明

用途

TZ_OFFSETは、文が実行された日付に基づいた引数に対応するタイムゾーン・オフセットを戻します。有効なタイムゾーン名、UTCからのタイムゾーン・オフセット(それ自体を戻します)、またはキーワードSESSIONTIMEZONEまたはDBTIMEZONEを入力できます。time_zone_nameの有効な値を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAME列を問い合せます。


注意:

夏時間機能には、タイムゾーン地域名が必要です。地域名は、2つのタイムゾーン・ファイルに格納されます。デフォルトのタイムゾーン・ファイルは、パフォーマンスを最大にするために一般的なタイムゾーンのみの小さなファイルです。タイムゾーンがデフォルトのファイルに存在しない場合は、環境変数ORA_TZFILEを使用して完全な(大きい)ファイルへのパスを指定するまで、夏時間はサポートされません。 


次の例では、UTCからUS/東部タイムゾーンのタイムゾーン・オフセットを戻します。

SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

TZ_OFFS
-------
-04:00

UID

構文


画像の説明

用途

UIDは、セッション・ユーザー(ログインしているユーザー)を一意に識別する整数を戻します。

次の例では、現行のユーザーのUIDを戻します。

SELECT UID FROM DUAL;

UNISTR

構文


画像の説明

用途

UNISTRは、引数としてテキスト・リテラルまたは文字データに変換する式を取り、各国語キャラクタ・セットで戻します。データベースの各国語キャラクタ・セットは、AL16UTF16またはUTF8です。UNISTRでは、文字列への文字のUnicodeエンコーディング値の指定を可能にすることによって、Unicode文字列リテラルがサポートされます。これは、NCHAR列にデータを挿入する場合などに有効です。

Unicodeエンコーディング値は、\xxxxという形式です。xxxxは、文字のUCS-2エンコーディング形式での16進数値です。付加される文字は2つのコード単位としてエンコードされます。1つ目は高サロゲート範囲(U+D800〜U+DBFF)からエンコードされ、2つ目は低サロゲート範囲(U+DC00〜U+DFFF)からエンコードされます。バックスラッシュ自体を文字列に含めるには、バックスラッシュをもう1つ追加します(\\)。

移植性およびデータ保護のために、UNISTR文字列の引数にはASCII文字およびUnicodeエンコーディング値のみを指定することをお薦めします。

参照:

Unicodeおよび各国語キャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 

次の例では、ASCII文字およびUnicodeエンコーディング値をUNISTRファンクションに渡した後、そのUNISTRファンクションによって各国語キャラクタ・セットで文字列が戻されます。

SELECT UNISTR('abc\00e5\00f1\00f6') FROM DUAL;

UNISTR
------
abcåñö

UPDATEXML

構文


画像の説明

用途

UPDATEXMLは、引数としてXMLTypeインスタンスおよびXPath値の組を取り、更新された値を持つXMLTypeインスタンスを戻します。XPath_stringがXML要素の場合、対応するvalue_exprXMLTypeインスタンスです。XPath_stringが属性またはテキスト・ノードの場合、value_exprは任意のスカラー・データ型となります。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

XPath_stringおよびこれに対応するvalue_exprのターゲットのデータ型は一致する必要があります。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

XML要素を更新してNULLにした場合、属性および子要素が削除されるため、要素は空になります。要素のテキスト・ノードを更新してNULLにした場合、その要素のテキスト値が削除されるため、要素自体は残りますが空になります。

多くの場合、このファンクションはメモリー内のXML文書を実体化して、その値を更新します。ただし、UPDATEXMLは、直接オブジェクト・リレーショナル列の値を更新するように、その列でのUPDATE文に対して最適化されます。この最適化には、次の条件があります。

次の例では、サンプル・スキーマOEXMLType型のwarehouse_spec列を持つ)にあるSan Francisco倉庫のドック数を4に更新します。

SELECT warehouse_name,
   EXTRACT(warehouse_spec, '/Warehouse/Docks')
   "Number of Docks"
   FROM warehouses 
   WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>1</Docks>

UPDATE warehouses SET warehouse_spec =
   UPDATEXML(warehouse_spec,
   '/Warehouse/Docks/text()',4)
   WHERE warehouse_name = 'San Francisco';

1 row updated.

SELECT warehouse_name,
   EXTRACT(warehouse_spec, '/Warehouse/Docks')
   "Number of Docks"
   FROM warehouses 
   WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>4</Docks>

UPPER

構文


画像の説明

用途

UPPERは、すべての文字を大文字にしてcharを戻します。charは、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBデータ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義したバイナリ・マッピングに基づいて文字の形式を設定します。大文字の区別については、「NLS_UPPER」を参照してください。

次の例では、各従業員の姓を大文字で戻します。

SELECT UPPER(last_name) "Uppercase"
   FROM employees;

USER

構文


画像の説明

用途

USERは、セッション・ユーザー(ログインしているユーザー)の名前をVARCHAR2データ型で戻します。Oracle Databaseは、空白埋め比較セマンティクスでこのファンクションの値を比較します。

分散SQL文では、UIDファンクションおよびUSERファンクションは、ローカル・データベース上のユーザーを識別します。CHECK制約の条件でこれらのファンクションは使用できません。

次の例では、現行のユーザーおよびユーザーのUIDを戻します。

SELECT USER, UID FROM DUAL;

USERENV

構文


画像の説明

用途


注意:

USERENVは、下位互換用に保持されるレガシー・ファンクションです。現行の機能に対して組込みUSERENVネームスペースとともにSYS_CONTEXTファンクションを使用することをお薦めします。詳細は、「SYS_CONTEXT」を参照してください。 


USERENVは現行のセッションについての情報を戻します。この情報は、アプリケーション固有の監査証跡表を書き込む場合、またはセッションで現在使用されている言語固有の文字を判断する場合に有効です。CHECK制約の条件で、USERENVは使用できません。表5-13に、parameter引数の値を示します。

SESSIONIDおよびENTRYIDパラメータを使用するコール(NUMBERを戻す)以外のUSERENVへのすべてのコールは、VARCHAR2データを戻します。

表5-13    USERENVファンクションのパラメータ 
パラメータ  戻り値 

CLIENT_INFO 

DBMS_APPLICATION_INFOパッケージを使用するアプリケーションが格納できる64バイトまでのユーザー・セッション情報を戻します。

注意: 商業用のアプリケーションによっては、このコンテキスト値を使用する可能性があります。このコンテキスト領域の使用に対する制限については、これらのアプリケーションのドキュメントを参照してください。

参照:

  • アプリケーション・コンテキストの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • CREATE CONTEXT」および「SYS_CONTEXT」を参照してください。

 

ENTRYID 

現行の監査エントリ番号を戻します。監査エントリIDの順序は、ファイングレイン監査レコードと通常の監査レコードで共通です。この属性を分散SQL文で使用することはできません。 

ISDBA 

ISDBAは、オペレーティング・システムまたはパスワード・ファイルによって、ユーザーがDBA権限を持っていると認証された場合、'TRUE'を戻します。 

LANG 

言語名のISO略称を戻します。これは、既存の'LANGUAGE'パラメータを短縮したものです。 

LANGUAGE 

現行のセッションで使用している言語(language)および地域(territory)を、データベース・キャラクタ・セット(character set)も含めた次の書式で戻します。

language_territory.characterset
 

SESSIONID 

監査セッション識別子を戻します。この属性を分散SQL文で使用することはできません。 

TERMINAL 

現行のセッションの端末に対するオペレーティング・システム識別子を戻します。分散SQL文では、このパラメータはローカル・セッションの識別子を戻します。分散環境では、リモートのSELECTに対してのみこのパラメータを使用でき、リモートのINSERTUPDATEまたはDELETEには使用できません。 

次の例では、現行のセッションのLANGUAGEパラメータを戻します。

SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

Language
-----------------------------------
AMERICAN_AMERICA.WE8ISO8859P1

VALUE

構文


画像の説明

用途

VALUEは、引数としてオブジェクト表の行に関連付けられた相関変数(表別名)を取り、オブジェクト表に格納されたオブジェクト・インスタンスを戻します。オブジェクト・インスタンスの型は、オブジェクト表と同じ型です。

次の例では、「置換可能な表および列のサンプル:」で作成されたoe.personsサンプル表を使用します。

SELECT VALUE(p) FROM persons p;

VALUE(P)(NAME, SSN)
-------------------------------------------------------------
PERSON_T('Bob', 1234)
EMPLOYEE_T('Joe', 32456, 12, 100000)
PART_TIME_EMP_T('Tim', 5678, 13, 1000, 20)

参照:

VALUEファンクションでのIS OF型の使用方法については、「IS OF type条件」を参照してください。 


VAR_POP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

VAR_POPは、数値の集合にあるNULLを削除した後、この集合の母集団分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

ファンクションが空の集合に適用されると、NULLを戻します。このファンクションは、次の計算を行います。

(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、employees表にある給与の人口分散を計算します。

SELECT VAR_POP(salary) FROM employees;

VAR_POP(SALARY)
---------------
     15140307.5

分析の例

次の例では、sh.sales表での1998年における月ごとの売上について、累積の母集団および標本分散を計算します。

SELECT t.calendar_month_desc,
   VAR_POP(SUM(s.amount_sold)) 
      OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
   VAR_SAMP(SUM(s.amount_sold)) 
      OVER (ORDER BY t.calendar_month_desc) "Var_Samp" 
  FROM sales s, times t
  WHERE s.time_id = t.time_id AND t.calendar_year = 1998
  GROUP BY t.calendar_month_desc
  ORDER BY t.calendar_month_desc, "Var_Pop", "Var_Samp";

CALENDAR    Var_Pop   Var_Samp
-------- ---------- ----------
1998-01           0
1998-02  2269111326 4538222653
1998-03  5.5849E+10 8.3774E+10
1998-04  4.8252E+10 6.4336E+10
1998-05  6.0020E+10 7.5025E+10
1998-06  5.4091E+10 6.4909E+10
1998-07  4.7150E+10 5.5009E+10
1998-08  4.1345E+10 4.7252E+10
1998-09  3.9591E+10 4.4540E+10
1998-10  3.9995E+10 4.4439E+10
1998-11  3.6870E+10 4.0558E+10
1998-12  4.0216E+10 4.3872E+10

VAR_SAMP

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

VAR_SAMPは、数値の集合にあるNULLを削除した後、この集合の標本分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。 

ファンクションが空の集合に適用されると、NULLを戻します。このファンクションは、次の計算を行います。

(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / (COUNT(expr) - 1)

このファンクションは、1つの要素の集合を入力するとVARIANCEは0を戻し、VAR_SAMPはNULLを戻すという点を除いては、VARIANCEに似ています。

参照:

exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、サンプル表employeesにある給与の標本分散を計算します。

SELECT VAR_SAMP(salary) FROM employees;

VAR_SAMP(SALARY)
----------------
      15283140.5

分析の例

VAR_POP」の分析の例を参照してください。


VARIANCE

構文


画像の説明

参照:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。 

用途

VARIANCEexprの分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

exprの分散の計算結果は、次のようになります。

DISTINCTを指定する場合は、analytic_clausequery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

参照:

暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。 

集計の例

次の例では、サンプル表employeesにあるすべての給与の合計を計算します。

SELECT VARIANCE(salary) "Variance"
   FROM employees;

  Variance
----------
15283140.5

分析の例

次の例では、雇用日で順序付けられた部門30の給与の値の累積分散を戻します。

SELECT last_name, salary, VARIANCE(salary) 
      OVER (ORDER BY hire_date) "Variance"
   FROM employees 
   WHERE department_id = 30
   ORDER BY last_name, salary, "Variance"; 

LAST_NAME                     SALARY   Variance
------------------------- ---------- ----------
Baida                           2900 16283333.3
Colmenares                      2500   11307000
Himuro                          2600   13317000
Khoo                            3100   31205000
Raphaely                       11000          0
Tobias                          2800 21623333.3

VSIZE

構文


画像の説明

用途

VSIZEは、exprの内部表現でのバイト数を戻します。exprがNULLの場合はNULLを戻します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

参照:

詳細は、「データ型の比較規則」を参照してください。 

次の例では、部門10の従業員のlast_name列のバイト数を戻します。

SELECT last_name, VSIZE (last_name) "BYTES"      
  FROM employees
  WHERE department_id = 10
  ORDER BY employee_id;
 
LAST_NAME            BYTES
--------------- ----------
Whalen                   6

WIDTH_BUCKET

構文


画像の説明

用途

WIDTH_BUCKETを使用すると、ヒストグラムの幅が同じサイズに分割された等幅ヒストグラムを作成できます。このファンクションと、等高ヒストグラムを作成するNTILEを比較してください。各バケットが実際の数値線幅のclosed-open間隔であることが理想です。たとえば、間隔に10が含まれ20が排除されることを示すために、バケットは10.00〜19.999...のスコアに割り当てられます。これは、[10, 20]と表すこともできます。

指定された式に対して、WIDTH_BUCKETは、この式の値が評価された後に該当するバケット数を戻します。

Oracle Databaseは、必要に応じて、0(ゼロ)の下位バケットおよびnum_buckets+1の上位バケットを作成します。これらのバケットは、min_value未満およびmax_valueより大きい値を処理し、エンド・ポイントの妥当性チェックに有効です。

次の例では、サンプル表oe.customersのスイスの顧客のcredit_limit列に10バケットのヒストグラムを作成し、各顧客のバケット数(「クレジット・グループ」)を戻します。最大値を超えるクレジット利用限度額を持つ顧客は、上位バケット11に割り当てられます。

SELECT customer_id, cust_last_name, credit_limit, 
   WIDTH_BUCKET(credit_limit, 100, 5000, 10) "Credit Group"
   FROM customers WHERE nls_territory = 'SWITZERLAND'
   ORDER BY "Credit Group", customer_id, cust_last_name, credit_limit;

CUSTOMER_ID CUST_LAST_NAME       CREDIT_LIMIT Credit Group
----------- -------------------- ------------ ------------
        825 Dreyfuss                      500            1
        826 Barkin                        500            1
        827 Siegel                        500            1
        853 Palin                         400            1
        843 Oates                         700            2
        844 Julius                        700            2
        835 Eastwood                     1200            3
        836 Berenger                     1200            3
        837 Stanton                      1200            3
        840 Elliott                      1400            3
        841 Boyer                        1400            3
        842 Stern                        1400            3
        848 Olmos                        1800            4
        849 Kaurusmdki                   1800            4
        828 Minnelli                     2300            5
        829 Hunter                       2300            5
        850 Finney                       2300            5
        851 Brown                        2300            5
        852 Tanner                       2300            5
        830 Dutt                         3500            7
        831 Bel Geddes                   3500            7
        832 Spacek                       3500            7
        833 Moranis                      3500            7
        834 Idle                         3500            7
        838 Nicholson                    3500            7
        839 Johnson                      3500            7
        845 Fawcett                      5000           11
        846 Brando                       5000           11
        847 Streep                       5000           11

XMLAGG

構文


画像の説明

用途

XMLAGGは集計ファンクションです。XMLフラグメントのコレクションを取り、集計されたXML文書を戻します。NULLを戻す引数は結果から排除されます。

XMLAGGは、ノードのコレクションを戻す点を除いて、SYS_XMLAGGに似ていますが、XMLFormatオブジェクトを使用した書式設定は受け入れません。また、XMLAGGは、SYS_XMLAGGとは異なり、出力を要素タグで囲みません。

このorder_by_clauseにかぎり、他の使用方法とは異なり、数値リテラルは列の位置として認識されず、単に数値リテラルとして解釈されます。

参照:

XMLELEMENT」および「SYS_XMLAGG」を参照してください。 

次の例では、従業員のジョブIDと姓を要素の内容とするEmployee要素を含むDepartment要素を生成します。

SELECT XMLELEMENT("Department",
   XMLAGG(XMLELEMENT("Employee", 
   e.job_id||' '||e.last_name)
   ORDER BY last_name))
   as "Dept_list"     
   FROM employees e
   WHERE e.department_id = 30;

Dept_list
-------------------------------------------------------------
<Department>
  <Employee>PU_CLERK Baida</Employee>
  <Employee>PU_CLERK Colmenares</Employee>
  <Employee>PU_CLERK Himuro</Employee>
  <Employee>PU_CLERK Khoo</Employee>
  <Employee>PU_MAN Raphaely</Employee>
  <Employee>PU_CLERK Tobias</Employee>
</Department>

XMLAGGが行を集計するため、結果は単一行となります。GROUP BY句を使用して、戻された行の集合を複数のグループにまとめることができます。

SELECT XMLELEMENT("Department",
      XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name)))
   AS "Dept_list"
   FROM employees e
   GROUP BY e.department_id;

Dept_list
---------------------------------------------------------
<Department>
  <Employee>AD_ASST Whalen</Employee>
</Department>

<Department>
  <Employee>MK_MAN Hartstein</Employee>
  <Employee>MK_REP Fay</Employee>
</Department>

<Department>
  <Employee>PU_MAN Raphaely</Employee>
  <Employee>PU_CLERK Khoo</Employee>
  <Employee>PU_CLERK Tobias</Employee>
  <Employee>PU_CLERK Baida</Employee>
  <Employee>PU_CLERK Colmenares</Employee>
  <Employee>PU_CLERK Himuro</Employee>
</Department>
. . .

XMLCAST

構文


画像の説明

用途

XMLCastは、value_expressiondatatypeで指定されたスカラーSQLデータ型にキャストします。value_expression引数は、評価されるSQL式です。datatype引数のデータ型は、NUMBERVARCHAR2、および任意の日時データ型です。

参照:

このファンクションの使用の詳細および例は、『Oracle XML DB開発者ガイド』を参照してください。 


XMLCDATA

構文


画像の説明

用途

XMLCDataは、value_exprを評価してCDATAセクションを生成します。value_exprは文字列に変換する必要があります。このファンクションの戻り値は、次の書式になります。

<![CDATA[string]]>

結果値が無効なXML CDATAセクションの場合は、エラーが戻されます。

次の条件がXMLCDataに適用されます。

次の文は、DUAL表を使用して、XMLCDataの構文を示します。

SELECT XMLELEMENT("PurchaseOrder",
   XMLAttributes(dummy as "pono"),
   XMLCdata('<!DOCTYPE po_dom_group [
   <!ELEMENT po_dom_group(student_name)*>
   <!ELEMENT po_purch_name (#PCDATA)>
   <!ATTLIST po_name po_no ID #REQUIRED>
   <!ATTLIST po_name trust_1 IDREF #IMPLIED>
   <!ATTLIST po_name trust_2 IDREF #IMPLIED>
   ]>')) "XMLCData" FROM DUAL;
 
XMLCData
----------------------------------------------------------
<PurchaseOrder pono="X"><![CDATA[
<!DOCTYPE po_dom_group [
   <!ELEMENT po_dom_group(student_name)*>
   <!ELEMENT po_purch_name (#PCDATA)>
   <!ATTLIST po_name po_no ID #REQUIRED>
   <!ATTLIST po_name trust_1 IDREF #IMPLIED>
   <!ATTLIST po_name trust_2 IDREF #IMPLIED>
   ]>
  ]]>
</PurchaseOrder>

XMLCOLATTVAL

構文


画像の説明

用途

XMLCOLATTVALは、XMLフラグメントを作成し、各XMLフラグメントの名前がcolumn、属性がnameとなるように、結果としてできたXMLを展開します。

AS句を使用して、name属性の値を列名以外の値に変更できます。この場合、文字列リテラルのc_aliasを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が別名として使用されます。別名は、最大4000文字まで指定可能です。

value_exprの値を指定する必要があります。value_exprがNULLの場合、要素は戻されません。

XMLColAttValの制限事項:

value_exprにオブジェクト型の列を指定することはできません。

次の例では、従業員のサブセットに対してEmp要素を作成します。このとき、Empの内容として、employee_idlast_nameおよびsalaryの各要素がネストされます。ネストされた各要素にはcolumnという名前が付き、属性値として列名を持つname属性が与えられます。

SELECT XMLELEMENT("Emp",
   XMLCOLATTVAL(e.employee_id, e.last_name, e.salary)) "Emp Element"
   FROM employees e
   WHERE employee_id = 204;

Emp Element
--------------------------------------------------------------------
<Emp>
  <column name="EMPLOYEE_ID">204</column>
  <column name="LAST_NAME">Baer</column>
  <column name="SALARY">10000</column>
</Emp>

これらの2つのファンクションの出力の比較については、「XMLFOREST」を参照してください。


XMLCOMMENT

構文


画像の説明

用途

XMLCommentは、value_exprの評価結果を使用してXMLコメントを生成します。value_exprは文字列に変換する必要があります。このファンクションには、2つの連続したダッシュ(ハイフン)を含めることはできません。このファンクションの戻り値は、次の書式になります。

<!--string-->

value_exprがNULLである場合、このファンクションはNULLを戻します。

参照:

このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 

次の例は、DUAL表を使用して、XMLComment構文を示します。

SELECT XMLCOMMENT('OrderAnalysisComp imported, reconfigured, disassembled')
   AS "XMLCOMMENT" FROM DUAL;
 
XMLCOMMENT
--------------------------------------------------------------------------------
<!--OrderAnalysisComp imported, reconfigured, disassembled-->

XMLCONCAT

構文


画像の説明

用途

XMLCONCATは、入力として一連のXMLTypeインスタンスを取り、各行について一連の要素を連結し、連結した結果を戻します。XMLCONCATXMLSEQUENCEの逆の処理をします。

NULL式は結果から排除されます。値のすべての式がNULLの場合、このファンクションはNULLを戻します。

参照:

「XMLSEQUENCE」 

次の例では、従業員のサブセットの名前と姓に対してXML要素を作成し、作成した要素を連結して戻します。

SELECT XMLCONCAT(XMLELEMENT("First", e.first_name),
   XMLELEMENT("Last", e.last_name)) AS "Result"
   FROM employees e
   WHERE e.employee_id > 202;

Result
----------------------------------------------------------------
<First>Susan</First>
<Last>Mavris</Last>

<First>Hermann</First>
<Last>Baer</Last>

<First>Shelley</First>
<Last>Higgins</Last>

<First>William</First>
<Last>Gietz</Last>

4 rows selected.

XMLDIFF

構文


画像の説明

用途

XMLDiffファンクションは、XmlDiff C APIのSQLインタフェースです。このファンクションは、2つのXML文書を比較し、Xdiffスキーマに基づいたXMLの差異を取得します。diff文書がXMLType文書として戻されます。

次の例では、2つのXML文書を比較し、差異をXMLType文書として戻します。

SELECT XMLDIFF(
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://nosuchsite.com">
   <bk:tr>
        <bk:td>
                <bk:chapter>
                        Chapter 1.
                </bk:chapter>
        </bk:td>
        <bk:td>
                 <bk:chapter>
                        Chapter 2.
                </bk:chapter>
        </bk:td>
   </bk:tr>
</bk:book>'),
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://nosuchsite.com">
   <bk:tr>
        <bk:td>
                <bk:chapter>
                        Chapter 1.
                </bk:chapter>
        </bk:td>
        <bk:td/>
   </bk:tr>
</bk:book>')
)
FROM DUAL; 

XMLELEMENT

構文


画像の説明

XML_attributes_clause::=

画像の説明

用途

XMLELEMENTは、identifierに対する要素名を取るか、またはEVALNAME value_exprの要素名、要素に対する属性のオプションのコレクション、およびその要素の内容を構成する引数を評価します。このファンクションはXMLType型のインスタンスを戻します。XMLELEMENTは、戻されたXMLに属性を格納できる点を除いてSYS_XMLGENに似ていますが、XMLFormatオブジェクトを使用した書式設定は受け入れません。

次の項に示すとおり、通常は、XMLELEMENTファンクションはネストされており、ネスト構造のXML文書を生成します。

ENTITYESCAPINGおよびNONENTITYESCAPINGキーワードについては、『Oracle XML DB開発者ガイド』を参照してください。

囲みタグに使用するOracle Databaseの値を指定する必要があります。この場合、文字列リテラルのidentifierを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、最大4000文字まで指定可能で、列名または列の参照である必要はありません。式またはNULLは指定できません。

要素の内容を構成するオブジェクトは、XMLATTRIBUTESキーワードの後に指定します。XML_attributes_clauseでは、value_exprがNULLの場合、その値の式に対する属性は作成されません。value_exprの型に、オブジェクト型またはコレクションは指定できません。AS句を使用してvalue_exprに別名を指定すると、c_aliasまたは評価された値の式(EVALNAME value_expr)は、最大4000文字まで指定可能になります。

構文図のXML_attributes_clauseに続くオプションのvalue_exprは、次のようになります。

次の例では、一連の従業員について、従業員の名前と雇用日を指定する、ネストされた要素を持つEmp要素を生成します。

SELECT XMLELEMENT("Emp", XMLELEMENT("Name", 
   e.job_id||' '||e.last_name),
   XMLELEMENT("Hiredate", e.hire_date)) as "Result"
   FROM employees e WHERE employee_id > 200;

Result
-------------------------------------------------------------------
<Emp>
  <Name>MK_MAN Hartstein</Name>
  <Hiredate>17-FEB-96</Hiredate>
</Emp>

<Emp>
  <Name>MK_REP Fay</Name>
  <Hiredate>17-AUG-97</Hiredate>
</Emp>

<Emp>
  <Name>HR_REP Mavris</Name>
  <Hiredate>07-JUN-94</Hiredate>
</Emp>

<Emp>
  <Name>PR_REP Baer</Name>
  <Hiredate>07-JUN-94</Hiredate>
</Emp>

<Emp>
  <Name>AC_MGR Higgins</Name>
  <Hiredate>07-JUN-94</Hiredate>
</Emp>

<Emp>
  <Name>AC_ACCOUNT Gietz</Name>
  <Hiredate>07-JUN-94</Hiredate>
</Emp>

6 rows selected.

次の例では、XMLELEMENTファンクションにXML_attributes_clauseを使用して、トップレベル要素に対する属性値を持つ、ネストされたXML要素を作成します。

SELECT XMLELEMENT("Emp",
      XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
      XMLELEMENT("Dept", e.department_id),
      XMLELEMENT("Salary", e.salary)) AS "Emp Element"
   FROM employees e
   WHERE e.employee_id = 206;

Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
  <Dept>110</Dept>
  <Salary>8300</Salary>
</Emp>

last_nameにはAS identifier句が指定されていません。その結果、戻されたXMLは、デフォルトで列名last_nameを使用します。

最後に、次の例では、XML_attributes_clauseに副問合せを使用して、別の表から要素の属性に情報を取り出します。

SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),
   XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,
   (SELECT d.department_name FROM departments d
   WHERE d.department_id = e.department_id) as "Dept_name")),
   XMLELEMENT("salary", e.salary),
   XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element"
   FROM employees e
   WHERE employee_id = 205;

Emp Element
-------------------------------------------------------------------
<Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">
  <Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>
  <salary>12000</salary>
  <Hiredate>07-JUN-94</Hiredate>
</Emp>

XMLEXISTS

構文


画像の説明

XML_passing_clause::=

画像の説明

用途

XMLExistsは、指定されたXQuery式から空でないXQueryシーケンスが戻されるかどうかをチェックします。空でないXQueryシーケンスが戻される場合、このファンクションはTRUEを戻し、それ以外の場合はFALSEを戻します。引数XQuery_stringはリテラル文字列ですが、XML_passing_clauseを使用してバインドするXQuery変数を含めることができます。

XML_passing_clauseexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。

参照:

このファンクションの使用の詳細および例は、『Oracle XML DB開発者ガイド』を参照してください。 


XMLFOREST

構文


画像の説明

用途

XMLFORESTは、各引数パラメータをXMLに変換し、変換された引数を連結したXMLフラグメントを戻します。

次の例では、従業員のサブセットに対してEmp要素を作成します。このとき、Empの内容として、employee_idlast_nameおよびsalaryの各要素がネストされます。

SELECT XMLELEMENT("Emp", 
   XMLFOREST(e.employee_id, e.last_name, e.salary))
   "Emp Element"
   FROM employees e WHERE employee_id = 204;

Emp Element
----------------------------------------------------------------
<Emp>
  <EMPLOYEE_ID>204</EMPLOYEE_ID>
  <LAST_NAME>Baer</LAST_NAME>
  <SALARY>10000</SALARY>
</Emp>

これらの2つのファンクションの出力の比較については、「XMLCOLATTVAL」を参照してください。


XMLPARSE

構文


画像の説明

用途

XMLParseは、value_exprの評価結果からXMLインスタンスを解析して生成します。value_exprは文字列に変換する必要があります。value_exprがNULLである場合、このファンクションはNULLを戻します。

次の例は、DUAL表を使用して、XMLParseの構文を示します。

SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo="12435"> 
   <customerName> Acme Enterprises</customerName>
   <itemNo>32987457</itemNo>
   </purchaseOrder>' 
WELLFORMED) AS PO FROM DUAL;
 
PO
-----------------------------------------------------------------
124 <purchaseOrder poNo="12435">
   <customerName> Acme Enterprises</customerName>
   <itemNo>32987457</itemNo>
   </purchaseOrder>

XMLPATCH

構文


画像の説明

用途

XMLPatchファンクションは、XmlPatch C APIのSQLインタフェースです。このファンクションは、指定された変更を適用してXML文書を修正します。修正されたXMLType文書が戻されます。

次の例では、別のXMLType文書に指定された変更を適用してXMLType文書を修正し、修正したXMLType文書を戻します。

SELECT XMLPATCH(
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://nosuchsite.com">
   <bk:tr>
        <bk:td>
                <bk:chapter>
                        Chapter 1.
                </bk:chapter>
        </bk:td>
        <bk:td>
                 <bk:chapter>
                        Chapter 2.
                </bk:chapter>
        </bk:td>
   </bk:tr>
</bk:book>'),
XMLTYPE('<?xml version="1.0"?>
<xd:xdiff xsi:schemaLocation="http://xmlns.example.com/xdb/xdiff.xsd
  http://xmlns.example.com/xdb/xdiff.xsd"
  xmlns:xd="http://xmlns.example.com/xdb/xdiff.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:bk="http://nosuchsite.com">
  <?oracle-xmldiff operations-in-docorder="true" output-model="snapshot"
    diff-algorithm="global"?>
  <xd:delete-node xd:node-type="element"
   xd:xpath="/bk:book[1]/bk:tr[1]/bk:td[2]/bk:chapter[1]"/>
</xd:xdiff>')
)
FROM DUAL;

XMLPI

構文


画像の説明

用途

XMLPIは、identifiervalue_exprの評価結果(オプション)を使用して、XMLの処理命令を生成します。通常、処理命令は、XML文書のすべてまたは一部に関連付けられたアプリケーション情報に使用されます。アプリケーションはこの処理命令を使用して、XML文書の最適な処理方法を決定します。

囲みタグに使用するOracle Databaseの値を指定する必要があります。この場合、文字列リテラルのidentifierを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、最大4000文字まで指定可能で、列名または列の参照である必要はありません。式またはNULLは指定できません。

オプションのvalue_exprは文字列に変換する必要があります。オプションのvalue_exprを指定しない場合、デフォルトは長さが0(ゼロ)の文字列です。このファンクションの戻り値は、次の書式になります。

<?identifier string?>

XMLPIには、次の制限事項があります。

次の文は、DUAL表を使用して、XMLPIの構文の使用を示します。

SELECT XMLPI(NAME "Order analysisComp", 'imported, reconfigured, disassembled')
   AS "XMLPI" FROM DUAL;
 
XMLPI
--------------------------------------------------------------------------------
<?Order analysisComp imported, reconfigured, disassembled?>

XMLQUERY

構文


画像の説明

XML_passing_clause::=

画像の説明

用途

XMLQUERYでは、SQL文のXMLデータを問い合せることができます。このファンクションは、文字列リテラル、オプションのコンテキスト項目、および他のバインド変数としてXQuery式を取り、これらの入力値を使用してXQuery式の評価結果を戻します。

次の文では、XML_passing_clauseoe.warehouses表のwarehouse_spec列をコンテキスト項目として指定します。この文は、領域が50Kより大きいウェアハウスに関する特定の情報を戻します。

SELECT warehouse_name,
EXTRACTVALUE(warehouse_spec, '/Warehouse/Area'),
XMLQuery(
   'for $i in /Warehouse
   where $i/Area > 50000
   return <Details>
             <Docks num="{$i/Docks}"/>
             <Rail>
               {
               if ($i/RailAccess = "Y") then "true" else "false"
               }
             </Rail>
          </Details>' PASSING warehouse_spec RETURNING CONTENT) "Big_warehouses"
   FROM warehouses;

WAREHOUSE_ID Area      Big_warehouses
------------ --------- --------------------------------------------------------
           1     25000
           2     50000
           3     85700 <Details><Docks></Docks><Rail>false</Rail></Details>
           4    103000 <Details><Docks num="3"></Docks><Rail>true</Rail></Details>
 . . . 

XMLROOT

構文


画像の説明

用途

XMLROOTでは、既存のXML値のXMLルート情報(プロローグ)のバージョンとスタンドアロンのプロパティを指定して、新しいXML値を作成できます。value_exprがすでにプロローグを持っている場合、エラーが戻されます。入力がNULLの場合、このファンクションはNULLを戻します。

戻り値は次の書式になります。

<?xml version = "version" [ STANDALONE = "{yes | no}" ]?>

次の文は、DUAL表を使用して、XMLROOTの構文を示します。

SELECT XMLROOT ( XMLType('<poid>143598</poid>'), VERSION '1.0', STANDALONE YES)
   AS "XMLROOT" FROM DUAL;

XMLROOT
--------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<poid>143598</poid>

XMLSEQUENCE

構文


画像の説明

用途

XMLSEQUENCEには2つの書式があります。

XMLSEQUENCEXMLTypeのコレクションを戻すため、このファンクションをTABLE句で使用して、コレクション値をネスト解除することで複数行にし、SQL問合せでの処理をさらに進めることができます。

参照:

このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。また「XMLTABLE」も参照してください。 

次の例では、XMLSEQUENCEが複数の要素を持つXML文書をVARRAY型の単一要素ドキュメントに分割する方法を示しています。この例では、TABLEキーワードが、コレクションを副問合せのFROM句で使用できる表の値とみなすように、Oracle Databaseに指示しています。

SELECT EXTRACT(warehouse_spec, '/Warehouse') as "Warehouse"
   FROM warehouses WHERE warehouse_name = 'San Francisco';

Warehouse
------------------------------------------------------------
<Warehouse>
  <Building>Rented</Building>
  <Area>50000</Area>
  <Docks>1</Docks>
  <DockType>Side load</DockType>
  <WaterAccess>Y</WaterAccess>
  <RailAccess>N</RailAccess>
  <Parking>Lot</Parking>
  <VClearance>12 ft</VClearance>
</Warehouse>

1 row selected.

SELECT VALUE(p)
   FROM warehouses w, 
   TABLE(XMLSEQUENCE(EXTRACT(warehouse_spec, '/Warehouse/*'))) p
   WHERE w.warehouse_name = 'San Francisco';

VALUE(P)
----------------------------------------------------------------
<Building>Rented</Building>
<Area>50000</Area>
<Docks>1</Docks>
<DockType>Side load</DockType>
<WaterAccess>Y</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Lot</Parking>
<VClearance>12 ft</VClearance>

8 rows selected.

XMLSERIALIZE

構文


画像の説明

用途

XMLSerializeは、value_exprの内容を含む文字列またはLOBを作成します。

次の文は、DUAL表を使用して、XMLSerializeの構文を示します。

SELECT XMLSERIALIZE(CONTENT XMLTYPE('<Owner>Grandco</Owner>'))
   FROM DUAL;

XMLTABLE

構文


画像の説明

XMLnamespaces_clause::=

画像の説明

XMLTABLE_options::=

画像の説明

XML_passing_clause::=

画像の説明

XML_table_column::=

画像の説明

用途

XMLTableは、XQueryの評価結果をリレーショナル行および列にマップします。SQLを使用して、このファンクションで戻される結果を仮想リレーショナル表として問い合せることができます。

次の例では、warehouses表のwarehouse_spec列の各値にXQuery '/Warehouse'を適用した結果を、列WaterおよびRailのある仮想リレーショナル表に変換します。

SELECT warehouse_name warehouse,
   warehouse2."Water", warehouse2."Rail"
   FROM warehouses,
   XMLTABLE('/Warehouse'
      PASSING warehouses.warehouse_spec
      COLUMNS 
         "Water" varchar2(6) PATH '/Warehouse/WaterAccess',
         "Rail" varchar2(6) PATH '/Warehouse/RailAccess') 
      warehouse2;

WAREHOUSE                           Water  Rail
----------------------------------- ------ ------
Southlake, Texas                    Y      N
San Francisco                       Y      N
New Jersey                          N      N
Seattle, Washington                 N      Y


XMLTRANSFORM

構文


画像の説明

用途

XMLTRANSFORMは、引数としてXMLTypeインスタンスおよびXSLスタイルシート(それ自体がXMLTypeインスタンス)を取ります。このファンクションは、スタイルシートをインスタンスに適用して、XMLTypeを戻します。

このファンクションは、データをデータベースから取得するように、スタイルシートに従ってデータを編成する場合に有効です。

参照:

このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 

XMLTRANSFORMファンクションを使用するには、XSLスタイルシートが必要です。次に、ノード内の要素をアルファベット順に並べる単純なスタイルシートの例を示します。

CREATE TABLE xsl_tab (col1 XMLTYPE);

INSERT INTO xsl_tab VALUES (
   XMLTYPE.createxml(
   '<?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
      <xsl:output encoding="utf-8"/>
      <!-- alphabetizes an xml tree -->  
      <xsl:template match="*">  
        <xsl:copy>
          <xsl:apply-templates select="*|text()">
            <xsl:sort select="name(.)" data-type="text" order="ascending"/>
          </xsl:apply-templates> 
        </xsl:copy> 
      </xsl:template>
      <xsl:template match="text()"> 
        <xsl:value-of select="normalize-space(.)"/>
      </xsl:template>
    </xsl:stylesheet>  '));

1 row created.

次の例では、XSLスタイルシートxsl_tabを使用して、サンプル表oe.warehousesにあるwarehouse_specの要素をアルファベット順に並べます。

SELECT XMLTRANSFORM(w.warehouse_spec, x.col1).GetClobVal()
   FROM warehouses w, xsl_tab x
   WHERE w.warehouse_name = 'San Francisco';

XMLTRANSFORM(W.WAREHOUSE_SPEC,X.COL1).GETCLOBVAL()
--------------------------------------------------------------------------------
<Warehouse>
  <Area>50000</Area>
  <Building>Rented</Building>
  <DockType>Side load</DockType>
  <Docks>1</Docks>
  <Parking>Lot</Parking>
  <RailAccess>N</RailAccess>
  <VClearance>12 ft</VClearance>
  <WaterAccess>Y</WaterAccess>
</Warehouse>

ROUNDおよびTRUNC日付ファンクション

表5-14に、ROUNDおよびTRUNC日付ファンクションで使用できる書式モデル、および日付の丸めと切捨ての単位を示します。デフォルトのモデルDDでは、午前0時(真夜中)を基準に丸めおよび切捨てを行い、日付を戻します。

表5-14    ROUNDおよびTRUNC日付ファンクションの日付書式モデル 
書式モデル  丸め単位または切捨て単位 
CC
SCC
 

4桁の年号の上2桁より1大きい数 

SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y
 

年(7月1日に切上げ) 

IYYY
IY
IY
I
 

ISO年 

Q
 

四半期(その四半期の2番目の月の16日に切上げ) 

MONTH
MON
MM
RM
 

月(16日に切上げ) 

WW
 

年の最初の日と同じ曜日 

IW
 

ISO年の最初の日と同じ曜日 

W
 

月の最初の日と同じ曜日 

DDD
DD
J
 

日 

DAY
DY
D
 

週の開始日 

HH
HH12
HH24
 

時 

MI
 

分 

書式モデルDAY、DYおよびDによって使用される週の開始日は、NLS_TERRITORY初期化パラメータによって暗黙的に指定されています。

参照:

このパラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


ユーザー定義ファンクション

PL/SQLまたはJavaでユーザー定義ファンクションを作成し、SQLまたはSQL組込みファンクションにはない機能を持たせることができます。ユーザー定義ファンクションは、式を指定できる場所であればどこでも、SQL文に指定できます。

たとえば、SQL文の次の場所でユーザー定義ファンクションを使用できます。

user_defined_function::=

画像の説明

オプションの式のリストは、ファンクション、パッケージまたは演算子の属性と一致する必要があります。

ユーザー定義ファンクションの制限事項:

DISTINCTおよびALLキーワードは、ユーザー定義集計ファンクションのみで有効です。

参照:

  • ファンクションの作成(ユーザー定義ファンクションの制限を含む)の詳細は、「CREATE FUNCTION」を参照してください。

  • ユーザー・ファンクションの作成および使用方法の詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

 


前提条件

ユーザー定義ファンクションをSQL文で使用するには、トップレベル・ファンクションとして作成するか、またはパッケージ仕様部で宣言する必要があります。

SQLの式の中でユーザー・ファンクションを使用するには、ユーザーがユーザー・ファンクションのEXECUTE権限を持っている必要があります。ユーザー・ファンクションで定義したビューを問い合せるには、そのビューに対するSELECT権限が必要です。ビューから選択するには、個別のEXECUTE権限は必要ありません。

参照:

トップレベル・ファンクションの詳細は、「CREATE FUNCTION」を参照してください。パッケージ・ファンクションの詳細は、「CREATE PACKAGE」を参照してください。 


名前の優先順位

SQL文内では、データベースの列名は、パラメータなしのファンクション名より優先順位が高くなります。たとえば、Human Resourcesのマネージャが、hrスキーマに次の2つのオブジェクトを作成する場合は、次のようにします。

CREATE TABLE new_emps (new_sal NUMBER, ...);
CREATE FUNCTION new_sal RETURN NUMBER IS BEGIN ... END;

その後、次の2つの文のように、new_salを参照するとnew_emps.new_sal列を参照することになります。

SELECT new_sal FROM new_emps;
SELECT new_emps.new_sal FROM new_emps;

new_salファンクションにアクセスするには、次のように入力します。

SELECT hr.new_sal FROM new_emps;

SQLの式内で使用できるユーザー・ファンクションのコール例を次に示します。

circle_area (radius)
payroll.tax_rate (empno)
hr.employees.tax_rate (dependent, empno)@remote

hrスキーマからtax_rateユーザー・ファンクションをコールし、tax_table内のss_no列とsal列に対してこのファンクションを実行するには、次のように指定します。

SELECT hr.tax_rate (ss_no, sal)
    INTO income_tax
    FROM tax_table WHERE ss_no = tax_id;

INTO句は、結果をincome_tax変数に配置するために使用できるPL/SQLです。

ネーミング規則

オプションのスキーマ名またはパッケージ名を1つのみ指定すると、最初の識別子はスキーマ名またはパッケージ名のいずれかになります。たとえば、PAYROLL.TAX_RATEという参照内のPAYROLLがスキーマ名かパッケージ名かを判断するには、Oracle Databaseは次の手順を実行します。

  1. カレント・スキーマ内のPAYROLLパッケージをチェックします。

  2. PAYROLLパッケージが検出されない場合は、トップレベルのTAX_RATEファンクションを含むスキーマ名PAYROLLを検索します。このようなファンクションが検出されない場合は、エラーを戻します。

  3. カレント・スキーマ内でPAYROLLパッケージが検出されると、PAYROLLパッケージの中でTAX_RATEファンクションを検索します。このようなファンクションが検出されない場合は、エラーを戻します。

また、ユーザーが定義したシノニムを使用して、ストアド・トップレベル・ファンクションを参照することもできます。


戻る 次へ
Oracle
Copyright © 1996, 2008, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引