Сжатие товаров — различия между версиями
Материал из wiki.standart-n.ru
Agk (обсуждение | вклад) (Новая страница: «==Выполнить скрипт== <nowiki> --1) Накатываем индексы, чтобы выполнялось быстрее CREATE INDEX DOC_DETAIL_A…») |
Aleksnick (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
==Выполнить скрипт== | ==Выполнить скрипт== | ||
− | + | <pre> | |
− | + | /* 1) Накатываем индексы, чтобы выполнялось быстрее */ | |
CREATE INDEX DOC_DETAIL_ACTIVE_CANCELED_IDX3 ON DOC_DETAIL_ACTIVE_CANCELED (WARE_ID); | CREATE INDEX DOC_DETAIL_ACTIVE_CANCELED_IDX3 ON DOC_DETAIL_ACTIVE_CANCELED (WARE_ID); | ||
CREATE INDEX DOC_DETAIL_ACTIVE_NAMEID_IDX5 ON DOC_DETAIL_ACTIVE_NAMEID (WARE_ID); | CREATE INDEX DOC_DETAIL_ACTIVE_NAMEID_IDX5 ON DOC_DETAIL_ACTIVE_NAMEID (WARE_ID); | ||
Строка 7: | Строка 7: | ||
CREATE INDEX DOC_DETAIL_ACTIVE_IDX12 ON DOC_DETAIL_ACTIVE (WARE_ID); | CREATE INDEX DOC_DETAIL_ACTIVE_IDX12 ON DOC_DETAIL_ACTIVE (WARE_ID); | ||
− | + | /* 2) Делаем WARES_IDX1 не уникальным */ | |
DROP INDEX WARES_IDX1; | DROP INDEX WARES_IDX1; | ||
CREATE INDEX WARES_IDX1 ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE); | CREATE INDEX WARES_IDX1 ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE); | ||
− | + | /* 3) Правим UPDPR_REPARWARES */ | |
SET TERM ^ ; | SET TERM ^ ; | ||
Строка 41: | Строка 41: | ||
update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; | update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; | ||
update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; | update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; | ||
− | + | /* update DOC_DETAIL_ACTIVE_TREB set ware_id=:id where ware_id=:t_id; */ | |
update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; | update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; | ||
update OUT$ZAKAZ set ware_id=:id where ware_id=:t_id; | update OUT$ZAKAZ set ware_id=:id where ware_id=:t_id; | ||
Строка 53: | Строка 53: | ||
end | end | ||
− | + | /* suspend; */ | |
end^ | end^ | ||
Строка 78: | Строка 78: | ||
GRANT EXECUTE ON PROCEDURE UPDPR_REPARWARES TO SYSDBA; | GRANT EXECUTE ON PROCEDURE UPDPR_REPARWARES TO SYSDBA; | ||
− | + | /* 4) Сжимаем WARES и создаем WARES_IDXU */ | |
EXECUTE PROCEDURE UPDPR_REPARWARES; | EXECUTE PROCEDURE UPDPR_REPARWARES; | ||
CREATE UNIQUE INDEX WARES_IDXU ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,BARCODE); | CREATE UNIQUE INDEX WARES_IDXU ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,BARCODE); | ||
− | + | </pre> |
Текущая версия на 14:36, 14 июля 2016
Выполнить скрипт
/* 1) Накатываем индексы, чтобы выполнялось быстрее */ CREATE INDEX DOC_DETAIL_ACTIVE_CANCELED_IDX3 ON DOC_DETAIL_ACTIVE_CANCELED (WARE_ID); CREATE INDEX DOC_DETAIL_ACTIVE_NAMEID_IDX5 ON DOC_DETAIL_ACTIVE_NAMEID (WARE_ID); CREATE INDEX DOC_DETAIL_DELETED_IDX8 ON DOC_DETAIL_DELETED (WARE_ID); CREATE INDEX DOC_DETAIL_ACTIVE_IDX12 ON DOC_DETAIL_ACTIVE (WARE_ID); /* 2) Делаем WARES_IDX1 не уникальным */ DROP INDEX WARES_IDX1; CREATE INDEX WARES_IDX1 ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,ORIG_CODE,ORIG_NAME_ID,ORIG_IZG_ID,ORIG_COUNTRY_ID,BARCODE); /* 3) Правим UPDPR_REPARWARES */ SET TERM ^ ; create or alter procedure UPDPR_REPARWARES returns ( ID DM_TEXT) as declare variable NAME_ID DM_TEXT; declare variable IZG_ID DM_TEXT; declare variable COUNTRY_ID DM_TEXT; declare variable ORIG_CODE DM_TEXT; declare variable ORIG_NAME_ID DM_TEXT; declare variable ORIG_IZG_ID DM_TEXT; declare variable ORIG_COUNTRY_ID DM_TEXT; declare variable T_ID DM_TEXT; declare variable BARCODE DM_TEXT; begin delete from DOC_DETAIL_ACTIVE_LOG; for select min(id), NAME_ID, IZG_ID, COUNTRY_ID, BARCODE from wares group by NAME_ID, IZG_ID, COUNTRY_ID, BARCODE having count(1)>1 into id, NAME_ID,IZG_ID,COUNTRY_ID,BARCODE do begin for select id from wares where NAME_ID=:NAME_ID and IZG_ID=:IZG_ID and COUNTRY_ID=:COUNTRY_ID and BARCODE=:BARCODE and id<>:id into :t_id do begin update DOC_DETAIL_ACTIVE set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_CANCELED set ware_id=:id where ware_id=:t_id; update DOC_DETAIL_ACTIVE_NAMEID set ware_id=:id where ware_id=:t_id; /* update DOC_DETAIL_ACTIVE_TREB set ware_id=:id where ware_id=:t_id; */ update DOC_DETAIL_DELETED set ware_id=:id where ware_id=:t_id; update OUT$ZAKAZ set ware_id=:id where ware_id=:t_id; update PARTS set ware_id=:id where ware_id=:t_id; update PARTS_LOG set ware_id=:id where ware_id=:t_id; update WAREBASE set ware_id=:id where ware_id=:t_id; update WAREBASEFOLDERS set ware_id=:id where ware_id=:t_id; update WAREBASENAMEID set ware_id=:id where ware_id=:t_id; delete from wares where id=:t_id; end end /* suspend; */ end^ SET TERM ; ^ /* Following GRANT statetements are generated automatically */ GRANT SELECT,DELETE ON DOC_DETAIL_ACTIVE_LOG TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,DELETE ON WARES TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON DOC_DETAIL_ACTIVE TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON DOC_DETAIL_ACTIVE_CANCELED TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON DOC_DETAIL_ACTIVE_NAMEID TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON DOC_DETAIL_ACTIVE_TREB TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON DOC_DETAIL_DELETED TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON OUT$ZAKAZ TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON PARTS TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON PARTS_LOG TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON WAREBASE TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON WAREBASEFOLDERS TO PROCEDURE UPDPR_REPARWARES; GRANT SELECT,UPDATE ON WAREBASENAMEID TO PROCEDURE UPDPR_REPARWARES; /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE UPDPR_REPARWARES TO SYSDBA; /* 4) Сжимаем WARES и создаем WARES_IDXU */ EXECUTE PROCEDURE UPDPR_REPARWARES; CREATE UNIQUE INDEX WARES_IDXU ON WARES (NAME_ID,IZG_ID,COUNTRY_ID,BARCODE);