Что может быть причиной отмены подпрограммы в пункте «Значения»?

dba.stackexchange https://dba.stackexchange.com/questions/3012

Вопрос

Например

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 году.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top