#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. Это отлично работало в моем практическом коде. Принятый ответ.