この表を参照している人の話を聞いたことがありますが、それが何であるかはわかりませんでした。
この表を参照している人の話を聞いたことがありますが、それが何であるかはわかりませんでした。
回答:
これは、実際にはデータに関心がないが、代わりにいくつかのシステム関数の結果をselectステートメントで必要とする場合の選択に使用される単一のレコードを持つ一種のダミーテーブルです。
例えば select sysdate from dual;
ウィキペディアから
歴史
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を実行しなくなりました。
このウィキペディアの記事は明確にするのに役立つと思います。
http://en.wikipedia.org/wiki/DUAL_table
DUALテーブルは、すべてのOracleデータベースインストールにデフォルトで存在する特別な1行のテーブルです。SYSDATEやUSERなどの疑似列を選択する際に使用するのに適しています
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で読むことができます
これは、1つの空の行を返すfromに配置するオブジェクトです。たとえば、デュアルから1を選択します。1を返します
デュアルから21 + 44を選択します。65を返します
デュアルから[シーケンス] .nextvalを選択します。シーケンスから次の値を返します。
DUALは、主にシーケンスから次の番号を取得するために使用しました。
構文:SELECT 'sequence_name'.NEXTVAL FROM DUAL
これは、1行1列の値(NEXTVAL列名)を返します。
必要なもう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レシピ」から引用