http://blogs.wankuma.com/ognac/archive/2008/05/04/136244.aspx
DUAL表はOracleのオプティマイザが特別な処理を行います。つまり、RDBMS全体として特別な表という意識があります。そのため、確かにテーブルとしてはSYS.DUALとして実態はありますが、普通の表のようなとらえ方はまずいです。
DUAL表を使う局面ですが、直接値のみを求めたりする場合や関数のテストでDUAL表を使うときはあると思いますが、通常はDUAL表を使う局面は少ないと思います。
また、最近のOracleのバージョンではトリガーの中でDUAL表を使わなくてはならなかったようなケースでもDUAL表が不要になりつつあります。
http://blogs.wankuma.com/hatsune/archive/2008/03/22/129070.aspx
CREATE SEQUENCE autonumber
/
CREATE OR REPLACE TRIGGER cashbox_BI
BEFORE INSERT ON cashbox FOR EACH ROW
BEGIN
-- Oracle 11g
:NEW.key := autonumber.NEXTVAL;
-- Oracle 10g
-- SELECT autonumber.NEXTVAL INTO :NEW.key FROM DUAL;
END;
/
オプティマイザで最適化されているとはいえ影響はゼロではないので、もし、SQL文でDUAL表を使っている部分があるのならば、書き換えられないかの検討と、書き換え前後での実行計画の比較をする必要があります。