ORACLE — Как вставить в таблицу из результата другого оператора select, но с изменениями

#sql #oracle #sql-insert

#sql #Oracle #sql-вставка

Вопрос:

Мне нужно вставить записи в таблицу из выходных данных оператора select в той же таблице, но с некоторыми изменениями, чтобы ограничения не нарушались. Это то, что я пробовал

 --MyTable as three columns C1,C2,C3

Insert into MyTable
(C1, C2, C3)
values
(
  Select 'New Value', C2, C3
  from
 (
   Select C1,C2,C3 from MyTable
 )
)
  

Но я получаю эту ошибку

 SQL Error: ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:
  

Два внутренних оператора select работают нормально, но не полностью.

Возможно ли это сделать только с помощью одного оператора sql?

Комментарии:

1. Удалите VALUES и скобку после нее и в конце. Вы также могли бы написать только один SELECT SELECT 'New Value', c2, c3 FROM mytable .

2. Ах, это сработало :). Спасибо.

Ответ №1:

Удалите values ключевое слово и просто используйте

 Insert into MyTable
Select 'New Value', C2, C3
  From MyTable
  

поскольку количество столбцов в списке выбора равно номеру столбца таблицы, то нет необходимости перечислять имена столбцов после имени таблицы в insert into Mytable части

Комментарии:

1. Приведенный выше пример был упрощенным. У меня есть некоторая логика в подзапросах для фильтрации результата.

2. @Silver. Rainbow что бы вы ни предпочитали, просто удалите values ключевое слово.

Ответ №2:

Просто сделайте:

 Insert into MyTable (C1, C2, C3)
  Select 'New Value', C2, C3
  from MyTable;
  

values Подзапросы и не нужны.

Комментарии:

1. Спасибо. Но приведенный выше пример был упрощенным. У меня есть некоторая логика в подзапросах для фильтрации результата.

2. @Silver. Радуга … Ну, тогда включите и эту логику.