Я ищу хороший способ выполнения многострочных вставок в базу данных Oracle 9. Следующее работает в MySQL, но, похоже, не поддерживается в Oracle.
INSERT INTO TMP_DIM_EXCH_RT
(EXCH_WH_KEY,
EXCH_NAT_KEY,
EXCH_DATE, EXCH_RATE,
FROM_CURCY_CD,
TO_CURCY_CD,
EXCH_EFF_DATE,
EXCH_EFF_END_DATE,
EXCH_LAST_UPDATED_DATE)
VALUES
(1, 1, '28-AUG-2008', 109.49, 'USD', 'JPY', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(2, 1, '28-AUG-2008', .54, 'USD', 'GBP', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(3, 1, '28-AUG-2008', 1.05, 'USD', 'CAD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(4, 1, '28-AUG-2008', .68, 'USD', 'EUR', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(5, 1, '28-AUG-2008', 1.16, 'USD', 'AUD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008'),
(6, 1, '28-AUG-2008', 7.81, 'USD', 'HKD', '28-AUG-2008', '28-AUG-2008', '28-AUG-2008');
sequnce.nextval
как это запрещено вunion
оselect
. Вместо этого мы можем пойти сINSERT ALL
.В Oracle, чтобы вставить несколько строк в таблицу t со столбцами col1, col2 и col3, вы можете использовать следующий синтаксис:
источник
SELECT 1 FROM DUAL
делает.INSERT ALL
требуетSELECT
подзапроса. Чтобы обойти это,SELECT 1 FROM DUAL
используется, чтобы дать одну строку фиктивных данных.Используйте SQL * Loader. Требуется небольшая настройка, но если это не единственное, оно того стоит.
Создать таблицу
Создать CSV
Создать файл управления загрузчиком
Запустите команду SQL * Loader
Подтвердите вставку
SQL * Loader имеет множество опций и может принимать практически любой текстовый файл в качестве входных данных. Вы можете даже вставить данные в свой контрольный файл, если хотите.
Вот страница с более подробной информацией -> SQL * Loader
источник
fruit_id "fruit_seq.nextval"
в определении столбцаВсякий раз, когда мне нужно сделать это, я создаю простой блок PL / SQL с локальной процедурой, подобной этой:
источник
Если у вас уже есть значения, которые вы хотите вставить в другую таблицу, вы можете вставить из оператора select.
В противном случае вы можете перечислить несколько операторов вставки в одну строку и отправить несколько запросов, чтобы сэкономить время на то, что работает как в Oracle, так и в MySQL.
Решение @Espo также является хорошим решением, которое будет работать как в Oracle, так и в MySQL, если ваших данных еще нет в таблице.
источник
Вы можете вставить, используя цикл, если вы хотите вставить некоторые случайные значения.
источник
Курсоры также могут быть использованы, хотя это неэффективно. В следующем посте stackoverflow обсуждается использование курсоров:
Вставить и обновить запись с помощью курсоров в оракуле
источник
Вот очень полезное пошаговое руководство для вставки нескольких строк в Oracle:
https://livesql.oracle.com/apex/livesql/file/content_BM1LJQ87M5CNIOKPOWPV6ZGR3.html
Последний шаг:
источник
В моем случае я смог использовать простой оператор вставки, чтобы массово вставить много строк в TABLE_A, используя только один столбец из TABLE_B, и получить другие данные в другом месте (последовательность и жестко закодированное значение):
Результат:
и т.д
источник