ニュース&ブログ
Oracle 便利SQL帖 その3 今の日付(関数の呼び出し)を確認する
この記事は最終更新から8年以上経過しています。内容が古くなっている可能性があります。
投稿日:2016/8/1
DUAL
DUAL表はOracle Databaseによって自動で作成されるテーブルで、SYSスキーマの持ち物になっています。ただし、全てのユーザからアクセスが可能となっています。DUMMYと言うカラムだけで構成されており、「X」と言う1レコードだけ存在します。一般的に関数の呼び出しや確認に使用されます。
実行例
実際にDUAL表を用いて現在の日付を表示します。
【SQL】
select sysdate from dual;
【実行結果】
SYSDATE
--------
16-01-29
また、sysdate関数はdate型のデータなので、以下の方法で、nls_date_formatを指定する事で日時まで表示が可能です。
【SQL】
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
select sysdate from dual;
【実行結果】
SYSDATE
-------------------
2016/01/29 11:34:24
コラム DUAL表を利用したSQLの実行計画
DUAL表を利用したSQLの実行計画は少し特殊です。あまり見る事はないですが、Databaseのチューニングなどを行う場合の参考にしてください。
例えば先ほどの紹介したSQLの場合実行計画は以下の通りです。
SQL> explain plan for
2 select sysdate from dual;
解析されました。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------
8行が選択されました。
SQL>
上記の通り、DUAL表へのアクセスはFAST DUALへのアクセスへと変更されます。(ブロック読込はない模様)