Сжатие товаров — различия между версиями
Материал из 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);