Oracleのデュアルテーブルとは何ですか?


229

この表を参照している人の話を聞いたことがありますが、それが何であるかはわかりませんでした。



最高のansはここですべてデュアルasktom.oracle.com/pls/asktom/…についてです。人々は上記のコメントリンクにこれ以上注意を向けていないので、ここでコメントしています..見てください。後悔しません
バルン2018

回答:



79

これは、1つの要素を含むダミーテーブルです。Oracleは次のようなステートメントを許可しないので便利です。

 SELECT 3+4

あなたはこの制限を回避することができます

 SELECT 3+4 FROM DUAL

代わりに。


70

ウィキペディアから

歴史

DUALテーブルは、内部ビューに参加するためのテーブルを提供するためにOracle CorporationのChuck Weissによって作成されました。

Oracleデータディクショナリの基になるオブジェクトとしてDUALテーブルを作成しました。それ自体を表示することは意図されていませんでしたが、代わりに、照会されることが予期されていたビュー内で使用されました。アイデアは、DUALテーブルにJOINを実行し、テーブルの1行ごとに2つの行を結果に作成できるというものでした。次に、GROUP BYを使用することにより、結果として生じる結合を要約して、DATAエクステントとINDEXエクステントのストレージ量を示すことができます。DUALという名前は、1つから行のペアを作成するプロセスに適しているように見えました。1

上記からは明らかではないかもしれませんが、元のDUALテーブルには2つの行があったため、その名前が付けられています。現在では1行しかありません。

最適化

DUALは元々はテーブルでしたが、データベースエンジンはDUALから選択したときにテーブルでディスクIOを実行しました。通常、ディスクブロックは既にメモリにキャッシュされているため、このディスクIOは論理IO(物理ディスクアクセスを含まない)でした。これにより、DUALテーブルに対して大量の論理IOが発生しました。

Oracleデータベースの新しいバージョンが最適化され、DUALテーブルが実際に存在していても、データベースはDUALテーブルで物理的または論理的なIOを実行しなくなりました。


21

このウィキペディアの記事は明確にするのに役立つと思います。

http://en.wikipedia.org/wiki/DUAL_table

DUALテーブルは、すべてのOracleデータベースインストールにデフォルトで存在する特別な1行のテーブルです。SYSDATEやUSERなどの疑似列を選択する際に使用するのに適しています


10

これはOracleの特別なテーブルです。計算やシステム変数のチェックによく使用します。例えば:

  • Select 2*4 from dual 計算結果を出力します
  • Select sysdate from dual サーバーの現在の日付を出力します。

4

sysdateなどのコマンドを実行して結果を取得できる疑似テーブルの種類。また、Oracleが起動しているかどうかの確認や、SQL構文の確認などにも役立ちます。


4

行と列が1つしかないOracleのユーティリティテーブル。これは、いくつかの算術演算を実行するために使用され、既知の出力を生成する必要がある場合に一般的に使用できます。

SELECT * FROM dual;

ここに示すように、「DUMMY」という名前の単一の列と「X」の値を持つ単一の行を提供します。

DUMMY
----- 
X


2

DUALテーブルは、すべてのOracleデータベースインストールにデフォルトで存在する特別な1行のテーブルです。SYSDATEやUSERなどの疑似列の選択に使用するのに適しています。

テーブルには、「X」の値を持つDUMMYと呼ばれる単一のVARCHAR2(1)列があります。

あなたはそれについてすべてhttp://en.wikipedia.org/wiki/DUAL_tableで読むことができます


1

DUALは、SQLでのみ使用可能な関数を使用するためにPL / SQL開発で必要です。

例えば

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;

0

これは、1つの空の行を返すfromに配置するオブジェクトです。たとえば、デュアルから1を選択します。1を返します

デュアルから21 + 44を選択します。65を返します

デュアルから[シーケンス] .nextvalを選択します。シーケンスから次の値を返します。


0

DUALは、主にシーケンスから次の番号を取得するために使用しました。

構文:SELECT 'sequence_name'.NEXTVAL FROM DUAL

これは、1行1列の値(NEXTVAL列名)を返します。


1
11g以降は必要ありません。シーケンスは、PL / SQLでネイティブに使用できます。
Jon Heller、2014

0

必要なもう1つの状況 select ... from dual は、組み込みDBMS_METADATA.GET_DDL関数を使用して、さまざまなデータベースオブジェクト(TABLE、FUNCTION、TRIGGER、PACKAGEなど)のコード(データ定義)を取得する場合です。

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

今日、IDEがテーブルのDDLを表示する機能を提供していることは事実ですが、SQL Plusのようなより単純な環境では、これは非常に便利です。

編集

より一般的な状況:基本的に、標準SQLステートメント内でPL / SQLプロシージャを使用する必要がある場合、またはコマンドラインからプロシージャを呼び出す場合:

select my_function(<input_params>) from dual;

両方のレシピは、ジョシュジュノーとマットアリーナの著書「Oracle PL / SQLレシピ」から引用


0

DUALは特別な1行1列のテーブルで、すべてのOracleデータベースにデフォルトで存在します。DUALの所有者はSYSです。

DUALは、データ関数とともにOracleデータベースによって自動的に作成されるテーブルです。これは、オペレーティングシステムの関数(日付、時刻、算術式など)を取得するために常に使用されます。

SELECT SYSDATE from dual;  
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.