14.05.2012 09:54
Задача такая: существует база центрального офиса (1.029, 10g), в которой 30% карточек были созданы с буквенным префиксом и это мешает в работе. Сам справочник товаров достаточно хорошо проработан, и встал вопрос о том, чтобы перенести этот справочник при создании базы одного из филиалов этой организации. Филиал будет работать отдельно и независимо, поэтому вышеописанное неудобство хотелось бы устранить. Перенос справочника будет осуществляться через почтовый модуль. Подскажите как сделать так, чтобы артикул при переносе пересоздавался, либо переносился из текущей базы как локальный? Ранее был здесь был предложен вариант затереть поле Артикул ЦС, но до языка запросов пока руки не дошли, как это сделать не знаю, затирать нужно у всех карточек. Может кто-нибудь сможет подсказать, что нужно написать.. )
14.05.2012 09:57
update smcard set globalarticle='';
commit;

таким образом ВСЕ карточки станут локальными... там только не кавычки, а одиночные апострофы
14.05.2012 11:36
так не получится, ругани будет много от оракла)))) вот так правильнее будет:
Код:
alter table supermag.smcard disable all triggers;
update supermag.smcard set globalarticle=null;
commit;
alter table supermag.smcard enable all triggers;
Это первый вариант, второй - сделать из подчиненной базы DBLink на базу офиса и операторами
Код:
alter table supermag.smcard disable all triggers;
delete from supermag.smcard;
insert into supermag.smcard select * from supermag.smcard@dblink;
update supermag.smcard set globalarticle=null;
commit;
alter table supermag.smcard enable all triggers;
перельете весь справочник за пару минут не нагружая почтовик.
14.05.2012 13:34
никакой ругани там нет... никакие тригеры на globalarticle не завязаны
14.05.2012 13:43
До второго варианта видимо не дорос еще :)

А исходную базу таким способом не удастся случайно перенумеровать без последствий?
14.05.2012 13:46
это скрипт не на перенумерацию, а на сброс признака глобальной карточки
14.05.2012 13:51
Я понимаю, думал просто "самый штатный" способ сделать все через сборос на локальные артикулы и последующую замену на глобальные. Может быть есть возможность как то перенумеровать более прямым путем?
14.05.2012 13:57
Цитата:
Dim никакой ругани там нет... никакие тригеры на globalarticle не завязаны
Ругань будет к примеру если есть ингридиенты то (ORA-02290: нарушено ограничение целостности CHECK(SUPERMAG.SMCCARD_INGREDIENT))
14.05.2012 14:11
Как я понял нужно простоперенумеровать все артикулы?
тогда это можно сделать так:
Код:
alter table supermag.smcard disable all triggers;
update supermag.smcard set globalarticle=article; <- это мы запомнили старый артикул
commit;
update supermag.smcard set article=rownum; <- это мы перенумеровали артикулы
alter table supermag.smcard enable all triggers;
теперь надо обновить арткулы во всех связанных таблицах, у меня версия СМ 1.26.3 и обновлять артикулы надо подставляя имена таблиц в оператор
Код:
alter table таблица disable all triggers;
update таблица f set f.article=(select t.article from supermag.smcard t where t.globalarticle=f.article) ;
commit;
alter table таблица enable all triggers;
имена таблиц можно взять из ссылочной целостности таблицы supermag.smcard, это можно в PL\SQL Developer глянуть.
потом просто очистить глобальный артикул
Код:
alter table supermag.smcard disable all triggers;
update supermag.smcard set article=null;
commit;
alter table supermag.smcard enable all triggers;
Но все это очень стремно..оооочччччччень.
Для того чтобы решиться на перенумерование артикулов надо иметь очень весомые доводы...
14.05.2012 14:15
Иходную базу я и не собираюсь трогать, уточнил вдруг есть простое решение. А вот почтовику я так понял все равно будет что в базе из которой я буду выгружать будет все криво, но если она будет перенумерована, задача упрощается, локальные артикулы будут не нужны. Или я ошибаюсь?
Часовой пояс GMT +3, время: 22:58.

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