Загрузка данных из промежуточной таблицы в основную таблицу в Oracle 11g - PullRequest
0 голосов
/ 05 октября 2018

На сегодняшний день, какой самый эффективный способ загрузки данных из промежуточной таблицы в основную таблицу в oracle .

Предположим, у меня есть таблица, как показано ниже

TABLE Persons
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber int,
)

А ниже находится моя промежуточная таблица

TABLE Persons_Staging
(
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
HouseNumber varchar(255),
)

Чего я хочу добиться, так это чтобы ежедневно новые данные из промежуточной таблицы помещались в основную таблицу с некоторымиобработка .

Например, перед загрузкой данных в столбец имя / фамилия данные должны быть преобразованы в верхний или нижний регистр.Или же формат даты в столбце даты может быть изменен.(некоторые базовые преобразования данных перед загрузкой в ​​основную таблицу).

Должен ли я использовать процедуры для этого или есть какой-либо другой инструмент, который я могу использовать?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

На мой взгляд, правильный SQL INSERT - правильный путь, то есть

insert into persons 
  (id, lastname, firstname, housenumber)
select id, lastname, firstname, housenumber 
from persons_staging;

Если вы хотите выполнить обработку , делайте это, пока данные находятся в промежуточной таблице,если вы не можете включить эти преобразования в вышеприведенный оператор INSERT (такой как initcap или upper, который вы упомянули).

Если вы планируете использовать какой-то PL / SQL, проходите все этапыстроки таблицы, делая что-то с каждой строкой и затем перемещая ее в целевую таблицу - ну, это, вероятно, будет очень медленно.Строка за строкой идет медленно-медленно.

Если возможно, делайте все, что вы делаете, так, чтобы это влияло на весь набор данных, а не по частям.

Кроме того, старайтесь избегать переключения контекста (пишите SQL, который вызывает PL / SQL и повторяет это много раз).Если у вас есть процедура PL / SQL, в которой используются операторы SQL, нет проблем - это прекрасно работает.

0 голосов
/ 05 октября 2018

Я думаю, что лучший способ решить эту задачу - триггер.

Вы можете просто создать триггер для Persons_Staging, это может быть так:

Create Or Replace Trigger Persons_Staging_Before_Insert
  Before Insert On Persons_Staging
  For Each Row

Declare
Begin
  Insert Into Persons
    (Id, Lastname, Firstname, Housenumber)
  Values
    (:New.Id,
     Upper(:New.Lastname),
     Upper(:New.Firstname),
     :New.Housenumber);
End;

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...