Можно ли использовать подзапрос с ключевым словом VALUES?

У меня сложилось впечатление, что это невозможно, но потом я наткнулся на эти 2 примера (используя Oracle XE и SQL Developer):

Пример 1 - выполняется без ошибок

insert into regions (region_id, region_name)
values ((select max(region_id)+1 from regions), 'Great Britain');

Пример 2 - возвращает ошибку (показано ниже)

insert into regions (region_id, region_name)
values (select region_id, region_name from regions);

Ошибка:

Error starting at line 1 in command:
insert into regions (region_id, region_name)
values (select region_id, region_name from regions)
Error at Command Line:2 Column:9
Error report:
SQL Error: ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:

Итак, похоже, что это еще не все. Может ли кто-нибудь дать объяснение, при каких условиях включать / не разрешать включать подзапросы с VALUES ключевое слово?

1 ответ

Решение

Вам нужно вставить подзапросы в скобках. Открытие парен для values не считается Это начало списка, а не подзапрос. Вы можете включить подзапросы в VALUES предложение, когда они возвращают одну строку и один столбец.

Однако вместо этого вы можете использовать этот синтаксис:

insert into regions (region_id, region_name)
    select max(region_id) + 1, 'Great Britain'
    from regions;

Еще лучше назначить последовательность для region_id (столбец идентификатора или автоинкремент в других базах данных), поэтому он присваивается автоматически. Тогда вы просто сделаете:

insert into regions (region_name)
    select 'Great Britain'
    from dual;
Другие вопросы по тегам