Обновление локальной базы данных с использованием данных удаленной базы данных - PullRequest
1 голос
/ 01 августа 2011

У меня возникла небольшая проблема с запросом Oracle

create or replace
PROCEDURE       "LOAD_USERNAME" 
IS
   cursor usu is
      select userid
      from local_user;

BEGIN
   for usu_rec in usu
   loop
      update loc_user set username =(
         select cod_user 
            from (
               select cod_user, row_number() over (order by date_createad desc) r
               from user_table@DBLINK where cod_person=usu_rec.userid
            )
            where r = 1
         ) 
      where externaluserid=usu_rec.userid;

   end loop;
END;

Обычно я пытался получить код пользователя (последний созданный) из другой базы данных и обновить локальную таблицу.Кажется, это работает, но я занимаю слишком много времени.Я могу проверять удаленную базу данных только через DBLINK.

Пожалуйста, мне нужна помощь для лучшего способа сделать это.

Заранее благодарю вашу помощь.

Ответы [ 3 ]

4 голосов
/ 01 августа 2011

Вы хотите свести к минимуму количество проходов по сети. Таким образом, вы должны присоединиться к удаленной таблице в вашем курсоре и перетащить туда имя пользователя. Это будет лучше, поскольку этот запрос выполняется только один раз (индексирование / проектирование определят, насколько хорошо он выполняется). Но ваши обновления будут работать только с локальными данными.

Редактировать: Удален мой PL / SQL, так как @ Aitor's лучше

1 голос
/ 01 августа 2011

Как сказал Содвед, лучше иметь соединение в вашем курсоре. Вы можете попробовать что-то вроде этого:

create or replace
PROCEDURE       "LOAD_USERNAME" 
IS
   cursor usu is
select distinct local_user.userid,your_dblink_table.cod_user
      from local_user, user_table@bdlink your_dblink_table
where local_user.userid=your_dblink_table.codperson
and local_user.externaluserid=local_user.userid;
BEGIN
   for usu_rec in usu
   loop
      update loc_user set username =usu_rec.cod_user
where externauserid=usu_rec.userid;
 end loop;
commit;
END;

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

0 голосов
/ 01 августа 2011

Oracle предоставил встроенную функциональность для такого рода вещей для нескольких основных версий.Если вы используете более старую базу данных, вы должны использовать replication .В более поздних версиях это устарело в пользу Streams .

...