Мне нужно добавить новую строку в таблицу в Oracle. Проблема в том, что таблица имеет 50 столбцов, и я действительно не хочу писать их все для инструкции INSERT. Я попытался сделать инструкцию SELECT INTO для дублирования строки, а затем изменить поля, которые меня волнуют по отдельности, но это приводит к УНИКАЛЬНОму нарушению первичного ключа. Поэтому я действительно хочу объявить переменную, содержащую одну строку без, назвав все столбцы, изменив поле первичного ключа, а затем вставим эту переменную. Как?Вставить строку в таблицу SQL на основе существующей строки
ответ
Вы можете использовать %ROWTYPE
в анонимном блоке PL/SQL, чтобы объявить запись, представляющую строку из таблицы, а затем выбрать строку в этой записи и изменить первичный ключ и вставить обновленную запись. Вы даже можете повторно использовать его для нескольких вставок:
DECLARE
rec SOME_TABLE%ROWTYPE;
BEGIN
SELECT *
INTO rec
FROM SOME_TABLE
WHERE A = 1; -- Primary Key
rec.A := 2; -- Change the primary key value.
INSERT INTO SOME_TABLE VALUES rec;
rec.A := 3; -- Change the primary key again.
INSERT INTO SOME_TABLE VALUES rec;
FOR i IN 4 .. 9 LOOP
rec.A := i; -- Change it repeatedly...
INSERT INTO SOME_TABLE VALUES rec;
END LOOP;
FOR i IN 1 .. 3 LOOP
rec.A := SOME_SEQUENCE.NEXTVAL; -- Or you can manage the primary key's value using a sequence.
INSERT INTO SOME_TABLE VALUES rec;
END LOOP;
END;
/
Это супер круто, спасибо! – MrEff
Я часто хотел сделать что-то похожее на это, но это просто невозможно в любом SQL-варианте, о котором я знаю. Вы не можете запрашивать только некоторые из столбцов в таблице, не указывая их явно (или, возможно, заранее определяя их).
Единственный ярлык я могу предложить, чтобы сбросить список имен столбцов в удобном месте, а затем просто скопировать его в операторе вставки, изменяя только значение, которое нужно:
insert into foo (select 'newC1' as c1, c2, c3, c4, ..., c50 from foo where bar='baz');
:: редактировать: : На самом деле, я делаю это так часто, что написал сценарий Python, чтобы помочь мне. Я рассказываю, какую таблицу я редактирую, какое-то предложение where
, которое соответствует точно 1 строке, списку столбцов, которые я хочу изменить, и списку новых значений, которые я хочу в этих столбцах. Затем он делает все остальное.
- 1. Вставить строку в таблицу на основе возвращаемого количества функции
- 2. Вставить строку поверх существующей строки, переместить строки вниз
- 3. Вставить строки таблицы после существующей строки
- 4. Вставить строки в таблицу на основе значения ячейки
- 5. Вставить строку в таблицу SQL с указанным индексом
- 6. Вставить лишнюю строку в таблицу
- 7. SQL - вставить в таблицу на основе значения счетчика
- 8. Как вставить в таблицу на основе другого?
- 9. Вставить строки в таблицу на основе флажков в Repeater
- 10. Вставить строку на основе значения столбца в sql
- 11. multiple Вставить запрос для существующей строки в sql
- 12. Запрос SQL SQL из не существующей строки
- 13. Вставить строку в таблицу jQuery
- 14. Как я могу создать (добавить) новую строку в существующей таблице И вставить строку в другую таблицу?
- 15. SQL - Вставить новую строку в существующую таблицу на основе другой записи таблицы
- 16. Как вставить значение в столбец существующей строки
- 17. Вставить в резервную таблицу на основе даты
- 18. Вставить в одну таблицу на основе другого
- 19. Вставить строки в таблицу
- 20. Вставить в таблицу SQL
- 21. Невозможно вставить в таблицу sql
- 22. Как обновить таблицу на основе индекса строки?
- 23. Вставить строку после каждой строки в sql
- 24. Вставить в таблицу сверху строк в sql
- 25. Вставить в таблицу на основе условия в mysql 5.7
- 26. Sql добавление новой строки на основе столбца
- 27. Как вставить новую строку в таблицу Postgres?
- 28. Как вставить строки в новую таблицу из другой таблицы на основе некоторых условий в Sybase?
- 29. Вставить строки на основе DateDiff
- 30. Присвоить заголовки на основе существующей строки в dataframe в R
Вы не можете 'SELECT *' sinse поля, которые 'UNIQUE' должны быть изменены для того, чтобы работать. Вам нужно будет указать выбранное поле и предоставить информацию, которая будет вставлена в другие, которые не реплицируются. Если 'UNIQUE' также является' AUTO_INCREMENT', используйте значение 'NULL', чтобы завершить его автоматически. – Havenard
@Havenard - Oracle не использует 'AUTO_INCREMENT'; это синтаксис MySQL. Чтобы получить инкрементные значения в Oracle, вам нужно использовать последовательность. – MT0