Oracle University 講師が ORACLE MASTER 取得を目指している方に向けて試験トピックを解説するブログ連載講座。「ORACLE MASTER Silver SQL 2019」資格取得に向けた試験トピックについて解説します。

————————————————-

今回はORACLE MASTER Silver SQLの試験トピック「単一行関数を使用した出力のカスタマイズ – 日付データを含む算術演算の実行 -」に関連する問題をご紹介いたします。ORACLE MASTER Silver SQL(Exam Number: 1Z0-071-JPN)の詳細につきましては以下URLをご参考ください。

Oracle Database SQL Exam Number: 1Z0-071

URL: https://education.oracle.com/ja/oracle-database-sql/pexam_1Z0-071

————————————————-

今回はSQLの単一行関数である日付関数について扱っていきましょう。「関数」と聞くと、拒絶反応を示す人がいるかもしれませんが、しっかりと理解して内容をまとめておくことで確実に点数を稼ぐことができると思います。それでは問題を解いていきましょう。

(解説&解答)

今回は先に正解の選択肢をお伝えしておきましょう。正解は選択肢1と3と5になります。

では各選択肢を確認しながら解説していきたいと思います。

選択肢1~3に出てきているSYSDATEは、現在のデータベース・サーバーの日時を戻す日付関数になります。SELECT句に列名を指定するのと同じようにSYSDATE関数を使用することが可能で、今回の問題にあったEMP_TABLEのような通常の表を問い合わせる形で実行することもできます。ただし、通常の表を指定した場合、表に格納されている件数分の情報が出力されるので、単にデータベース・サーバーの日付を確認したいという場合はDUAL表と呼ばれるダミー表を使用することが一般的ですね。実行例を載せておきましょう。

ダミー表の詳細については「第九回:DUAL表の使用」をご参考ください。

以上の内容から、選択肢1は正しい内容になります。

追加情報でSYSDATE以外の日付に関する関数としてCURRENT_DATE関数とCURRENT_TIMESTAMP関数も覚えておきましょう。SYSDATEは、現在のデータベース・サーバーの日時を戻す日付関数であると説明しました。つまり、日本国内の特定の場所で、米国(U.S)内のリモート・データベースに接続してSYSDATEを実行した場合は米国側のサーバー時刻が戻されるということですね。CURRENT_DATEとCURRENT_TIMESTAMPも日付情報を戻す関数ですが、どちらもセッション・タイムゾーンの現在の日付を戻すという点が異なります。

それぞれの内容をまとめたものと実行例を載せておきます。

次に選択肢2の内容ですが、日付を表示する書式に問題があるためエラーになる、と記載されてます。日付書式については、問題文にあるNLS_DATE_FORMAT というパラメータで表示をカスタマイズすることが可能ですが、表示する書式を変更するだけですので、このパラメータ値の影響によりSYSDATE関数が使えなくなるということはありません。

選択肢2は「・・SYSDATE関数は日付書式が DD-MON-RR である必要があるため・・エラーが出力される。」と記載があるので誤りであることが分かりますね。

残りの選択肢も見ていきます。残りの選択肢は日付に対して算術演算を行っている内容となってます。まずは日付に対しての加算や減算について実行可能な操作を以下の表にまとめておきます。

「select sysdate + 1 from dual」のような簡単な操作でもOKなので実際に動作確認しておきましょう。

各選択肢の内容を実行した結果を以下に示しておきます。(SQL文を実行するためのサンプル定義&データは記事の最後に記載しておきます)

日付の書式は問題文にある YYYY-MM-DD HH24:MI:SI とします。

実行結果と選択肢を見比べてみてください。選択肢3は「・・日数が返る」とありますので正しい内容になります。選択肢4は「・・日付 - 数値の計算をしているのでエラーになる」とありますが、構文的に問題なく日付データが返るので誤りの選択肢です。選択肢5は「・・日付のデータが返る」とありますので正しい選択肢になります。選択肢6は、後ほど詳細を記載しますが、SQL文を実行するとエラーとなりますのでこの時点で誤りの選択肢であると分かりますね。

日付の計算について追加で注意すべき点として、日付の算術演算は [日付 + 日付] の操作はエラーになるという点です。合わせて覚えておいてください。

では選択肢6にあった「to_number」について確認していきましょう。こちらの関数は、指定した書式にデータ型を変換することができる単一行関数の一種になり、変換関数といいます。この変換関数については3種類あるので表にまとめておきます。

明示的に変換関数を指定してデータ型を変更することができるわけですが、それぞれの関数が使用できるデータ型については以下の図で確認しておきましょう。

選択肢6にあるTO_NUMBER関数は日付型(hiredate列)を指定することはできませんので誤りになりますね。

各変換関数を実際に使用した例を載せておきますので参考にしてください。

※ 変換関数につきましては「第二一回:TO_CHAR、TO_NUMBERおよびTO_DATE関数の使用」も参考にしてください。
※ 変換関数の使用方法や、各書式モデルの詳細につきましては、Oracle Databaseのマニュアルである『Oracle Database SQL言語リファレンス』を参照しておきましょう。

今回使用したテーブル定義、サンプルデータを記載しておきます。実際に操作することで理解を深めてください。

— emp_table表作成 とsample dataの挿入–
drop table emp_table;
create table emp_table(
        empno           number(6) primary key,
        ename           varchar2(20),
        hiredate        date,
        sal             number(10));

alter session set nls_date_format=’RR-MM-DD’;
insert into emp_table values(100, ‘Steven King’, ’80-12-17′, 12000);
insert into emp_table values(101, ‘Neena Kochhar’, ’81-02-20′, 10000);
insert into emp_table values(102, ‘Alexander Hunold’,’98-05-01′, 9000);
insert into emp_table values(103, ‘Diana Lorentz’, ’10-07-22′, 5000);

commit;

今回は単一行関数の日付データに関する内容について学習を行いました。

SQLの関数は他にも色々種類がありますが、「関数=苦手」と考えてしまう方は、まずは実際に動作させてみましょう。実際に動作をさせて意図した結果が返ってくれば理解も深まり自然と苦手意識もなくなってくるはずです!頑張って学習を継続していきましょう。

今回はここまでとします。それではまた次回に。

————————————————-

ORACLE MASTER Silver SQL 2019 のご紹介

ORACLE MASTER Silver SQL 2019 試験記事トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-