在值子句中不使用子查询的原因可能是什么?
-
16-10-2019 - |
题
例如
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年运行此类脚本时,我们经常遇到问题。
不隶属于 dba.stackexchange