Что может быть причиной отмены подпрограммы в пункте «Значения»?
-
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, где разрешено только одно значение, вам нужно поместить этот оператор 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)
)
Вам просто нужно убедиться, что выбор возвращает ровно одну строку и ровно один столбец
Другие советы
я считать Не зная (я не делаю Oracle, так что у вас нет коробки, чтобы попробовать это), что проблема здесь:
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 году.