У меня есть две таблицы с отношением многие-к-одному.(Oracle)
**Table: PARENT**
Field: A (PK)
Field: B
Field: C1
Field: C2
Field: C3
Field: C4
Field: C5
**Table CHILD**
Field: A (PK) (FK to PARENT.A)
Field: D (PK)
Field: E
Записи, вставленные в дочернюю и родительскую таблицы, вставляются одновременно.
Меня интересует, что является наиболее эффективным способом сделать это.
В настоящее время существует одна хранимая процедура, которая вызывается вызывающим приложением для всего шага вставки.Хранимая процедура в настоящее время имеет следующую сигнатуру:
Field: A
Field: B
Field: C (dilimited string)
Field: D (dilimited string)
Field: E (dilimited string)
Процедура перебирает C из входных данных и сохраняет каждое из значений в массиве.Затем использует этот массив вместе с A и B из входных данных для вставки в таблицу PARENT.
Затем использует A из входных данных и проходит через D и E из входных данных и выполняет вставку в таблицу CHILD для каждого элемента.в ограниченных строках.
Это будет вызываться до 3 миллионов раз в день.Он должен быть максимально эффективным.
Какая эффективность теряется при выполнении нескольких вызовов SP, а не только одного?
Все циклы для обработки разделенных строк кажутся многоработы!
Я думал, что вызывающее приложение может сделать отдельные вызовы SP для каждой записи в CHILD.Однако, как я могу гарантировать, что каким-то образом вставка в CHILD не произойдет до вставки в PARENT ... и это будет больше вызовов хранимых процедур.(во многих случаях нет дочерних записей для вставки, когда их обычно меньше 10, но может быть целых 50)
Я также открываю другой способ получения информации в разбавленной строке C.
Есть ли что-то более эффективное, чем цикл while, для получения информации из ограниченных строк?
Я не писал SP, меня попросили сделать небольшую модификацию и сделать ее более эффективной, есливозможно.
Есть идеи?
Примечания:
Я упростил таблицы, на самом деле 10 строк в упрощенной строке C, а не 5, есть также еще две расширенные строки простокак C, которые вставляются в таблицу PARENT.В таблицах также есть несколько полей больше, чем показано
Записи удаляются через 30 дней.