このテーブルを参照している人々の話を聞いたことがありますが、それが何であるかはわかりませんでした。
これは、実際にはデータに興味がなく、代わりにselectステートメントで何らかのシステム関数の結果が必要なときに選択するために使用される単一のレコードを持つダミーテーブルのようなものです。
例えばselect sysdate from dual;
これは、1つの要素を含むダミーテーブルです。 Oracleは次のような文を許可しないので便利です。
SELECT 3+4
この制限を回避するには、次のように記述します
SELECT 3+4 FROM DUAL
代わりに。
から ウィキペディア
履歴
DUALテーブルは、内部ビューに参加するためのテーブルを提供するために、Oracle CorporationのChuck Weissによって作成されました。
DUALテーブルをOracle Data Dictionaryの基になるオブジェクトとして作成しました。それ自体が表示されることを意図したものではなく、クエリが実行されると予想されるビュー内で使用されました。アイデアは、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を実行しなくなりました。
このウィキペディアの記事は明らかにするのに役立つと思います。
http://en.wikipedia.org/wiki/DUAL_table
DUALテーブルは、すべてのOracleデータベースインストールでデフォルトで存在する特別な1行のテーブルです。 SYSDATEやUSERなどの疑似列を選択する際に使用するのに適しています
Oracleの特別なテーブルです。計算やシステム変数のチェックによく使用します。例えば:
Select 2*4 from dual
は計算結果を出力しますSelect sysdate from dual
は、サーバーの現在の日付を出力します。1行1列のみのOracleのユーティリティテーブル。多くの算術演算を実行するために使用され、一般に既知の出力を生成する必要がある場合に使用できます。
SELECT * FROM dual;
以下に示すように、「DUMMY」という名前の単一の列と「X」の値を持つ単一の行を提供します。
DUMMY ----- X
Sysdateなどのコマンドを実行して結果を取得できる疑似テーブルの一種。また、Oracleが起動しているかどうかを確認し、SQL構文などを確認するのに役立ちます。
DUALに関するその他の情報...
http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388
ここで行われたスリリングな実験、およびトムによるスリリングな説明
DUALテーブルは、すべてのOracleデータベースインストールでデフォルトで存在する特別な1行のテーブルです。 SYSDATEやUSERなどの疑似列の選択での使用に適しています
テーブルには、値が「X」であるDUMMYという単一のVARCHAR2(1)列があります。
http://en.wikipedia.org/wiki/DUAL_table でそれに関するすべてを読むことができます
DUALは、SQLでのみ使用可能な関数を使用するためにPL/SQL開発で必要です
例えば.
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
DUALは、主にシーケンスから次の番号を取得するために使用しました。
構文:SELECT 'sequence_name'.NEXTVAL FROM DUAL
これにより、1行1列の値(NEXTVAL列名)が返されます。
これは、1つの空の行を返すfromに入れるオブジェクトです。たとえば、デュアルから1を選択します。 1を返します
デュアルから21 + 44を選択します。 65を返します
デュアルから[sequence] .nextvalを選択します。シーケンスから次の値を返します。
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 Recipes』から引用されています。
DUALは、すべてのOracleデータベースにデフォルトで存在する特別な1行、1列のテーブルです。 DUALの所有者はSYSです。
DUALは、データ関数とともにOracleデータベースによって自動的に作成されるテーブルです。オペレーティングシステムの関数(日付、時刻、算術式など)を取得するために常に使用されます。
SELECT SYSDATE from dual;