2017/12/07
ORACLEのDUAL表、何となく使っている方も多いと思います。
本記事では、このDUAL表についての解説と使い道をまとめました。
sponsored link
DUAL表(ダミー表)とは
DUAL表(ダミー表)は、ORACLEのディクショナリ表(データベースに関する情報を提供する読取り専用の表)の一つです。
DUAL表は、DUMMYというカラム名の項目を一つだけ持ちます。このDUMMY項目は、VARCHAR2(1)で定義されており、データは’X’の値で1レコードだけ保持しています。
SYSユーザーにテーブル定義されていますが、全てのユーザーでDUALという名前でアクセスすることができます。(パブリックシノニムを利用)
使い道
システム日付・時間の取得
ユーザーが作成したテーブルのデータを使用しない関数を使用する際に使用します。
例えば、SYSDATEやSYSTIMESTAMPで、システム日付・時間の取得したい場合に使用します。
1 2 3 4 5 |
SELECT SYSDATE FROM DUAL; SYSDATE -------- 16-05-10 |
接続ユーザー名の取得
接続ユーザー名の取得で使用します。
1 2 3 4 5 |
SELECT USER FROM DUAL; USER -------- TESTUSER |
順序(シーケンス)から値の取得
順序(シーケンス)から値の取得で使用します。
1 2 3 4 5 6 7 8 9 10 11 |
SELECT test_seq.NEXTVAL seq FROM DUAL; SEQ -------- 1 SELECT test_seq.NEXTVAL seq FROM DUAL; SEQ -------- 2 |
動作テスト
標準関数やユーザー定義関数の動作テスト等で使用します。
例えば、文字列を結合するCONCAT関数の動作を確かめたい場合、以下のように使用します。
1 2 3 4 5 |
SELECT CONCAT('AA','BB') func FROM DUAL; FUNC -------- AABB |
他にも計算を行うことも出来ます。
1 2 3 4 5 |
SELECT 1+(2*3) func FROM DUAL; FUNC ---- 7 |
実際にはデータファイルへのアクセスはない
Oracle10gより、実際にはDUAL表のデータが格納されているデータファイルへのアクセスは行われないように、最適化されています。
常にメモリに展開されているイメージです。
歴史
もともとは2行のデータがあり、別の票と結合することで直積で1行が2行に増やすために作られたようです。
そのためDUAL(=2つの、2重の)という名前が付いています。
それがいつのまにか、1行のデータになったようです。
まとめ
ORACLEのDUAL表について、そもそもというところから使い道まで細かく見てきました。
何となく使っている方も多いと思いますが、意外と色々な使い道があることが分かるかと思います。
特に簡易的な動作確認を行いたい時に、sqlplusから手軽に行えるので便利ですよ。