在 values 子句中禁止子查询的原因是什么?

Laz*_*zer 5 oracle subquery database-internals

例如

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>
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 7

如果要使用仅允许单个值的 SELECT 语句,则需要将该 SELECT 语句放入括号中:

insert into dates (d)
values
( (select sysdate from dual) )
Run Code Online (Sandbox Code Playgroud)

这可以扩展为多列:

insert into dates 
(
  id, 
  d,
  other_column
)
values
( 
  some_sequence.nextval, 
  (select sysdate from dual), 
  (select max(some_col) from other_table)
)
Run Code Online (Sandbox Code Playgroud)

您只需要确保 SELECT 只返回一行和一列