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 codeSelect *
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) |
クエリに含まれる行数を返します。count と count_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) | 文字列 |
指定した文字列から、部分文字列を返します。
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 進数 |
decimal1 を decimal2 で除算した余りを返します。 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) | 式 | expression1 と expression2 を比較します。expression1 と expression2 が等しい場合、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 パラメータに、指定した日数を加算します。
MS SQL では、dateadd(DAY, <int days>, <Date date>) という構文を使用します。Oracle では + に変換され、<int days>+<Date date>という構文を使用します。 |
datediff | datediff(start_date, end_date) | 整数 |
start_date と end_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 式を使用して上記のロジックを実装します。 |