DUAL テーブルを作成すると、ローカル データベースに障害が発生しますか?
親切に私を提案しますか?
create table DUAL
(
x varchar2(1)
);
DUAL テーブルを作成すると、ローカル データベースに障害が発生しますか?
親切に私を提案しますか?
create table DUAL
(
x varchar2(1)
);
いいえ、デュアル テーブルを作成することはできません。DUAL テーブルは SYS が所有しており、SYS はデータ ディクショナリを所有しているため、作成できません。
ウィキを見る
DUAL テーブルは、すべての Oracle データベース インストールにデフォルトで存在する特別な 1 行のテーブルです。SYSDATE や USER などの疑似列の選択に使用するのに適しています。表には、「X」の値を持つ DUMMY という単一の VARCHAR2(1) 列があります。
DUAL テーブルを作成しようとしても、Oracle エンジンは常に SYS デュアル テーブルを呼び出していないことを確認する必要があるため、問題が発生します。データベースとスキーマも指定する必要があります。これは、Oracle エンジンにとってあまりにも多くのあいまいさの問題につながる可能性があります。Oracle オプティマイザーは、DUAL が行うことと行うべきことをすべて把握しており、それに基づいて処理を行います。
SQL リファレンス:
DUALは、データ・ディクショナリとともにOracle Databaseによって自動的に作成される表です。DUAL はユーザー SYS のスキーマにありますが、すべてのユーザーが DUAL という名前でアクセスできます。これには、VARCHAR2(1) として定義された DUMMY という 1 つの列があり、値 X を持つ 1 つの行が含まれています。DUAL テーブルからの選択は、SELECT ステートメントで定数式を計算するのに役立ちます。DUAL には行が 1 つしかないため、定数は 1 回だけ返されます。または、任意のテーブルから定数、疑似列、または式を選択できますが、値はテーブル内の行の数だけ返されます。DUAL から定数値を選択する多くの例については、「SQL 関数について」を参照してください。
Oracle Database 10g Release 1 以降、DUMMY 列を含まない式を計算する場合、論理 I/O は DUAL 表で実行されません。この最適化は、実行計画で FAST DUAL としてリストされています。DUAL から DUMMY 列を SELECT すると、この最適化は行われず、論理 I/O が発生します。