遭遇したコードは、単一の行を更新するか、存在しない場合はそれを作成することを目的としています。
DUALは、1行だけを含む特別なシステムテーブルです。DUALから選択することは、Oracleが単純に実行できない回避策です。
select sysdate;
dual
である必要はないことに注意してください 、任意の1行テーブル、または1行を返すクエリでもかまいません。
select sysdate
from dual;
と同等です:
select sysdate
from my_one_row_table;
および
select sysdate
from my_table
where my_primary_key = 1;
バージョン10g以降、dual
テーブルには特別なアクセスパスがあり、実行プランに「高速デュアル」として表示されます。これにより、一貫した取得が0になり、他のテーブルを使用して自分で達成することはできません。