DQL の使用

ビジネス・ビュー・クエリの作成では、DQL(ドメイン・クエリ言語)を使用します。

DQL は ANSI SQL 9.2 とほとんど同じものですが、いくつかの大きな相違点が存在します。

注: DQL でサポートされるのは SELECT ステートメントのみです。

このトピックの内容:

DQL の利点

DQL を使用したクエリの作成には、次のような利点があります。

DQL では、ユーザのアクセス許可レベルに応じたデータ非表示が適用される レポートの作成では、作成するユーザのアクセス許可レベルが適用されます。レポートを作成するユーザに利用が許可されていない情報がビジネス・ビューに含まれている場合、作成されたレポートにその情報は表示されません。
DQL クエリではデータベースの抽象化が作成され、ビジネス・ビューのベースとして使用される ビジネス・ビューのベースはデータベースを抽象化したもので、データベースそのものではありません。そのため、実際の名前に基づいてエンティティのフィールドを識別する必要はありません。たとえば、オブジェクトの ID に関連するフィールドはすべて、不具合 ID、サイクル ID、リリース ID などのサフィックス「ID」を使用して表示されます。
DQL クエリは、Oracle および SQL データベース・サーバでも正しく実行される  

先頭に戻る

SQL に対する追加事項

DQL では、ANSI SQL では利用できない次のオプションが用意されています。

  • 変数:次の 3 つの変数が追加されています。

    :me

    レポートを作成しているユーザに関する情報を返します。同じビジネス・ビューに基づいてレポートを作成する場合、レポートを作成するユーザごとに異なる結果が返されます。

    :me 変数は次のようになります。

    Copy code
    Select *
    From defect
    Where defect.detected_by = :me
    :current_project_name レポートが作成されるプロジェクトに関する情報を返します。
    :current_domain_name レポートが作成されるドメインに関する情報を返します。
  • Select Top:このオプションを使用すると、クエリの結果を定義した項目数までに制限することができます。

先頭に戻る

サポートされる関数

次の表では、OpenText Application Quality Management でサポートされる DQL 関数をまとめます。DQL 関数は、データベースで使用する SQL 関数にそれぞれ変換されます。この表では、DQL 関数と、それに該当する MS SQL および Oracle の対応も示しています。詳細については、MS SQL と Oracle のドキュメントを参照してください。

集計

関数

シグネチャ

戻り値タイプ

説明

count count(expression) 整数 クエリに含まれる行数を返します。
count_big count_big(expression) 整数(bigint)

クエリに含まれる行数を返します。countcount_big は、戻り値のみが異なります。MS SQL では、count_big は必ず bigint 型の値を返しますが、count は必ず int 型の値を返します。

Oracle では count に変換されます。

variance variance(decimal) 10 進数

式の分散を返します。

MS SQL では、関数は var に変換されます。Oracle では、関数は round(variance(<decimal>), 14) としてコード化されます。

var_pop var_pop(expression) 10 進数

値セット内の Null を破棄した後、母集団分散を返します。

MS SQL では varp に変換されます。Oracle では round(var_pop(<expression>), 14) という構文を使用します。

stddev stddev(decimal) 10 進数

値セットの標準偏差を返します。

MS SQL では stdev に変換されます。Oracle では round(stddev(<decimal>), 14) という構文を使用します。

stddev_pop stddev_pop(expression) 10 進数

母集団標準偏差を計算し、母集団分散の平方根を返します。

MS SQL では stdevp に変換されます。Oracle では round(stddev_pop(<expression>), 14) という構文を使用します。

avg avg(expression) 10 進数

式の平均値を返します。

Oracle では round(avg(<decimal>), 14) という構文を使用します。

sum sum(decimal) 10 進数 式の合計値を返します。
min min(expression) 式の最小値を返します。
max max(expression) 式の最大値を返します。

文字列の操作

関数

シグネチャ

戻り値タイプ

説明

upper upper(string) 文字列 指定した文字列をすべて大文字に変換します。
lower lower(string) 文字列 指定した文字列をすべて小文字に変換します。
rtrim rtrim(string) 文字列 指定した文字列の右端から空白文字をすべて削除した文字列を返します。
ltrim ltrim(string) 文字列 指定した文字列の左端から空白文字をすべて削除した文字列を返します。
replace replace(string, string_to_replace, replacement_string) 文字列 指定した文字列で、すべての<string_to_replace><replacement_string>に置き換えます。
substring substring(string, int_start_position, int_length) 文字列

指定した文字列から、部分文字列を返します。

  • int_start_position:部分文字列の取得を開始する位置。

  • int_length:取得する文字数。

Oracle では substr に変換されます。

length length(string) 10 進数

指定した文字列の長さを返します。

MS SQL では len に変換されます。

chr chr(integer) 文字列

int 型の ASCII コードを文字に変換します。

MS SQL では char に変換されます。

soundex soundex(string) 文字列 文字列の発音表現を返します。
ascii ascii(string) 整数 文字列の左端の文字を ASCII コード値に変換します。
concat concat(string1, string2) 文字列

2 つの文字列を連結します。

MS SQL では + に変換され、<string1>+<string2>という構文を使用します。

leftstr leftstr(string, integer) 文字列

文字数の左側から、指定した文字数を取り出します。

MS SQL では left に変換されます。Oracle では substr に変換され、substr(<string>, 1, <integer>) という構文を使用します。

lpad lpad(string1, integer, string2) 文字列

<string1>の左側に、長さが<integer>文字になるまで文字列<string2>を挿入します。この関数は、クエリ出力の書式設定で使用すると便利です。

MS SQL では、left padding 式を使用して上記のロジックを実装します。

reverse reverse(string) 文字列

文字列を逆順に並びかえます。

Oracle では reverse(to_char(<string>)) という構文を使用します。

rightstr rightstr(string, integer) 文字列

文字数の右側から、指定した文字数を取り出します。

MS SQL では right に変換されます。Oracle では、substr 関数と right part 式を使用して上記のロジックを実装します。

rpad rpad(string1, integer, string2) 文字列

<string1>の右側に、長さが<integer>文字になるまで文字列<string2>を挿入します。この関数は、クエリ出力の書式設定で使用すると便利です。

MS SQL では left 関数と right padding 式を使用して上記のロジックを実装します。

stuff stuff(string, integer, integer, string) 文字列

文字列を、別の文字列に挿入します。最初の文字列内で、開始位置から指定の文字数を削除し、その位置に 2 番目の文字列を挿入します。

Oracle では、上記のロジックを実装する式に変換されます。

in_string in_string(string1, string2, integer_start_location) 整数

string2 の中に部分文字列 string1 が存在する場合、文字列の位置を返します。存在しない場合は 0 を返します。検索の開始位置は integer_start_location であり、1 から始まります。

MS SQL では charindex に変換されます。Oracle では instr に変換され、instr(<string2>, <string1>, <integer_start_location>) という構文を使用します。

replicate replicate(string, integer) 文字列

<string> の値を、<integer>パラメータで指定した回数だけ繰り返します。

Oracle では rpad に変換され、rpad(<string>, length(<string>*<integer>), <string>) という構文を使用します。

算術演算

関数

シグネチャ

戻り値タイプ

説明

sin sin(decimal) 10 進数

decimal パラメータの正弦を返します。

Oracle では round(sin(<decimal>), 14) という構文を使用します。

asin asin(decimal) 10 進数

decimal パラメータの逆正弦を返します。引数は、-1 から 1 の範囲で指定します。

Oracle では round(asin(<decimal>), 14) という構文を使用します。

cos cos(decimal) 10 進数

decimal パラメータの余弦を返します。

Oracle では round(cos(<decimal>), 14) という構文を使用します。

acos acos(decimal) 10 進数

decimal パラメータの逆余弦を返します。引数は、-1 から 1 の範囲で指定します。

Oracle では round(acos(<decimal>), 14) という構文を使用します。

tan tan(decimal) 10 進数

decimal パラメータの正接を返します。

Oracle では round(tan(<decimal>), 14) という構文を使用します。

atan atan(decimal) 10 進数

decimal パラメータの逆正接を返します。

Oracle では round(atan(<decimal>), 14) という構文を使用します。

atan2 atan2(decimal1, decimal2) 10 進数

正方向の x 軸と、原点から座標(y, x)が作る角度(ラジアン)を返します。decimal1 で x 座標、decimal2 で y 座標を指定します。

MS SQL では atn2 に変換されます。Oracle では round(atan2(<decimal1>), 14) という構文を使用します。

tanh tanh(decimal) 10 進数

decimal パラメータの双曲線正接を返します。

MS SQL では、tanh 式を使用して上記のロジックを実装します。Oracle では round(tanh(<decimal>), 14) という構文を使用します。

sqrt sqrt(decimal) 10 進数

decimal パラメータの平方根を返します。

Oracle では round(sqrt(<decimal>), 14) という構文を使用します。

exp exp(decimal) 10 進数

e を底とする decimal パラメータのべき乗を返します。ここで、e = 2.71828183 となります。

Oracle では round(exp(<decimal>), 14) という構文を使用します。

sign sign(decimal) 10 進数

数値の符号を示す値を返します。数値が負の場合、sign は -1 を返します。0 の場合、sign は 0 を返します。正の場合、sign は 1 を返します。

MS SQL では sign 式で上記のロジックを実装し、CAST(sign(<decimal>) AS int) という構文を使用します。

floor floor(decimal) 整数 指定した decimal 引数の値以下で、最大の整数を返します。
ln ln(decimal) 10 進数

decimal 引数の自然対数を返します。

MS SQL では log に変換されます。Oracle では round(In(<decimal>), 14) という構文を使用します。

abs abs(decimal) 10 進数 絶対値を返します。
round round(decimal, integer) 10 進数

decimal を、integer で指定した小数点以下の桁数まで四捨五入します。小数点よりも左の桁で四捨五入する場合は、integer パラメータに負の値を指定します。

MS SQL では、integer の値に 0 が含まれるかどうかによって、CAST(round(<decimal>, <integer>) AS int) または CAST(round(<decimal>, <integer>) AS float) という構文を使用します。

mod mod(decimal1, decimal2) 10 進数

decimal1decimal2 で除算した余りを返します。

MS SQL では % に変換され、<decimal1> % <decimal2>という構文を使用します。

trunc_number trunc_number(decimal, integer) 10 進数

decimal を、integer で指定した小数点以下の桁数まで切り捨てます。integer を省略すると、小数点以下を切り捨てます。

MS SQL では、truncation 式を使用して上記のロジックを実装します。Oracle では trunc に変換されます。

str str(decimal, integer1, integer2) 文字列

数値データを文字データに変換します。

Oracle では、string construction 式を使用して上記のロジックを実装します。

ceil ceil(decimal) 10 進数

decimal パラメータで指定した値以上で、最小の整数を返します。

MS SQL では ceiling に変換されます。

型変換

関数

シグネチャ

戻り値タイプ

説明

to_number to_number(string) 10 進数

文字列を数値に変換します。

MS SQL では、CAST(<string> AS float) という構文を使用します。

number_to_char number_to_char(decimal) 文字列

数値を文字列に変換します。

MS SQL では、CAST(<decimal> AS varchar(50)) という構文を使用します。Oracle では to_char に変換されます。

char_to_char char_to_char(string) 文字列

NCHAR、NVARCHAR2、CLOB、NCLOB のデータをデータベース文字セットに変換します。

MS SQL では、CAST(<string> AS varchar(50)) という構文を使用します。Oracle では to_char に変換されます。

datetime_to_char datetime_to_char(expression) 文字列

date 型または datetime 型を文字列に変換します。

MS SQL では、convert(varchar, <date>, 121) という構文を使用します。Oracle では to_char に変換され、to_char(<date>, 'YYYY-MM-DD HH24:MI:SS:FF3') という構文を使用します。

その他

関数

シグネチャ

戻り値タイプ

説明

nullif nullif(expression1, expression2) expression1expression2 を比較します。expression1expression2 が等しい場合、Null を返します。それ以外の場合は expression1 を返します。
coalesce coalesce() 引数の中で最初に出現する Null 以外の式を返します。優先順位が最も高いパラメータのデータ型で、戻り値を返します。
isnull isnull(check_expression, replace_expression)

Null 値が検出されたら、値を代入します。check_expression が Null の場合、replace_expression が返されます。

Oracle では nvl に変換されます。

日付

関数

シグネチャ

戻り値タイプ

説明

currentdate currentdate() 日付

現在の日付を返します。

MS SQL では、CAST(CAST(getdate() AS date) AS datetime) という構文を使用します。Oracle では to_date(to_char(sysdate)) という構文を使用します。

dateadd dateadd(integer, date) 日付

date パラメータに、指定した日数を加算します。

  • integer:加算する日数。

  • date:日付。

MS SQL では、dateadd(DAY, <int days>, <Date date>) という構文を使用します。Oracle では + に変換され、<int days>+<Date date>という構文を使用します。

datediff datediff(start_date, end_date) 整数

start_dateend_date で指定した日付の範囲にある日数(符号付き整数)を返します。

MS SQL では、datediff(DAY, <date>, <date>) という構文を使用します。Oracle では - に変換され、trunc(<date>-<date>, 0) という構文を使用します。

get_time get_time() 日時

現在の日付と時刻を返します。

MS SQL では getdate に変換され、convert(datetime, getdate(), 126) という構文を使用します。Oracle では LOCALTIMESTAMP に変換されます。

trunc_date trunc_date(date, string_format) 日付

指定した単位まで日付を切り捨てます。切り捨てに適用する測定単位は string_format で指定します。サポートされる形式:year、y、yy、yyyy、q、quarter、mm、month、d、dd、day、hh、mi

MS SQL では dateadd に変換され、dateadd(<unquoted string_format>, datediff(<unquoted string_format>, 0, <date>), 0) という構文を使用します。Oracle では trunc に変換され、trunc(<date>, <string_format>という構文を使用します。

to_date to_date(string) 日付

文字列を日付に変換します。

MS SQL では、CAST(<string> AS datetime) という構文を使用します。Oracle では、to_date(<string>, 'YYYY-MM-DD') という構文を使用します。

timestamp_tz timestamp_tz() 文字列

現在のサーバのタイムゾーンを返します。

MS SQL では sysdatetimeoffset に変換されます。Oracle では CURRENT_TIMESTAMP に変換されます。この関数は、MS SQL Server 2005 ではサポートされていません。

from_tz from_tz(date, string) 日付

タイムスタンプ値(date)とタイムゾーン(string)を、タイムゾーン付きのタイムスタンプに変換します。

MS SQL では time stamp 式と zone 式を使用して上記のロジックを実装します。この関数は、MS SQL Server 2005 ではサポートされていません。

sysdatetimeoffset sysdatetimeoffset() タイムゾーン付き datetime

データベースが格納されているシステムのシステム日時(小数秒を含む)とタイムゾーンを返します。

Oracle では SYSTIMESTAMP に変換されます。この関数は、MS SQL Server 2005 ではサポートされていません。

getyear getyear(date) 整数

指定した date の年を示す整数値を返します。

MS SQL では year に変換されます。Oracle では to_char に変換され、CAST(to_char(<date>, 'yyyy') AS number) という構文を使用します。

getmonth getmonth(date) 整数

指定した date の月を示す整数値を返します。

MS SQL では month に変換されます。Oracle では to_char に変換され、CAST(to_char(<date>, 'mm') AS number) という構文を使用します。

getday getday(date) 整数

指定した date の日付を示す整数値を返します。

MS SQL では day に変換されます。Oracle では to_char に変換され、CAST(to_char(<date>, 'dd') AS number) という構文を使用します。

datepart datepart(string_datepart, date) 整数

指定した date について、指定した string_datepart を示す整数値を返します。

MS SQL では、datepart(<unquoted string_datepart>, <date>) という構文を使用します。Oracle では、datepart 式を使用して上記のロジックを実装します。

datename datename(string_datepart, date) 文字列

指定した date について、指定した string_datepart を示す文字列を返します。サポートされる書式は、yyyy、yy、year、q、quarter、m、month、d、dd、day、hh、mi です。

MS SQL では、datename(<unquoted string_datepart>, <date>) という構文を使用します。Oracle では、datename 式を使用して上記のロジックを実装します。

特殊な日付操作

注: 次の関数は、要求された日付をそれぞれ該当するデータ型で返します。MS SQL では、yyyy-MM-dd の形式で日付を要求すると、datetime に変換されます。Oracle では、to_date(<dd-MMM-yy 形式の日付>, DD-MON-YY)という構文を使用します。

関数

シグネチャ

戻り値タイプ

説明

firstDayOfCurrentMonth firstDayOfCurrentMonth() 日付 現在の月の最初の日付を返します。
firstDayOfCurrentWeek firstDayOfCurrentWeek() 日付 現在の週の最初の日付を返します。
firstDayOfCurrentYear firstDayOfCurrentYear() 日付 現在の年の最初の日付を返します。
firstDayOfNextMonth firstDayOfNextMonth() 日付 次の月の最初の日付を返します。
firstDayOfNextWeek firstDayOfNextWeek() 日付 次の週の最初の日付を返します。
firstDayOfNextYear firstDayOfNextYear() 日付 次の年の最初の日付を返します。
firstDayOfPreviousMonth firstDayOfPreviousMonth() 日付 前の月の最初の日付を返します。
firstDayOfPreviousWeek firstDayOfPreviousWeek() 日付 前の週の最初の日付を返します。
firstDayOfPreviousYear firstDayOfPreviousYear() 日付 前の年の最初の日付を返します。
lastDayOfCurrentMonth lastDayOfCurrentMonth() 日付 現在の月の最後の日付を返します。
lastDayOfCurrentWeek lastDayOfCurrentWeek() 日付 現在の週の最後の日付を返します。
lastDayOfCurrentYear lastDayOfCurrentYear() 日付 現在の年の最後の日付を返します。
lastDayOfNextMonth lastDayOfNextMonth() 日付 次の月の最後の日付を返します。
lastDayOfNextWeek lastDayOfNextWeek() 日付 次の週の最後の日付を返します。
lastDayOfNextYear lastDayOfNextYear() 日付 次の年の最後の日付を返します。
lastDayOfPreviousMonth lastDayOfPreviousMonth() 日付 前の月の最後の日付を返します。
lastDayOfPreviousWeek lastDayOfPreviousWeek() 日付 前の週の最後の日付を返します。
lastDayOfPreviousYear lastDayOfPreviousYear() 日付 前の年の最後の日付を返します。

条件

関数

シグネチャ

戻り値タイプ

説明

decode decode(expression, search, result [, search, result]...[, default] )

IF-THEN-ELSE ステートメントの機能を果たします。expression と search 値を 1 つずつ比較します。等しい search 値が見つかった場合、Oracle は対応する結果を返します。一致しない場合、Oracle は default を返します。default を省略すると、Oracle は null を返します。

MS SQL では、case-when-else 式を使用して上記のロジックを実装します。

greatest greatest()

パラメータのリストで最大の値を返します。

MS SQL では、greatest 式を使用して上記のロジックを実装します。

least least()

パラメータのリストで最小の値を返します。

MS SQL では、least 式を使用して上記のロジックを実装します。

先頭に戻る