DUAL表について

ORACLE
20160510-1

ORACLEのDUAL表、何となく使っている方も多いと思います。

本記事では、このDUAL表についての解説と使い道をまとめました。

DUAL表(ダミー表)とは

DUAL表(ダミー表)は、ORACLEのディクショナリ表(データベースに関する情報を提供する読取り専用の表)の一つです。

DUAL表は、DUMMYというカラム名の項目を一つだけ持ちます。このDUMMY項目は、VARCHAR2(1)で定義されており、データは’X’の値で1レコードだけ保持しています。

SYSユーザーにテーブル定義されていますが、全てのユーザーでDUALという名前でアクセスすることができます。(パブリックシノニムを利用)

使い道

システム日付・時間の取得

ユーザーが作成したテーブルのデータを使用しない関数を使用する際に使用します。

例えば、SYSDATEやSYSTIMESTAMPで、システム日付・時間の取得したい場合に使用します。

SELECT SYSDATE FROM DUAL;

SYSDATE
--------
16-05-10

接続ユーザー名の取得

接続ユーザー名の取得で使用します。

SELECT USER FROM DUAL;

USER
--------
TESTUSER

順序(シーケンス)から値の取得

順序(シーケンス)から値の取得で使用します。

SELECT test_seq.NEXTVAL seq FROM DUAL;

SEQ
--------
1

SELECT test_seq.NEXTVAL seq FROM DUAL;

SEQ
--------
2

動作テスト

標準関数やユーザー定義関数の動作テスト等で使用します。

例えば、文字列を結合するCONCAT関数の動作を確かめたい場合、以下のように使用します。

SELECT CONCAT('AA','BB') func FROM DUAL;

FUNC
--------
AABB

他にも計算を行うことも出来ます。

SELECT 1+(2*3) func FROM DUAL;

FUNC
----
   7

実際にはデータファイルへのアクセスはない

Oracle10gより、実際にはDUAL表のデータが格納されているデータファイルへのアクセスは行われないように、最適化されています。
常にメモリに展開されているイメージです。

歴史

もともとは2行のデータがあり、別の票と結合することで直積で1行が2行に増やすために作られたようです。
そのためDUAL(=2つの、2重の)という名前が付いています。

それがいつのまにか、1行のデータになったようです。

まとめ

ORACLEのDUAL表について、そもそもというところから使い道まで細かく見てきました。

何となく使っている方も多いと思いますが、意外と色々な使い道があることが分かるかと思います。
特に簡易的な動作確認を行いたい時に、sqlplusから手軽に行えるので便利ですよ。

タイトルとURLをコピーしました