Por exemplo
SQL> create table dates(d date);
Table created.
SQL> insert into dates select sysdate from dual;
1 row created.
SQL> select * from dates;
D
---------
28-MAY-11
SQL> insert into dates (d) values (select sysdate fom dual);
insert into dates (d) values (select sysdate fom dual)
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
Se você quiser usar uma instrução SELECT onde apenas um único valor é permitido, você precisa colocar essa instrução SELECT entre colchetes:
Isso pode ser estendido para várias colunas:
Você só precisa ter certeza de que o SELECT retorna exatamente uma linha e exatamente uma coluna
Acho que sem saber (não uso Oracle, então não tenho caixa para experimentar) que o problema está aqui:
Tente isso em vez disso:
Porque o parêntese diz à gramática que o valor dentro do parêntese é um valor, não uma declaração de produção de valor. Suponho que, se você realmente deseja uma explicação mais aprofundada, eu poderia procurar isso para você na especificação da linguagem SQL.
Acho que é apenas um fato histórico.
Ainda não foi feito dessa maneira.
Do SQL Server, sei que eles estão liberando essas restrições entre 2005 e 2008 e frequentemente enfrentamos problemas quando executamos esses scripts em 2005.