例如

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>
有帮助吗?

解决方案

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

insert into dates (d)
values
( (select sysdate from dual) )

可以扩展到多列:

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

您只需要确保选择的精确返回一行,正好返回一列

其他提示

思考 不知道(我没有甲骨文,所以没有一个盒子可以尝试一下),问题在这里:

insert into dates (d) values (select sysdate fom dual)
                              ^^^^^^ <- this isn't a date; it expects a date here

反试试:

insert into dates (d) 
select sysdate fom dual

因为括号告诉语法,帕伦内部的值是一个值,而不是产生价值的语句。我想,如果您真的想要一个更深入的解释,我可以在SQL语言规范中为您查找它。

我想这只是一个历史性事实。

只是还没有这样做。

从SQL Server开始,我知道他们正在2005年至2008年之间发布此类限制,并且当我们在2005年运行此类脚本时,我们经常遇到问题。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top