人々がこの表について言及していると聞いたことがありますが、それが何についてのものかはわかりませんでした。
14 に答える
これは、実際にはデータに関心がなく、select ステートメントでシステム関数の結果が必要な場合に選択するために使用される単一のレコードを持つ一種のダミー テーブルです。
例えばselect sysdate from dual;
これは、要素が 1 つ含まれるダミー テーブルです。Oracleは次のようなステートメントを許可していないため、便利です
SELECT 3+4
この制限を回避するには、次のように記述します。
SELECT 3+4 FROM DUAL
代わりは。
ウィキペディアより
歴史
DUAL テーブルは、内部ビューで結合するためのテーブルを提供するために、Oracle Corporation の Chuck Weiss によって作成されました。
Oracle Data Dictionary の基礎となるオブジェクトとして DUAL テーブルを作成しました。それ自体が表示されることは決して意図されていませんでしたが、代わりに、クエリが予想されるビュー内で使用されていました。アイデアは、DUAL テーブルに JOIN を実行し、テーブルの 1 行ごとに結果に 2 行を作成できるというものでした。次に、GROUP BY を使用して、結果の結合を要約し、DATA エクステントと INDEX エクステントのストレージの量を示すことができます。DUAL という名前は、1 つの行から 2 つの行を作成するプロセスに適しているように思われました。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 などの疑似列の選択に使用するのに適しています。テーブルには、値が「X」である DUMMY と呼ばれる単一の VARCHAR2(1) 列があります。
これは、Oracle の特別なテーブルです。計算やシステム変数のチェックによく使用します。例えば:
Select 2*4 from dual
計算結果を出力しますSelect sysdate from dual
サーバーの現在の日付を出力します。
1 行 1 列のみの Oracle のユーティリティ テーブル。多くの算術演算を実行するために使用され、既知の出力を生成する必要がある場合に一般的に使用できます。
SELECT * FROM デュアル;
ここに示すように、「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ですべてを読むことができます
PL/SQL 開発では、SQL でのみ使用可能な関数を使用するために DUAL が必要です。
例えば
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
DUAL は、主にシーケンスから次の番号を取得するために使用しました。
構文 : SELECT 'シーケンス名'.NEXTVAL FROM DUAL
これにより、1 行 1 列の値 (NEXTVAL 列名) が返されます。
別の必要な状況 は、組み込み関数select ... from dual
を使用して、さまざまなデータベース オブジェクト (TABLE、FUNCTION、TRIGGER、PACKAGE など) のコード (データ定義) を取得する場合です。DBMS_METADATA.GET_DDL
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;
両方のレシピは、Josh Juneau と Matt Arena による本「Oracle PL/SQL Recipes」から引用しています。
1行の空行を返すfromに入れるオブジェクトです。例: デュアルから 1 を選択します。1 を返します
デュアルから 21+44 を選択します。65を返します
デュアルから [sequence].nextval を選択します。シーケンスから次の値を返します。