これを Oracle 10g で実行すると、予想どおり、「ORA-01427: 単一行のサブクエリが複数の行を返します」というエラーが表示されます。
WITH a as (select 1 somenumber from dual),
b as ( select 'foo' foo from dual
union all select 'goo' from dual)
SELECT (select 0.5 from b)
FROM a
ただし、次のステートメントを実行すると、エラーは発生せず、代わりに「2.5」が返されます。
WITH a as (select 1 somenumber from dual),
b as ( select 'foo' foo from dual
union all select 'goo' from dual)
SELECT (select sum(a.somenumber) + 0.5 from b)
FROM a
サブクエリを合計してから、サブクエリの実行後に行われたかのように 0.5 を追加するのが標準ですか? それとも、これはOracleの機能/バグですか?
編集: 好奇心旺盛な人のために、実際のコードは次のようになります。
WITH a as (select 1 somenumber from dual),
b as ( select 'foo' foo from dual
union all select 'goo' from dual)
SELECT (select sum(a.somenumber) + customfunction(a.somenumber) from b)
FROM a