24.12.2017 19:19
Diamondne
 
Добрый день!
Есть БД на oracle 11, в которую со всей торговой сети через DBLINK дергаются данные. Для каждой удаленной БД создан DBLINK и кучка однотипных процедур, которые запускаются Job'ами, собственно, дергают эти данные.
Вопрос заключается в том, как сделать, чтобы не плодить однотипные процедуры для каждой прилинкованной БД, а запихать все в цикл типа
for c in ('@DB1','@DB2','@DB3') и уже в теле цикла подставлять эту переменную вместо DBLINK'а.
24.12.2017 21:26
OlegON
 
Что-то я совсем не понял, в чем трудность? Сделай такую процедуру, передавай в нее имя линка... Я бы только, если магазинов много, подумал над тем, чтобы линк создавать динамически, а то и где-то mview использовать...
24.12.2017 21:44
Diamondne
 
1. Всего 25 линков на oracle, 1 линк на mssql, в проекте 21 линк на mysql. В чем прелесть создавать и дропать линки в теле процедуры?
2. По поводу передачи имени линка в процедуру, можете по синтаксису пояснить?
24.12.2017 22:09
OlegON
 
1. Прелесть в том, что у тебя не возникает проблемы с горой линков, в т.ч. снижается риск ORA-02020, например. Не помню точно, у меня их было около 100 и я на что-то налетел.
2. Не понимаю вопрос, уж больно все просто, вот пример
SQL код:
for links in (select db_link from v$dblinkloop
DBMS_SESSION
.CLOSE_DATABASE_LINK (links.db_link);
end loop
Часовой пояс GMT +3, время: 12:54.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.