Описание работы АС и заглушек — КиберПедия 

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Описание работы АС и заглушек

2017-06-13 236
Описание работы АС и заглушек 0.00 из 5.00 0 оценок
Заказать работу

Системы, работающие через Sonic: Бисквит; SC "Наличность"; ЦОП; Way4; «ДБО «Telebank»; Profile на тестовом стенде будут заменены эмулятором. Архитектура эмулятора Sonic должна позволять изменять формат входящих/исходящих XML сообщений без перекомпиляции заглушки.

Эмулятор УСБС представляет из себя пару взаимодействующих веб-сервисов, разворачиваемых на сервере Apache Tomcat: back-ws-ts и from-ws-ts и предоставляется Заказчиком.

Эмулятор Delta BranchCash представляет из себя пару взаимодействующих веб-сервисов, разворачиваемых на сервере Glassfish.

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

Замена шаблонов входящих и исходящих сообщений эмулятора не требует перекомпиляции самого эмулятора.

Описание работы эмулятора смежных систем Sonic приведено в Приложение 3. Эмулятор Sonic.

Для эмуляции взаимодействия Системы с ЕФР (Siebel-Spectrum), будет разработан набор скриптов Load Runner (UC23-UC39 из раздела п.9.4 Описание операций НТ), входящих в основной профиль тестирования «День» - операции рассчетно-кассового функционала.

В ходе выполнения операций в интерфейс Spectrum загружается XML с соответствующим кейсу контекстом операции, для создания XML будет разработан отдельный генератор. Согласно информации от Заказчика, данные операции могут выполняться в обход Siebel’я или его эмулятора путем загрузки соответствующих XML через интерфейс Spectrum вместо получения XML со стороны веб-сервиса Siebel.

Наполнение базы данных

Нагрузочное тестирование ИС «Спектрум» будет проводиться на тестовой БД, наполненной до объемов, планируемых на начало 2016 года.

Согласно прогнозу, предоставленному заказчиком, ожидаются следующие объемы наполнения основных таблиц БД ИС «Спектрум»:

 

Таблица 11.1 Количество строк в основных таблицах БД ИС «Спектрум»

Владелец Имя таблицы Кол-во строк
09.2013 01.06.2014 (текущее стостояние БД) 01.2016 (план)
SP CLIENT   3 800 500 15 000 000
SP DEPT      
SP OPER_JOURNAL_EVENT   9 840 000 330 000 000

 

Наполнение БД будет производиться по таблицам, имеющим на 01.06.2014 более одного миллиона записей.

Для генерации данных будут разработаны скрипты SQL, создающие строки в таблицах селективным методом (на основании уже имеющихся записей в таблицах). Для пулов скриптов НТ будут использованы только изначальные записи, имеющиеся на момент снятия дампа БД, сгенерированные записи будут создавать исключительно объем и в скриптах задействованы не будут.

При создании скриптов SQL-запросов будут учтены связи между таблицами для избежания конфликтов заполнения.

Прогнозируемые объемы таблиц БД, по которым будет производиться наполнение, представлены в Таблице 11.2. Прогноз рассчитан на основании данных, предоставленных Заказчиком (Таблица 11.1), связей между таблицами и трендом ежемесячного увеличения объема записей в каждой таблице отдельно. Подробные расчеты представлены в Приложении 2.

 

Таблица 11.2 Объемы наполнения остальных таблиц

Название таблицы всего 01.06.2014 прогноз 01.01.2016
OPER_JOURNAL_EVENT 19 051 557 330 000 000
TRANS_POS 17 924 652 310 000 000
VALUABLE_FLOW 12 302 303 210 000 000
AN_ATTR_VAL 11 813 501 200 000 000
OPER_JOURNAL 11 756 945 200 000 000
PMT_DOC 10 197 988 175 000 000
OPER_JOURNAL_PRINT 9 881 766 170 000 000
OPER_JOURNAL_CONTENT 9 840 220 170 000 000
TRANS 9 043 874 155 000 000
AUDIT_LOG 5 652 433 95 000 000
OPER_JOURNAL_EXT 5 427 518 95 000 000
OBJ_ID_SYS_ROLE 4 960 367 85 000 000
PUBLIC_SERVICE_OJ_PAR 4 643 805 80 000 000
CLIENT 3 798 433 15 000 000
PMT_DOC_EXT 3 856 880 65 000 000
PERSON 3 608 766 14 000 000
IDENTITY_CARD 3 604 002 14 000 000
FCY_CASH_REGISTER_OPER 3 302 016 50 000 000
USER_SESSION 3 015 526 11 000 000
VALUABLE_BALANCE 2 820 980 11 000 000
ADDRESS 2 588 235 10 000 000
POS_REGISTER_OPER 2 576 310 10 000 000
LIM_REC_POSTING 1 662 806 6 000 000
LIM_REC 1 571 279 6 000 000
ACCOUNT 1 497 884 5 000 000
BALANCE 1 298 498 5 000 000

 

Наполнение таблиц в связи с имеющимися зависимостями будет проводиться в следующем порядке:

 

Таблица 11.3 Порядок наполнения таблиц в БД.

ПОРЯДОК НАПОЛНЕНИЯ НАЗВАНИЕ ТАБЛИЦЫ
  PERSON
  DEPT
  CLIENT
  USER_SESSION
  WORK_SHIFT
  IDENTITY_CARD
7,8 OPER_JOURNAL
  ACCOUNT
  TRANS_POS
  VALUABLE_FLOW
  PMT_DOC
  PMT_DOC_EXT
  AN_ATTR_VAL
  OPEN_JOURNAL_PRINT
  OPEN_JOURNAL_CONTENT
  TRANS
  AUDIT_LOG
  OPER_JOURNAL_EXT
  OBJ_ID_SYS_ROLE
  PUBLIC_SERVICE_OJ_PAR
  FCY_CASH_REGISTER_OPER
  VALUABLE_BALANCE
  BALANCE
  LIM_REC
  LIM_REC_POSTING
  POS_REGISTER_OPER

 

Возможные риски со стороны тестирования:

1) В наполнении не участвуют таблицы, в которых на момент снятия дампа БД менее 1 млн. записей. При возникновении необходимости будет произведено наполнение связных таблиц, не участвующих в прогнозе.

2) Погрешность результатов реальной производительности системы Spectrum в зависимости от отклонений прогнозируемого объема БД с реальным объемом на 01.2016 не превысит 10%.

3) Наполнение производится селективными данными, в связи с чем может возникнуть погрешность в скорости выполнения некоторых запросов (например, уменьшение скорости индекс-сканов). При выявлении и анализе проблемных запросов в БД во время НТ данная погрешность будет учтена.

 


Скрипты наполнения

Данный раздел будет дополнен скриптами SQL по каждой наполняемой таблице в БД после их разработки.

Таблица 11.4 Скрипты наполнения таблиц в БД.

Название таблицы Скрипт SQL
OPER_JOURNAL_EVENT create or replace   procedure fill_oper_journal(num in number)   is   crtTime date;   tableSize number;   r number;   maxOper number;   begin   r:= num;   select max(oper_journal_id) into maxOper from oper_journal;   loop   select count(OPER_JOURNAL_ID) into tableSize from oper_journal;   insert into oper_journal(OPER_JOURNAL_ID, OPERATION_CODE,   CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID,   CLIENT_ID, USER_ID, TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID,   OJ_REG_TIME, OJ_DATE, OJ_STATUS_ENUM, OJ_NOTE, OJ_AMOUNT,   OJ_CONF_TIME, REQ_ID, OJ_EXT_ID,   OJ_SUSPECT_FLAG, OJ_REQUIRE_FM_FLAG, IDENTITY_CARD_ID)   select s_oper_journal.nextval, OPERATION_CODE, CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID, CLIENT_ID, USER_ID,   TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID,   trunc(sysdate - dbms_random.value(1,300)), '01.01.10', 1, dbms_random.string('x', 20), round(dbms_random.value(1,50000)), '01.01.10', null,null,   0, 0, IDENTITY_CARD_ID   from oper_journal s left join tmp t on s.OPER_JOURNAL_ID = t.tmp_id   where rownum <= r and tmp_id is null;   if tableSize <=0 then r:=-1;   else   r:= r - tableSize;   end if;   exit when r <= 0;   commit;   end loop;   update oper_journal set main_oper_journal_id = oper_journal_id   where oper_journal_id > maxOper;   commit;   update oper_journal set OJ_CONF_TIME = OJ_REG_TIME   where oper_journal_id > maxOper;   commit;   update oper_journal set OJ_DATE = OJ_REG_TIME   where oper_journal_id > maxOper;   commit;   insert into oper_journal_event   select s_oper_journal_event.nextval, o.oper_journal_id, oje.user_id, trunc(sysdate - dbms_random.value(1,300)), oje_after_status_enum   oje_elapsed_time_interval, oje_note, oje_before_status_enum, oje_after_status_enum, oje.work_shift_id   from oper_journal o join oper_journal_event oje on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = oje.oper_journal_id   where o.oper_journal_id > maxOper;   insert into oper_journal_print   select s_oper_journal_print.nextval, o.oper_journal_id, PMT_DOC_ID, PRINT_TMPL_TYPE_ID, OJP_QTY,   OJP_EVENT_ENUM, OJP_AFTER_FLAG, OJP_PRINT_FLAG, SIGN_USER_ID   from oper_journal o join oper_journal_print ojp on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojp.oper_journal_id   where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal);   commit;   insert into oper_journal_content   select s_oper_journal_content.nextval, o.oper_journal_id, OJC_CONTENT_STORE_ENUM,   OJC_CONTENT_TYPE_ENUM,OJC_PRINTABLE_ENUM,OJC_CONTENT_XML,OJC_CONTENT_BLOB,   OJC_CONTENT_CLOB,OJC_NAME,OJC_FILE_NAME   from oper_journal o join oper_journal_content ojc on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojc.oper_journal_id   where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal);   commit;   end fill_oper_journal;
TRANS_POS create or replace procedure fill_trans_pos(cnt in number) is tDate date; rows_in_iter number; n number; intial_min_pd number; startSeq number; curr_trans_seq number; min_pmt_doc_id number; max_pmt_doc_id number; begin --на каждый аккаунт по 6 транзакций   rows_in_iter:= 2; n:= cnt; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n > 0) loop   tDate:= trunc(sysdate - dbms_random.value(1,200));   select coalesce(max(trans_num)+1, 1) into startSeq from trans where trans_date = tDate;   select coalesce(max(trans_num)+1,startSeq) into startSeq from trans_pos where trans_date = tDate;   reset_seq('trans_pos_seq', to_char(startSeq));   for i in 1..1000 loop curr_trans_seq:= trans_pos_seq.nextval;   insert into trans(TRANS_DATE, TRANS_NUM, REVERSE_TRANS_DATE, REVERSE_TRANS_NUM, DEPT_ID,PMT_DOC_ID,TRANS_REVERSE_FLAG) select trunc(tDate), curr_trans_seq, null,null,515, 35487,0 from dual where rownum < 2;     insert into trans_pos(TRANS_DATE, TRANS_NUM, TRANS_POS_NUM, CURRENCY_ID, CASH_SYMBOL_CODE, ACCOUNT_ID, TP_COR_NUM, TP_VALUE_DATE, TP_SIDE_ENUM, TP_AMOUNT, TP_AMOUNT_RUB, TP_NEED_ACT_BAL_FLAG) select trunc(tDate), curr_trans_seq, 1,126,37, 28155, 2, trunc(tDate), 'D',10000, 10000, null from dual where rownum < 2;   insert into trans_pos(TRANS_DATE, TRANS_NUM, TRANS_POS_NUM, CURRENCY_ID, CASH_SYMBOL_CODE, ACCOUNT_ID, TP_COR_NUM, TP_VALUE_DATE, TP_SIDE_ENUM, TP_AMOUNT, TP_AMOUNT_RUB, TP_NEED_ACT_BAL_FLAG) select trunc(tDate), curr_trans_seq, 2,126,37,28155, 2, trunc(tDate), 'D',10000,10000,null from dual where rownum < 2; end loop;   n:= n - rows_in_iter - 1000; end loop;   end fill_trans_pos;
VALUABLE_FLOW create or replace procedure fill_val_flow(cnt in number) is tableSize number; r number; maxVFId number; minVFId number; rows_in_iter number; n number; m number; minVF number;   begin   select min(valuable_flow_id) into minVFId from valuable_flow; rows_in_iter:= 100000; n:= cnt; minVF:=minVFId; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n > 0) loop select max(valuable_flow_id) into maxVFId from valuable_flow; m:= round(dbms_random.value(minVFId,maxVFId));     insert into VALUABLE_FLOW (VALUABLE_FLOW_ID, RECEIVER_WORK_SHIFT_ID, SENDER_WORK_SHIFT_ID, OPER_JOURNAL_ID, VALUABLE_REGISTER_ID, PMT_DOC_ID, VF_SERIES, VF_FIRST_NUM, VF_LAST_NUM, VF_AMOUNT, VF_QUANTITY, SENDER_DEVICE_ID, SENDER_DEPT_ID, RECEIVER_DEPT_ID, RECEIVER_DEVICE_ID, VF_SORT_ENUM, VF_RECEIPT_DOC_QTY, VF_DISBURSEMT_DOC_QTY, MAIN_OPER_JOURNAL_ID, VN_SENDER_LOCATION_ENUM, VN_RECEIVER_LOCATION_ENUM, VF_HIST_COST, SENDER_USER_ID, RECEIVER_USER_ID)   select S_VALUABLE_FLOW.nextval, RECEIVER_WORK_SHIFT_ID, SENDER_WORK_SHIFT_ID, OPER_JOURNAL_ID, VALUABLE_REGISTER_ID, PMT_DOC_ID, VF_SERIES, VF_FIRST_NUM, VF_LAST_NUM, VF_AMOUNT, VF_QUANTITY, SENDER_DEVICE_ID, SENDER_DEPT_ID, RECEIVER_DEPT_ID, RECEIVER_DEVICE_ID, VF_SORT_ENUM, VF_RECEIPT_DOC_QTY, VF_DISBURSEMT_DOC_QTY, MAIN_OPER_JOURNAL_ID, VN_SENDER_LOCATION_ENUM, VN_RECEIVER_LOCATION_ENUM, VF_HIST_COST, SENDER_USER_ID, RECEIVER_USER_ID from valuable_flow v left join tmp t on v.valuable_flow_id = t.tmp_id where (valuable_flow_id between minVFId and m) and rownum < rows_in_iter;   maxVFId:= maxVFId + rows_in_iter; if (m >= rows_in_iter) then n:= n - rows_in_iter; else n:= n - m; end if;   minVFId:= minVFId + rows_in_iter; if (n > 0 and (minVFId + rows_in_iter) > maxVFId) then minVFId:= minVF; end if; commit; end loop;   end fill_val_flow;
AN_ATTR_VAL create or replace procedure FILL_AN_ATTR_VAL(cnt in number) is rows_in_iter number; n number; min_acc_id number; max_acc_id number; init_min_acc_id number; tDate date; begin   rows_in_iter:= 300000; n:= cnt;   select min(account_id) into min_acc_id from account where account_id > 0; select max(account_id) into max_acc_id from account; init_min_acc_id:= min_acc_id;   if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n >0) loop tDate:= trunc(sysdate - dbms_random.value(1,300));   SAVEPOINT start_transaction;   insert into an_attr_val (AN_ATTR_VAL_ID, AAV_OBJ_ID, AN_ATTR_ID, AAV_TIME, AAV_VALUE) select s_an_attr_val.nextval, a.account_id, ceil(dbms_random.value(11,19)), tDate, 'lt' || dbms_random.string('X',40) from account a where rownum < rows_in_iter and a.account_id between min_acc_id and max_acc_id;   n:= n - rows_in_iter; min_acc_id:= min_acc_id + rows_in_iter;   if (min_acc_id >= max_acc_id) then min_acc_id:= init_min_acc_id; end if; commit; end loop; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN rollback to start_transaction; tDate:= sysdate; min_acc_id:= min_acc_id + rows_in_iter; dbms_output.put_line('dups'); WHEN OTHERS THEN ROLLBACK; END;
OPER_JOURNAL, OPER_JOURNAL_PRINT, OPER_JOURNAL_CONTENT, OPER_JOURNAL_EXT create or replace function func_fill_oper_journal(num in number) return number is crtTime date; tableSize number; r number; maxOper number; begin   r:= num; select max(oper_journal_id) into maxOper from oper_journal;   loop select count(OPER_JOURNAL_ID) into tableSize from oper_journal;   insert into oper_journal(OPER_JOURNAL_ID, OPERATION_CODE, CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID, CLIENT_ID, USER_ID, TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID, OJ_REG_TIME, OJ_DATE, OJ_STATUS_ENUM, OJ_NOTE, OJ_AMOUNT, OJ_CONF_TIME, REQ_ID, OJ_EXT_ID, OJ_SUSPECT_FLAG, OJ_REQUIRE_FM_FLAG, IDENTITY_CARD_ID) select s_oper_journal.nextval, OPERATION_CODE, CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID, CLIENT_ID, USER_ID, TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID, trunc(sysdate - dbms_random.value(1,300)), '01.01.10', 1, dbms_random.string('x', 20), round(dbms_random.value(1,50000)), '01.01.10', null, case when OJ_EXT_ID is null then null else OJ_EXT_ID || ', lt-' || dbms_random.string('x',5) end, 0, 0, IDENTITY_CARD_ID from oper_journal s left join tmp t on s.OPER_JOURNAL_ID = t.tmp_id where rownum <= r and tmp_id is null;   if tableSize <=0 then r:=-1; else r:= r - tableSize; end if; exit when r <= 0; commit; end loop;   update oper_journal set main_oper_journal_id = oper_journal_id where oper_journal_id > maxOper; commit; update oper_journal set OJ_CONF_TIME = OJ_REG_TIME where oper_journal_id > maxOper; commit; update oper_journal set OJ_DATE = OJ_REG_TIME where oper_journal_id > maxOper; commit;   insert into oper_journal_event select s_oper_journal_event.nextval, o.oper_journal_id, oje.user_id, trunc(sysdate - dbms_random.value(1,300)), oje_after_status_enum oje_elapsed_time_interval, oje_note, oje_before_status_enum, oje_after_status_enum, oje.work_shift_id from oper_journal o join oper_journal_event oje on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = oje.oper_journal_id where o.oper_journal_id > maxOper;   insert into oper_journal_print select s_oper_journal_print.nextval, o.oper_journal_id, PMT_DOC_ID, PRINT_TMPL_TYPE_ID, OJP_QTY, OJP_EVENT_ENUM, OJP_AFTER_FLAG, OJP_PRINT_FLAG, SIGN_USER_ID from oper_journal o join oper_journal_print ojp on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojp.oper_journal_id where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal); commit;   insert into oper_journal_content select s_oper_journal_content.nextval, o.oper_journal_id, OJC_CONTENT_STORE_ENUM, OJC_CONTENT_TYPE_ENUM,OJC_PRINTABLE_ENUM,OJC_CONTENT_XML,OJC_CONTENT_BLOB, OJC_CONTENT_CLOB,OJC_NAME,OJC_FILE_NAME from oper_journal o join oper_journal_content ojc on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojc.oper_journal_id where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal); commit;   insert into oper_journal_ext (oje_ext_id, oper_journal_id, id_sys_code) select distinct OJ_EXT_ID, oj.oper_journal_id, case when mod(oj.oper_journal_id,2)=0 then '00000' when mod(oj.oper_journal_id,3)=0 then 'SC_NAL' when mod(oj.oper_journal_id,5)=0 then 'Бисквит' else 'OW4' end from oper_journal oj where oj.oper_journal_id > maxOper and oj.OJ_EXT_ID is not null; commit;   return maxOper; end func_fill_oper_journal;       create or replace procedure fill_oper_journal(num in number) is crtTime date; tableSize number; r number; maxOper number; begin   r:= num; select max(oper_journal_id) into maxOper from oper_journal;   loop select count(OPER_JOURNAL_ID) into tableSize from oper_journal;   insert into oper_journal(OPER_JOURNAL_ID, OPERATION_CODE, CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID, CLIENT_ID, USER_ID, TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID, OJ_REG_TIME, OJ_DATE, OJ_STATUS_ENUM, OJ_NOTE, OJ_AMOUNT, OJ_CONF_TIME, REQ_ID, OJ_EXT_ID, OJ_SUSPECT_FLAG, OJ_REQUIRE_FM_FLAG, IDENTITY_CARD_ID) select s_oper_journal.nextval, OPERATION_CODE, CURRENCY_ID, DEPT_ID, PARENT_OPER_JOURNAL_ID, CLIENT_ID, USER_ID, TELLER_EMP_USER_ID, CONTROL_EMP_USER_ID, LAST_CHANGE_USER_ID, trunc(sysdate - dbms_random.value(1,300)), '01.01.10', 1, dbms_random.string('x', 20), round(dbms_random.value(1,50000)), '01.01.10', null, case when OJ_EXT_ID is null then null else OJ_EXT_ID || ', lt-' || dbms_random.string('x',5) end, 0, 0, IDENTITY_CARD_ID from oper_journal s left join tmp t on s.OPER_JOURNAL_ID = t.tmp_id where rownum <= r and tmp_id is null;   if tableSize <=0 then r:=-1; else r:= r - tableSize; end if; exit when r <= 0; commit; end loop;   update oper_journal set main_oper_journal_id = oper_journal_id where oper_journal_id > maxOper; commit; update oper_journal set OJ_CONF_TIME = OJ_REG_TIME where oper_journal_id > maxOper; commit; update oper_journal set OJ_DATE = OJ_REG_TIME where oper_journal_id > maxOper; commit;   insert into oper_journal_event select s_oper_journal_event.nextval, o.oper_journal_id, oje.user_id, trunc(sysdate - dbms_random.value(1,300)), oje_after_status_enum oje_elapsed_time_interval, oje_note, oje_before_status_enum, oje_after_status_enum, oje.work_shift_id from oper_journal o join oper_journal_event oje on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = oje.oper_journal_id where o.oper_journal_id > maxOper;   insert into oper_journal_print select s_oper_journal_print.nextval, o.oper_journal_id, PMT_DOC_ID, PRINT_TMPL_TYPE_ID, OJP_QTY, OJP_EVENT_ENUM, OJP_AFTER_FLAG, OJP_PRINT_FLAG, SIGN_USER_ID from oper_journal o join oper_journal_print ojp on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojp.oper_journal_id where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal); commit;   insert into oper_journal_content select s_oper_journal_content.nextval, o.oper_journal_id, OJC_CONTENT_STORE_ENUM, OJC_CONTENT_TYPE_ENUM,OJC_PRINTABLE_ENUM,OJC_CONTENT_XML,OJC_CONTENT_BLOB, OJC_CONTENT_CLOB,OJC_NAME,OJC_FILE_NAME from oper_journal o join oper_journal_content ojc on o.oper_journal_id - 2*((select max(oper_journal_id) from oper_journal) - maxOper) = ojc.oper_journal_id where o.oper_journal_id > maxOper + (select (max(oper_journal_id)-maxOper)/2 from oper_journal); commit;   insert into oper_journal_ext (oje_ext_id, oper_journal_id, id_sys_code) select distinct OJ_EXT_ID, oj.oper_journal_id, case when mod(oj.oper_journal_id,2)=0 then '00000' when mod(oj.oper_journal_id,3)=0 then 'SC_NAL' when mod(oj.oper_journal_id,5)=0 then 'Бисквит' else 'OW4' end from oper_journal oj where oj.oper_journal_id > maxOper and oj.OJ_EXT_ID is not null; commit;   insert into OBJ_ID_SYS_ROLE select 'OPER_JOURNAL', oje.oper_journal_id, 1, oje.id_sys_code from oper_journal_ext oje where oje.oper_journal_id > maxOper; commit; end fill_oper_journal;  
PMT_DOC procedure fill_pmt_doc(num in number)   is   tableSize number;   r number;   maxPmtId number;   begin   r:= num;   select max(pmt_doc_id) into maxPmtId from pmt_doc;   loop   select count(pmt_doc_id) into tableSize from pmt_doc;   insert into pmt_doc(PMT_DOC_ID,DEBIT_ACCOUNT_ID,CREDIT_ACCOUNT_ID,   CASH_OPERATION_SORT_CODE,PAR_PMT_DOC_ID,IDENTITY_CARD_ID,   OPER_JOURNAL_ID,PMT_TYPE_CODE,PMT_SORT_CODE,PMT_ORDER_TYPE_CODE,   PAYER_BIC, BEN_BIC, CREDIT_CASH_SYMBOL_CODE, DEBIT_CASH_SYMBOL_CODE,   PRINT_TMPL_TYPE_ID, PAYER_STATUS_CODE, PMT_GROUND_TYPE_CODE,   CURRENCY_ID, MARK_DOC_CODE, DEBIT_CURRENCY_ID, CREDIT_CURRENCY_ID,   PD_ORD_COMP_ENUM, PD_SIGN_ENUM, PD_NUM, PD_CASH_OPERATION_NUMBER,   PD_PRINT_QTY, PD_REG_DATE, PD_DATE, PD_VALUE_DATE, PD_PAYER_ACC_NUM,   PD_PAYER_NAME, PD_PAYER_INN, PD_PAYER_KPP, PD_PAYER_BANK_ACC_NUM,   PD_BEN_ACC_NUM, PD_BEN_NAME, PD_BEN_INN, PD_BEN_KPP,   PD_BEN_BANK_ACC_NUM, PD_AMOUNT, PD_PMT_DETAILS,   PD_CBC, PD_OKATO, PD_FISKAL_PERIOD, PD_FISKAL_DOC_NUM,   PD_FISKAL_DOC_DATE_C, PD_DEBIT_AMOUNT, PD_CREDIT_AMOUNT,   CURRENCY_OPER_SORT_CODE, PD_PAYER_RESIDENT_FLAG, PD_BEN_RESIDENT_FLAG,   PD_EXT_ID, PD_NUM_S, PD_CASH_OPERATION_NUMBER_S,   PD_CCY_EXCH_RATE, PD_PAYER_IDENTITY_CARD, PD_PRINCIPAL,   PD_PRINCIPAL_IDENTITY_CARD, PD_POA, PD_PRINT_FLAG,   PD_PRINT_CLIENT_INFO_FLAG, PD_CASH_RECEIPT_NUM, PD_CASH_DISBURSEMT_NUM,   PD_BEN_IDENTITY_CARD, BENEFICIARY_ID, MAIN_OPER_JOURNAL_ID,   PD_POA_EXP_DATE, PD_TAX_CHARGE_UID, PD_CB_CODE, DEBIT_DEPT_ID,   CREDIT_DEPT_ID, DEBIT_ID_SYS_CODE, CREDIT_ID_SYS_CODE,   DEBIT_SYNT_ACC_ID, CREDIT_SYNT_ACC_ID, PD_PAYER_ADDRESS,   DEBIT_AGR_ID, CREDIT_AGR_ID, PD_BENEFICIARY_SURNAME,   PD_BENEFICIARY_FIRST_NAME, PD_BENEFICIARY_PATRONYMIC)   select s_pmt_doc.nextval, DEBIT_ACCOUNT_ID,CREDIT_ACCOUNT_ID,   CASH_OPERATION_SORT_CODE,PAR_PMT_DOC_ID,IDENTITY_CARD_ID,   OPER_JOURNAL_ID,PMT_TYPE_CODE,PMT_SORT_CODE,PMT_ORDER_TYPE_CODE,   PAYER_BIC, BEN_BIC, CREDIT_CASH_SYMBOL_CODE, DEBIT_CASH_SYMBOL_CODE,   PRINT_TMPL_TYPE_ID, PAYER_STATUS_CODE, PMT_GROUND_TYPE_CODE,   CURRENCY_ID, MARK_DOC_CODE, DEBIT_CURRENCY_ID, CREDIT_CURRENCY_ID,   PD_ORD_COMP_ENUM, PD_SIGN_ENUM, PD_NUM, PD_CASH_OPERATION_NUMBER,   PD_PRINT_QTY, trunc(sysdate - dbms_random.value(1,300)), '01.01.2010', '01.01.2010', PD_PAYER_ACC_NUM,   PD_PAYER_NAME, PD_PAYER_INN, PD_PAYER_KPP, PD_PAYER_BANK_ACC_NUM,   PD_BEN_ACC_NUM, PD_BEN_NAME, PD_BEN_INN, PD_BEN_KPP,   PD_BEN_BANK_ACC_NUM, PD_AMOUNT, PD_PMT_DETAILS,   PD_CBC, PD_OKATO, PD_FISKAL_PERIOD, PD_FISKAL_DOC_NUM,   PD_FISKAL_DOC_DATE_C, PD_DEBIT_AMOUNT, PD_CREDIT_AMOUNT,   CURRENCY_OPER_SORT_CODE, PD_PAYER_RESIDENT_FLAG, PD_BEN_RESIDENT_FLAG,   PD_EXT_ID, PD_NUM_S, PD_CASH_OPERATION_NUMBER_S,   PD_CCY_EXCH_RATE, PD_PAYER_IDENTITY_CARD, PD_PRINCIPAL,   PD_PRINCIPAL_IDENTITY_CARD, PD_POA, PD_PRINT_FLAG,   PD_PRINT_CLIENT_INFO_FLAG, PD_CASH_RECEIPT_NUM, PD_CASH_DISBURSEMT_NUM,   PD_BEN_IDENTITY_CARD, BENEFICIARY_ID, MAIN_OPER_JOURNAL_ID,   PD_POA_EXP_DATE, PD_TAX_CHARGE_UID, PD_CB_CODE, DEBIT_DEPT_ID,   CREDIT_DEPT_ID, DEBIT_ID_SYS_CODE, CREDIT_ID_SYS_CODE,   DEBIT_SYNT_ACC_ID, CREDIT_SYNT_ACC_ID, PD_PAYER_ADDRESS,   DEBIT_AGR_ID, CREDIT_AGR_ID, PD_BENEFICIARY_SURNAME,   PD_BENEFICIARY_FIRST_NAME, PD_BENEFICIARY_PATRONYMIC   from pmt_doc s left join tmp t on s.PMT_DOC_ID = t.tmp_id   where rownum <= r and tmp_id is null;   if tableSize <=0 then r:=-1;   else   r:= r - tableSize;   end if;   exit when r <= 0;   commit;   end loop;   update pmt_doc set PD_DATE = PD_REG_DATE   where pmt_doc_id > maxPmtId;   commit;   update pmt_doc set PD_VALUE_DATE = PD_REG_DATE   where pmt_doc_id > maxPmtId;   commit;   end fill_pmt_doc;    
TRANS create or replace procedure fill_trans_pos(cnt in number) is tDate date; rows_in_iter number; n number; intial_min_pd number; startSeq number; curr_trans_seq number; min_pmt_doc_id number; max_pmt_doc_id number; begin --на каждый аккаунт по 6 транзакций   rows_in_iter:= 2; n:= cnt; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n > 0) loop   tDate:= trunc(sysdate - dbms_random.value(1,200));   select coalesce(max(trans_num)+1, 1) into startSeq from trans where trans_date = tDate;   select coalesce(max(trans_num)+1,startSeq) into startSeq from trans_pos where trans_date = tDate;   reset_seq('trans_pos_seq', to_char(startSeq));   for i in 1..1000 loop curr_trans_seq:= trans_pos_seq.nextval;   insert into trans(TRANS_DATE, TRANS_NUM, REVERSE_TRANS_DATE, REVERSE_TRANS_NUM, DEPT_ID,PMT_DOC_ID,TRANS_REVERSE_FLAG) select trunc(tDate), curr_trans_seq, null,null,515, 35487,0 from dual where rownum < 2;     insert into trans_pos(TRANS_DATE, TRANS_NUM, TRANS_POS_NUM, CURRENCY_ID, CASH_SYMBOL_CODE, ACCOUNT_ID, TP_COR_NUM, TP_VALUE_DATE, TP_SIDE_ENUM, TP_AMOUNT, TP_AMOUNT_RUB, TP_NEED_ACT_BAL_FLAG) select trunc(tDate), curr_trans_seq, 1,126,37, 28155, 2, trunc(tDate), 'D',10000, 10000, null from dual where rownum < 2;   insert into trans_pos(TRANS_DATE, TRANS_NUM, TRANS_POS_NUM, CURRENCY_ID, CASH_SYMBOL_CODE, ACCOUNT_ID, TP_COR_NUM, TP_VALUE_DATE, TP_SIDE_ENUM, TP_AMOUNT, TP_AMOUNT_RUB, TP_NEED_ACT_BAL_FLAG) select trunc(tDate), curr_trans_seq, 2,126,37,28155, 2, trunc(tDate), 'D',10000,10000,null from dual where rownum < 2; end loop;   n:= n - rows_in_iter - 1000; end loop;   end fill_trans_pos;
AUDIT_LOG create or replace procedure fill_audit_log(min_us_id in number, cnt in number) is event numbertype; max_us number; rows_in_iter number; n number; m number; begin   select r bulk collect into event from (select event_sort_id r from event_sort);   select max(user_session_id) into max_us from user_session;   rows_in_iter:= 10000; n:= cnt; m:= min_us_id; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n > 0) loop insert into audit_log select s_audit_log.nextval, user_session_id, 330001, trunc(sysdate - dbms_random.value(1,300)), dbms_random.string('x', 10) from user_session where user_session_id > m and rownum < rows_in_iter;   update audit_log set event_sort_id = event(round(dbms_random.value(1,event.count))) where user_session_id > m;   m:= m + rows_in_iter; n:= n - rows_in_iter;   if (n > 0 and (m + rows_in_iter) > max_us) then m:= min_us_id; end if; commit; end loop;   end;
OBJ_ID_SYS_ROLE create or replace procedure FILL_OBJ_ID_SYS_ROLE(cnt in number) is rows_in_iter number; n number; SYS_ROLE_CODE number; SYS_CODE varchar2(16 byte); cnt_av number; begin   rows_in_iter:= 300000;   n:= cnt; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if; SYS_ROLE_CODE:=1; SYS_CODE:='99995'; while (n >0) loop   SAVEPOINT start_transaction;   select count(*) into cnt_av from FCY_CASH_REGISTER_OPER f left join obj_id_sys_role ob on to_char(f.fcy_cash_register_id) = ob.OISR_OBJ_ID where rownum < rows_in_iter and ob.OISR_OBJ_ID is null and f.fcy_cash_register_id is not null;   insert into obj_id_sys_role (OISR_OBJ_ID, OISR_TABLE, ID_SYS_ROLE_CODE, ID_SYS_CODE) select distinct f.fcy_cash_register_id, 'OPER_JOURNAL', SYS_ROLE_CODE, SYS_CODE from FCY_CASH_REGISTER_OPER f left join obj_id_sys_role ob on to_char(f.fcy_cash_register_id) = ob.OISR_OBJ_ID where rownum < rows_in_iter and ob.OISR_OBJ_ID is null and f.fcy_cash_register_id is not null;   if (cnt_av < rows_in_iter) then n:= n- cnt_av; select id_sys_code into SYS_CODE from id_sys where id_sys_code not like '99995' order by dbms_random.value; else n:= n - rows_in_iter; SYS_ROLE_CODE:=1; SYS_CODE:='99995'; end if; commit; end loop; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN rollback to start_transaction; SYS_ROLE_CODE:=2; select id_sys_code into SYS_CODE from id_sys where id_sys_code not like '99995' order by dbms_random.value; dbms_output.put_line('dups'); WHEN OTHERS THEN ROLLBACK; end;
PUBLIC_SERVICE_OJ_PAR create or replace procedure fill_public_service_oj_par(min_oj_id in number, cnt in number) is min_psop_id number; oj numbertype; psrp numbertype; j number; begin   select max(public_service_repmt_par_code) into min_psop_id from public_service_oj_par;   select r bulk collect into oj from ( select oper_journal_id r from oper_journal where oper_journal_id > min_oj_id and rownum < cnt )rndm;   select r bulk collect into psrp from ( select public_service_repmt_par_code r from public_service_repmt_par order by dbms_random.value )rndm;   j:= 1; for i in 1..oj.count loop   insert into public_service_oj_par(OPER_JOURNAL_ID, PUBLIC_SERVICE_REPMT_PAR_CODE, PUBLIC_SERVICE_OJ_PAR_SN, PSOP_VALUE, PSOP_MOMENT_ENUM, ID_SYS_CODE) values(oj(i), psrp(j), round(dbms_random.value(1,7)), dbms_random.string('x', 10),1, null);   j:=j+1; if j > psrp.count then j:= 1; end if; end loop;   end;
CLIENT create or replace procedure fill_client_tmp(num in number) is clients_cnt number; i number; dept number; type rowid_nt is table of rowid; rowids rowid_nt; begin --заполняем темповую таблицу клиентами и рандомными департаментами. Количество записей = количеству создаваемых аккаунтов. --берутся клиенты без аккаутов --delete from tmp_client;     insert into tmp_client (id, cl_id) select tsec.nextval, c.client_id from client c left join account a on c.client_id = a.client_id where a.client_id is null and rownum < i;   commit;   dbms_output.put_line('filled clliet_id');   select r bulk collect into rowids from ( select rowid r from tmp_client order by dbms_random.value ) rndm;   forall j in 1..rowids.count update tmp_client set d_id = (select dept_id from (select dept_id from dept order by dbms_random.value) t where rownum = 1) where rowid=rowids(j) and d_id is null; commit; dbms_output.put_line('updated dept_id'); forall j in 1..rowids.count update tmp_client set s_acc_id = (select SYNT_ACC_ID from (select SYNT_ACC_ID from synt_acc order by dbms_random.value) t where rownum = 1) where rowid=rowids(j) and s_acc_id is null;   dbms_output.put_line('updated s_acc_id');   commit; end fill_client_tmp;
PMT_DOC_EXT create or replace PROCEDURE fill_pmt_doc_ext(num in number) is minJoinedId number; max_pmt_doc_id number; begin   select max(pmt_doc_id) into max_pmt_doc_id from pmt_doc; select max(pd.pmt_doc_id) into minJoinedId from pmt_doc pd join pmt_doc_ext pde on pde.pmt_doc_id = pd.pmt_doc_id; --10294362 --11294569 insert into pmt_doc_ext (PMT_DOC_ID,ID_SYS_CODE,PDE_EXT_ID) select p.PMT_DOC_ID, ID_SYS_CODE, tmp_pde_doc_ext_id.nextval from pmt_doc p join pmt_doc_ext pde on p.PMT_DOC_ID- 4*(max_pmt_doc_id - minJoinedId)/3 = pde.pmt_doc_id where p.PMT_DOC_ID > minJoinedId and rownum < num;   end;     --create sequence tmp_pde_doc_ext_id increment by 960241436 minvalue 1 --select tmp_pde_doc_ext_id.nextval from dual --alter sequence tmp_pde_doc_ext_id increment by 1 minvalue 1
PMT_DOC create or replace procedure fill_pmt_doc(cnt in number) is tableSize number; r number; maxPmtId number; minPmtId number; rows_in_iter number; n number; mAcc number; m number; minPD number;   begin   select max(pmt_doc_id) into minPmtId from pmt_doc; rows_in_iter:= 100000; n:= cnt; minPD:=minPmtId; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n > 0) loop select max(pmt_doc_id) into maxPmtId from pmt_doc; m:= round(dbms_random.value(minPmtId,maxPmtId));     insert into pmt_doc(PMT_DOC_ID,DEBIT_ACCOUNT_ID,CREDIT_ACCOUNT_ID, CASH_OPERATION_SORT_CODE,PAR_PMT_DOC_ID,IDENTITY_CARD_ID, OPER_JOURNAL_ID,PMT_TYPE_CODE,PMT_SORT_CODE,PMT_ORDER_TYPE_CODE, PAYER_BIC, BEN_BIC, CREDIT_CASH_SYMBOL_CODE, DEBIT_CASH_SYMBOL_CODE, PRINT_TMPL_TYPE_ID, PAYER_STATUS_CODE, PMT_GROUND_TYPE_CODE, CURRENCY_ID, MARK_DOC_CODE, DEBIT_CURRENCY_ID, CREDIT_CURRENCY_ID, PD_ORD_COMP_ENUM, PD_SIGN_ENUM, PD_NUM, PD_CASH_OPERATION_NUMBER, PD_PRINT_QTY, PD_REG_DATE, PD_DATE, PD_VALUE_DATE, PD_PAYER_ACC_NUM, PD_PAYER_NAME, PD_PAYER_INN, PD_PAYER_KPP, PD_PAYER_BANK_ACC_NUM, PD_BEN_ACC_NUM, PD_BEN_NAME, PD_BEN_INN, PD_BEN_KPP, PD_BEN_BANK_ACC_NUM, PD_AMOUNT, PD_PMT_DETAILS, PD_CBC, PD_OKATO, PD_FISKAL_PERIOD, PD_FISKAL_DOC_NUM, PD_FISKAL_DOC_DATE_C, PD_DEBIT_AMOUNT, PD_CREDIT_AMOUNT, CURRENCY_OPER_SORT_CODE, PD_PAYER_RESIDENT_FLAG, PD_BEN_RESIDENT_FLAG, PD_EXT_ID, PD_NUM_S, PD_CASH_OPERATION_NUMBER_S, PD_CCY_EXCH_RATE, PD_PAYER_IDENTITY_CARD, PD_PRINCIPAL, PD_PRINCIPAL_IDENTITY_CARD, PD_POA, PD_PRINT_FLAG, PD_PRINT_CLIENT_INFO_FLAG, PD_CASH_RECEIPT_NUM, PD_CASH_DISBURSEMT_NUM, PD_BEN_IDENTITY_CARD, BENEFICIARY_ID, MAIN_OPER_JOURNAL_ID, PD_POA_EXP_DATE, PD_TAX_CHARGE_UID, PD_CB_CODE, DEBIT_DEPT_ID, CREDIT_DEPT_ID, DEBIT_ID_SYS_CODE, CREDIT_ID_SYS_CODE, DEBIT_SYNT_ACC_ID, CREDIT_SYNT_ACC_ID, PD_PAYER_ADDRESS, DEBIT_AGR_ID, CREDIT_AGR_ID, PD_BENEFICIARY_SURNAME, PD_BENEFICIARY_FIRST_NAME, PD_BENEFICIARY_PATRONYMIC)   select s_pmt_doc.nextval, DEBIT_ACCOUNT_ID,CREDIT_ACCOUNT_ID, CASH_OPERATION_SORT_CODE,PAR_PMT_DOC_ID,IDENTITY_CARD_ID, OPER_JOURNAL_ID,PMT_TYPE_CODE,PMT_SORT_CODE,PMT_ORDER_TYPE_CODE, PAYER_BIC, BEN_BIC, CREDIT_CASH_SYMBOL_CODE, DEBIT_CASH_SYMBOL_CODE, PRINT_TMPL_TYPE_ID, PAYER_STATUS_CODE, PMT_GROUND_TYPE_CODE, CURRENCY_ID, MARK_DOC_CODE, DEBIT_CURRENCY_ID, CREDIT_CURRENCY_ID, PD_ORD_COMP_ENUM, PD_SIGN_ENUM, PD_NUM, PD_CASH_OPERATION_NUMBER, PD_PRINT_QTY, trunc(sysdate - dbms_random.value(1,300)), '01.01.2010', '01.01.2010', PD_PAYER_ACC_NUM, PD_PAYER_NAME, PD_PAYER_INN, PD_PAYER_KPP, PD_PAYER_BANK_ACC_NUM, PD_BEN_ACC_NUM, PD_BEN_NAME, PD_BEN_INN, PD_BEN_KPP, PD_BEN_BANK_ACC_NUM, PD_AMOUNT, PD_PMT_DETAILS, PD_CBC, PD_OKATO, PD_FISKAL_PERIOD, PD_FISKAL_DOC_NUM, PD_FISKAL_DOC_DATE_C, PD_DEBIT_AMOUNT, PD_CREDIT_AMOUNT, CURRENCY_OPER_SORT_CODE, PD_PAYER_RESIDENT_FLAG, PD_BEN_RESIDENT_FLAG, PD_EXT_ID, PD_NUM_S, PD_CASH_OPERATION_NUMBER_S, PD_CCY_EXCH_RATE, PD_PAYER_IDENTITY_CARD, PD_PRINCIPAL, PD_PRINCIPAL_IDENTITY_CARD, PD_POA, PD_PRINT_FLAG, PD_PRINT_CLIENT_INFO_FLAG, PD_CASH_RECEIPT_NUM, PD_CASH_DISBURSEMT_NUM, PD_BEN_IDENTITY_CARD, BENEFICIARY_ID, MAIN_OPER_JOURNAL_ID, PD_POA_EXP_DATE, PD_TAX_CHARGE_UID, PD_CB_CODE, DEBIT_DEPT_ID, CREDIT_DEPT_ID, DEBIT_ID_SYS_CODE, CREDIT_ID_SYS_CODE, DEBIT_SYNT_ACC_ID, CREDIT_SYNT_ACC_ID, PD_PAYER_ADDRESS, DEBIT_AGR_ID, CREDIT_AGR_ID, PD_BENEFICIARY_SURNAME, PD_BENEFICIARY_FIRST_NAME, PD_BENEFICIARY_PATRONYMIC from pmt_doc s left join tmp t on s.PMT_DOC_ID = t.tmp_id where (pmt_doc_id between minPmtId and m) and rownum < rows_in_iter;   maxPmtId:= maxPmtId + rows_in_iter; if (m >= rows_in_iter) then n:= n - rows_in_iter; else n:= n - m; end if;   minPmtId:= minPmtId + rows_in_iter; if (n > 0 and (minPmtId + rows_in_iter) > maxPmtId) then minPmtId:= minPD; end if; commit; end loop;   update pmt_doc set PD_DATE = PD_REG_DATE where pmt_doc_id > maxPmtId; commit; update pmt_doc set PD_VALUE_DATE = PD_REG_DATE where pmt_doc_id > maxPmtId; commit;   end fill_pmt_doc;
PERSON, IDENTITY_CARD, ADDRESS create or replace procedure fill_persons(num in number) is addr VARCHAR2(20); pers_id number; curr_ident_type number; type_cnt integer; begin   select count(IDENTITY_CARD_TYPE_ID) into type_cnt from identity_card_type;     for cnt in 1..num loop addr:= concat(concat(dbms_random.string('x', 10), ', '),dbms_random.string('x', 5)); insert into ADDRESS (address_id, address_full) values(S_ADDRESS.nextval, addr);   pers_id:= s_person.nextval; insert into PERSON(person_id, person_reg_state_type_code, person_post_state_type_code, person_surname, person_first_name, person_patronymic, person_sex_enum, person_birth_date, person_reg_address, person_post_address, person_illiterate_flag, person_resident_flag, person_verified_flag, person_citizen_country_code, person_code_word, birth_country_code, person_refugee_flag, person_act_address) values(pers_id, 643, 643, dbms_random.string('x',7), dbms_random.string('x',7), dbms_random.string('x',8), 'M', '01.05.83', addr,addr,0,1,1,643,'МЕРКУРИЙ',643,0, addr);   select IDENTITY_CARD_TYPE_ID into curr_ident_type from (select IDENTITY_CARD_TYPE_ID from identity_card_type order by dbms_random.value) t where rownum = 1;   insert into identity_card(IDENTITY_CARD_ID, IDENTITY_CARD_TYPE_ID, PERSON_ID, COUNTRY_CODE,IC_SERIES,IC_NUM,IC_ISSUE_DATE,IC_ISSUE_AUTHORITY,IC_VALID_THRU_DATE, IC_ISSUE_AUTHORITY_CODE,IC_ISSUE_AUTHORITY_EN,IC_PRIMARY_FLAG,IC_DEL_FLAG) values (S_IDENTITY_CARD.nextval, curr_ident_type, pers_id, null, 4004, 189745, '12.12.12', 'ОВД', '31.12.29', '782-031', null, 1, 0);   end loop; end fill_persons;
FCY_CASH_REGISTER_OPER create or replace procedure FILL_FCY_CASH_REGISTER_OPER(cnt in number) is rows_in_iter number; n number; begin   rows_in_iter:= 100000;   n:= cnt; if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n >0) loop insert into fcy_cash_register_oper (PMT_DOC_ID, OPER_JOURNAL_ID, FCY_CASH_REGISTER_ID, FCRO_SN, FCRO_RATE, RECEIVED_CURRENCY_ID, FCRO_RECEIVED_AMOUNT, PAYOUT_CURRENCY_ID, FCRO_PAYOUT_AMOUNT, FCRO_USE_CARD_FLAG, FCRO_CHEQUE_QTY, CHEQUE_CURRENCY_ID, FCRO_CHEQUE_AMOUNT, ACCOUNT_ID, FCRO_DISPONENT_SORT_ENUM, FCY_IN_CASH_N_CHK_SORT_CODE, FCRO_ACCOUNT_NUM) select pd.pmt_doc_id, main_oper_journal_id, S_FCY_CASH_REGISTER.nextval, 5, 40.55, 130, round(dbms_random.value(1,200000)),126, null,1,null,null, null,null,null,'P15',null from pmt_doc pd left join fcy_cash_register_oper f on pd.pmt_doc_id= f.pmt_doc_id where rownum < rows_in_iter and f.pmt_doc_id is null;   n:= n - rows_in_iter; end loop;   end;
USER_SESSION create or replace function fill_user_session(cnt in number) return number is beginDate date; rows_in_iter number; max_us_id number; min_us_id number; n number; begin   beginDate:= sysdate - dbms_random.value(1,250); dbms_output.put_line(beginDate);   n:= cnt;   rows_in_iter:= 10000; if (cnt <= 0) then n:=1; rows_in_iter:= 1; else if (cnt - rows_in_iter) < 0 then rows_in_iter:= cnt; else rows_in_iter:= 10000; end if; end if;   select max(user_session_id) into max_us_id from user_session; select max(user_session_id) into min_us_id from user_session;   while (n > 0) loop beginDate:= sysdate - dbms_random.value(1,250); insert into user_session (user_session_id, us_begin_time, us_end_time, us_status_enum, us_operday_date, dept_id, computer_id, user_id, us_ip, us_user_agent, us_server_name, us_http_session_id, real_user_id) select s_user_session.nextval, beginDate, beginDate, us_status_enum, null, dept_id, computer_id,user_id, us_ip, us_user_agent, us_server_name, us_http_session_id, real_user_id from user_session where user_session_id > min_us_id and rownum <= rows_in_iter;   commit; min_us_id:= min_us_id + rows_in_iter; n:= n - rows_in_iter; end loop;   return max_us_id; end fill_user_session;
VALUABLE_BALANCE create or replace   procedure fill_val_balance(cnt in number)   is   cntToInsert number;   currReg number;   nextId number;   currBal number;   accountId number;   vSortId number;   deptID number;   tdate date;   begin   select count(*) into currReg from valuable_register;   select count(*) into currBal from valuable_balance;   cntToInsert:= cnt * currReg / currBal;   if (cntToInsert < 1) then cntToInsert:= 1;   end if;   for i in 1..cntToInsert   loop   select account_id into accountId from account sample (0.1) where rownum < 2 order by dbms_random.value;   select dept_id into deptID from dept sample (10) where rownum < 2 order by dbms_random.value;   select vs.valuable_sort_id into vSortId from valuable_sort vs left join valuable_register vr on vs.valuable_sort_id = vr.valuable_sort_id   where (vr.valuable_sort_id is null or dept_id is null) and rownum < 2 order by dbms_random.value;   select s_valuable_register.nextval into nextId from dual;   --valuable register;   insert into valuable_register(VALUABLE_REGISTER_ID, DEPT_ID, VALUABLE_SORT_ID, ACCOUNT_ID)   values (nextId, deptID, vsortid, accountid);   commit;   --valueable_balance   for i in 1..round(currBal/currReg)   loop   tDate:= sysdate - i;   insert into valuable_balance(VALUABLE_REGISTER_ID, VB_DATE, VB_QUANTITY,   VB_BALANCE, VB_RESERVED_BALANCE, VB_RESERVED_QTY)   values(nextId, trunc(tDate), round(dbms_random.value(0,100)),   round(dbms_random.value(1,100000)), 0, 0);   commit;   end loop;   end loop;   end;
POS_REGISTER_OPER create or replace procedure FILL_POS_REGISTER_OPER(cnt in number) is rows_in_iter number; n number; min_oj_id number; max_oj_id number; init_min_oj_id number; begin   rows_in_iter:= 300000; n:= cnt;   select min(oj.oper_journal_id)into min_oj_id from FCY_CASH_REGISTER_OPER oj left join pos_register_oper p on oj.oper_journal_id = p.oper_journal_id where oj.oper_journal_id > 1000000 and p.oper_journal_id is null;   select max(oper_journal_id) into max_oj_id from FCY_CASH_REGISTER_OPER; init_min_oj_id:= min_oj_id;   if (n - rows_in_iter < 0) then rows_in_iter:= n; end if;   while (n >0) loop   insert into pos_register_oper (OPER_JOURNAL_ID, PRO_CARD_OPER_TYPE_ENUM, POS_OPER_REGISTER_ID, PRO_SN, PRO_CARD_NUM, PRO_AUTH_CODE, PRO_TERMINAL_CODE, PRO_REF_CODE, PRO_RESPONSE_CODE, PRO_SALES_SLIP_NUM, PRO_BATCH_NUM, PRO_RRN, PRO_EXP_DATE, PRO_OWN_CARD_FLAG, PRO_ACCOUNT_NUM, PRO_PARAM1, PRO_PARAM2, PRO_PARAM3, CARD_DEPT_ID, PRO_MULTI_CURRENCY_FLAG) select distinct oj.oper_journal_id, ceil(dbms_random.value(1,2)), 1199, ceil(dbms_random.value(1,5)), ceil(dbms_random.value(4272000000009795,4272999999999795)), '509216','55535101','000321','256', '787878787',0,'310901464561','30.09.17',1,'40702810500000101768', '266995',null,null,null, 0 from FCY_CASH_REGISTER_OPER oj left join pos_register_oper p on oj.oper_journal_id = p.oper_journal_id where rownum < rows_in_iter and oj.OPER_JOURNAL_ID between min_oj_id and max_oj_id and p.oper_journal_id is null;   n:= n - rows_in_iter;   min_oj_id:= min_oj_id + rows_in_iter; if (min_oj_id >= max_oj_id) then min_oj_id:= init_min_oj_id; end if; commit;   end loop;   end;
LIM_REC_POSTING create or replace procedure fill_lim_rec_posting(min_lim_rec_id in number, min_oper_id in number, cnt in number) is n number; rows_in_iter number; m_LR_Id number; min_lrp_id number; type rowid_nt is table of rowid; lrp rowid_nt; oj numbertype; begin   n:=cnt; rows_in_iter:= 100000; m_LR_Id:= min_lim_rec_id;   select max(LIM_REC_POSTING_ID) into min_lrp_id from LIM_REC_POSTING; while (n > 0) loop   insert into lim_rec_posting(LIM_REC_POSTING_ID, LIM_REC_ID, LRP_ACTION_TIME, LRP_AMOUNT, OPER_JOURNAL_ID) select s_lim_rec_posting.nextval, lim_rec_id, trunc(sysdate-dbms_random.value(1,200)),1, null from lim_rec where lim_rec_id > m_LR_Id and rownum <= rows_in_iter; m_LR_Id:= m_LR_Id + rows_in_iter; n:= n - rows_in_iter; commit; end loop;   select r bulk collect into lrp from ( select rowid r from lim_rec_posting where LIM_REC_POSTING_ID > min_lim_rec_id ) rndm; select r bulk collect into oj from ( select oper_journal_id r from oper_journal where oper_journal_id > min_oper_id and rownum < (select max(LIM_REC_POSTING_ID) - min_lrp_id from LIM_REC_POSTING) )rndm;   forall j in 1..lrp.count update lim_rec_posting set oper_journal_id = oj(j) where rowid = lrp(j); commit; end;
LIM_REC create or replace function fill_lim_rec(minaccId in number, cnt in number) return number is min_limrec_id number; n number; iter number; rows_in_iter number; mAccId number; maxAccId number; begin   select max(lim_rec_id) into min_limrec_id from lim_rec; select max(account_id) into maxAccId from account; n:=cnt; mAccId:= minaccId; rows_in_iter:= 100000; if (cnt - rows_in_iter) < 0 then rows_in_iter:= cnt; else rows_in_iter:= 100000; end if;   while (n > 0) loop   insert into lim_rec(LIM_REC_ID,LIM_ID,LR_START_TIME, LR_CATEGORY_ENUM,LR_OBJ_ID) select s_lim_rec.nextval, 2, trunc(sysdate-dbms_random.value(1,200)),1, account_id from account where account_id > mAccId and rownum <= rows_in_iter; mAccId:= mAccId + rows_in_iter; if (mAccId >= maxAccId) then mAccId:=minaccId; end if; n:=n-rows_in_iter; commit; end loop;   update lim_rec set lr_next_time = lr_start_time where lim_rec_id > min_limrec_id; commit;   return min_limrec_id; end fill_lim_rec;
ACCOUNT create or replace   function fill_account(num in number) return number   is   i number;   cnt number;   mId number;   begin   select count(id) into cnt from tmp_client;   i:=num;   mId:= s_account.nextval;   loop   insert into account (ACCOUNT_ID, DEPT_ID,   CURRENCY_ID, CLIENT_ID, SYNT_ACC_ID,   ACCOUNT_NUM, ACCOUNT_REG_DATE, ACCOUNT_STATUS_ENUM,   ACCOUNT_NAME, EXECUTIVE_USER_ID)   select s_account.nextval, t.d_id, 126, t.cl_id, t.s_acc_id, round(dbms_random.value(40700000000000000000,40799999999999999999)),   '16.04.09',0,'ÚÂÍÛ˘ËÈ Ò˜ÂÚ',null   from tmp_client t where rownum <= i;   if (i = 0) then i:=-1;   else i:= i - cnt;   end if;   commit;   exit when i <= 0;   end loop;   return (mId + 1);   end fill_account;    
BALANCE reate or replace procedure fill_balance(num in number)   is   cnt number;   bDate date;   begin   if num = -1   then   select count(a.account_id) into cnt from account a left join balance b on a.account_id = b.account_id   where b.account_id is null;   else   cnt:= num;   end if;   insert into balance(ACCOUNT_ID,BALANCE_DATE,   BALANCE_VALUE, BALANCE_VALUE_DATED, BALANCE_DEBIT, BALANCE_CREDIT)   select a.account_id,trunc(sysdate - dbms_random.value(1,250)),1000000,1000000,0,1000000   from account a left join balance b on a.account_id = b.account_id   where b.account_id is null and rownum <= cnt;   end fill_balance;

 

Планируемые тесты


Поделиться с друзьями:

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.016 с.