NEWSニュース&ブログ

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へのアクセスへと変更されます。(ブロック読込はない模様)