Заполнение ненулевых столбцов таблицы при использовании инструкции INSERT INTO

#oracle #select #insert #sqlplus

#Oracle #выберите #вставить #sqlplus

Вопрос:

Я работаю над проблемой, когда мне нужно вставить 135 строк в недавно созданную таблицу с помощью инструкции select. У меня есть несколько ненулевых ограничений для этой таблицы, и я не понимаю, как изменить мой ВЫБОР, чтобы вставить правильную информацию.

Вот что я пытаюсь сделать:

 CREATE SEQUENCE target_table_s1 START WITH 1001;

INSERT INTO target_table(colA,ColB,ColC,ColD,ColE)
target_table_s1.NEXTVAL,
(SELECT (colB,colC,ColD)
FROM source_table),
colE;
  

Где colA — это порядковый номер (для предоставления первичного ключа для target_table), а colE в основном просто должен быть чем-то простым, например, SYSDATE .

Любые предложения о том, как я могу заставить это работать? Я знаю, что то, что я написал выше, не сработает, но это лучший способ проиллюстрировать то, чего я пытаюсь достичь. Нужно ли мне найти способ поместить мою последовательность внутри инструкции select, чтобы она соответствовала правильному формату «ВСТАВИТЬ В SELECT»?

Ответ №1:

Я думаю, вам следует просто использовать INSERT INTO ... SELECT конструкцию здесь:

 INSERT INTO target_table (colA,ColB,ColC,ColD,ColE)
SELECT target_table_s1.NEXTVAL, ColB, ColC, ColD, SYSDATE
FROM source_table
  

Я предполагаю, что выше вы хотите вставить SYSDATE в столбец E.

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

1. Так что это в значительной степени то, что я ищу, и я почти решил свою проблему. Может быть, вы сможете помочь мне с последним небольшим дополнением. Вот мой новый контекст:

2. ВСТАВКА В target_table(colA, ColB, ColC, colD, colE)

3. ВЫБЕРИТЕ seq.NEXTVAL, f.ColB, f.ColC, f.colD, SYSDATE ИЗ (ВЫБЕРИТЕ ColB, ColC, colD ИЗ source_table); Как мне псевдоним исходной таблицы как f? Должен ли я просто использовать «FROM source_table f»? Что, если инструкция from включает в себя несколько таблиц? (извините, мои комментарии продолжают отправляться, даже когда я еще не закончил)

4. Да, если вы хотите использовать псевдоним source_table , используйте FROM source_table AS f

5. Это отлично работало в моем практическом коде. Принятый ответ.