245

人々がこの表について言及していると聞いたことがありますが、それが何についてのものかはわかりませんでした。

4

14 に答える 14

249

これは、実際にはデータに関心がなく、select ステートメントでシステム関数の結果が必要な場合に選択するために使用される単一のレコードを持つ一種のダミー テーブルです。

例えばselect sysdate from dual;

http://www.adp-gmbh.ch/ora/misc/dual.htmlを参照してください。

于 2008-09-16T15:45:29.483 に答える
86

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

 SELECT 3+4

この制限を回避するには、次のように記述します。

 SELECT 3+4 FROM DUAL

代わりは。

于 2008-09-16T15:47:43.083 に答える
75

ウィキペディアより

歴史

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 を実行しなくなりました。

于 2008-09-16T15:49:42.267 に答える
23

このウィキペディアの記事が明確になると思います。

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

DUAL テーブルは、すべての Oracle データベース インストールにデフォルトで存在する特別な 1 行のテーブルです。これは、SYSDATE や USER などの疑似列の選択に使用するのに適しています。テーブルには、値が「X」である DUMMY と呼ばれる単一の VARCHAR2(1) 列があります。

于 2008-09-16T15:44:22.840 に答える
10

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

  • Select 2*4 from dual計算結果を出力します
  • Select sysdate from dualサーバーの現在の日付を出力します。
于 2008-09-16T15:47:25.423 に答える
5

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

SELECT * FROM デュアル;

ここに示すように、「DUMMY」という名前の単一の列と「X」の値を持つ単一の行が得られます。

DUMMY
----- 
X
于 2013-10-07T12:11:58.880 に答える
5

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

于 2008-09-16T15:45:01.247 に答える
2

DUALに関するその他の事実....

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388

ここで行われたスリリングな実験と、トムによるさらにスリリングな説明

于 2012-01-31T10:30:15.150 に答える
2

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

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

http://en.wikipedia.org/wiki/DUAL_tableですべてを読むことができます

于 2008-09-16T15:48:44.233 に答える
2

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

例えば

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
于 2008-09-16T15:57:44.510 に答える
0

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

構文 : SELECT 'シーケンス名'.NEXTVAL FROM DUAL

これにより、1 行 1 列の値 (NEXTVAL 列名) が返されます。

于 2014-07-31T07:33:04.837 に答える
0

別の必要な状況 は、組み込み関数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」から引用しています。

于 2018-01-17T15:53:00.533 に答える
-1

1行の空行を返すfromに入れるオブジェクトです。例: デュアルから 1 を選択します。1 を返します

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

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

于 2008-09-16T15:47:54.347 に答える