-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimport_span.sql
577 lines (533 loc) · 21.6 KB
/
import_span.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
/* Import pliku KDPW do Kalkulatora SPAN
* Written by Karol Przybylski 2014-11-10
* Visit http://www.esm-technology.pl or http://github.com/itorK
*/
SET GLOBAL log_bin_trust_function_creators = 1;
delimiter //
DROP FUNCTION IF EXISTS fnImportujSpready//
CREATE FUNCTION fnImportujSpready()
RETURNS int
begin
DECLARE v_ilosc_klas,v_ilosc_nog,v_ilosc_spreadow,v_i,v_s,v_n,v_poziom,v_priorytet,v_ilosc_zewn,v_id,v_klas_id,v_ilosc_poziomow,v_poziom_klasy,v_lpz INT DEFAULT 0;
DECLARE v_klasa,v_strona,v_som,v_pocz,v_kon VARCHAR(255);
DECLARE v_typ_spreadu VARCHAR(5);
DECLARE v_delta FLOAT(20,6) DEFAULT 0;
DECLARE v_depozyt DECIMAL(15,4) DEFAULT 0;
select extractvalue(col1,'count(//ccDef)') INTO v_ilosc_klas FROM b;
l_klasy: LOOP
SET v_i = v_i + 1;
IF v_i <= v_ilosc_klas THEN
SET v_ilosc_spreadow = 0;
SET v_s = 0;
select extractvalue(col1,CONCAT('count(//ccDef[',v_i,']//dSpread)')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//somTiers//tier//rate//val')),
extractvalue(col1,CONCAT('count(//ccDef[',v_i,']//intraTiers//tier)'))
INTO v_ilosc_spreadow,v_som,v_ilosc_poziomow FROM b;
l_spready: LOOP
SET v_s = v_s + 1;
IF v_s <= v_ilosc_spreadow THEN
SET v_n = 0;
SET v_ilosc_nog = 0;
select extractvalue(col1,CONCAT('count(//ccDef[',v_i,']//dSpread[',v_s,']//tLeg//cc)')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//chargeMeth')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//spread')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//rate//val'))
INTO v_ilosc_nog,v_typ_spreadu,v_priorytet,v_depozyt FROM b;
INSERT INTO span_klasy_spready (spks_typ,spks_priorytet,spks_depozyt) values (v_typ_spreadu,v_priorytet,v_depozyt);
SET v_id = LAST_INSERT_ID();
l_nogi: LOOP
SET v_n = v_n + 1;
SET v_lpz = 0;
IF v_n <= v_ilosc_nog THEN
select extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//tLeg[',v_n,']//cc')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//tLeg[',v_n,']//tn')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//tLeg[',v_n,']//rs')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//dSpread[',v_s,']//tLeg[',v_n,']//i'))
INTO v_klasa,v_poziom,v_strona,v_delta FROM b;
IF LENGTH(v_som) > 0 AND v_som is not null THEN
update klasy set klas_som = cast(v_som as decimal(15,4)) WHERE klas_nazwa = v_klasa;
END IF;
SELECT klas_id INTO v_klas_id FROM klasy WHERE klas_nazwa = v_klasa;
INSERT INTO spready_nogi(spn_spks_id , spn_klas_id, spn_nr_poziomu,spn_strona,spn_liczba_delt)
VALUES (v_id,v_klas_id, v_poziom, v_strona,v_delta);
l_poziomy: LOOP
SET v_lpz = v_lpz + 1;
IF v_lpz <= v_ilosc_poziomow THEN
select extractvalue(col1,CONCAT('//ccDef[',v_i,']//intraTiers//tier[',v_lpz,']//sPe')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//intraTiers//tier[',v_lpz,']//ePe')),
extractvalue(col1,CONCAT('//ccDef[',v_i,']//intraTiers//tier[',v_lpz,']//tn'))
INTO v_pocz,v_kon,v_poziom_klasy FROM b;
UPDATE span_papiery SET sppa_nr_poziomu=v_poziom_klasy WHERE STR_TO_DATE(sppa_data_wygas,'%Y%m') BETWEEN
STR_TO_DATE(v_pocz,'%Y%m') AND STR_TO_DATE(v_kon,'%Y%m') AND sppa_klas_id=v_klas_id;
ITERATE l_poziomy;
ELSE
LEAVE l_poziomy;
END IF;
END LOOP l_poziomy;
ITERATE l_nogi;
ELSE
LEAVE l_nogi;
END IF;
END LOOP l_nogi;
ITERATE l_spready;
ELSE
LEAVE l_spready;
END IF;
END LOOP l_spready;
ITERATE l_klasy;
ELSE
LEAVE l_klasy;
END IF;
END LOOP l_klasy;
select extractvalue(col1,'count(//interSpreads//dSpread)') INTO v_ilosc_zewn FROM b;
SET v_i = 0;
l_zewn: LOOP
SET v_i = v_i + 1;
SET v_ilosc_nog = 0;
IF v_i <= v_ilosc_zewn THEN
SELECT
extractvalue(col1,CONCAT('count(//interSpreads//dSpread[',v_i,']//tLeg//cc)')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//chargeMeth')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//spread')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//rate//val'))
INTO v_ilosc_nog,v_typ_spreadu,v_priorytet,v_depozyt
FROM b;
INSERT INTO span_klasy_spready (spks_typ,spks_priorytet,spks_depozyt) values (v_typ_spreadu,v_priorytet,v_depozyt);
SET v_id = LAST_INSERT_ID();
SET v_n = 0;
l_nogi_zew: LOOP
SET v_n = v_n + 1;
IF v_n <= v_ilosc_nog THEN
SET v_klasa = NULL;
SET v_klas_id = 0;
select extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//tLeg[',v_n,']//cc')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//tLeg[',v_n,']//tn')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//tLeg[',v_n,']//rs')),
extractvalue(col1,CONCAT('//interSpreads//dSpread[',v_i,']//tLeg[',v_n,']//i'))
INTO v_klasa,v_poziom,v_strona,v_delta FROM b;
SELECT klas_id INTO v_klas_id FROM klasy WHERE klas_nazwa = v_klasa;
IF v_klas_id = 0 THEN
INSERT INTO klasy (klas_nazwa) values (v_klasa);
END IF;
INSERT INTO spready_nogi(spn_spks_id , spn_klas_id, spn_nr_poziomu,spn_strona,spn_liczba_delt)
VALUES (v_id,v_klas_id, v_poziom, v_strona,v_delta);
ITERATE l_nogi_zew;
ELSE
LEAVE l_nogi_zew;
END IF;
END LOOP l_nogi_zew;
ITERATE l_zewn;
ELSE
LEAVE l_zewn;
END IF;
END LOOP l_zewn;
RETURN 1;
end;
//
DROP FUNCTION IF EXISTS fnImportujKontrakty//
CREATE FUNCTION fnImportujKontrakty()
RETURNS int
begin
DECLARE v_ilosc_walorow,v_i,v_s,v_n,v_serie,v_poziom,v_klas_id,v_spid,v_ilosc_scen INT DEFAULT 0;
DECLARE v_kod_span,v_kod_klasy,v_waluta,v_data_wyg,v_sppa_nazwa,v_end,v_kod_klasy_tmp VARCHAR(255);
DECLARE v_mnoznik,v_kurs_instr,v_cena_instr,v_scen DECIMAL(15,4) DEFAULT 0;
DECLARE v_wsp_skal,v_stopa_proc,v_psr,v_ryz_zmien,v_ryz_ceny,v_czas_do_wygas,v_delta_ref FLOAT(20,4) DEFAULT 0;
DECLARE v_typ_papieru VARCHAR(5);
select extractvalue(col1,'count(//futPf)') INTO v_ilosc_walorow FROM b;
l_walory: LOOP
SET v_i = v_i + 1;
IF v_i <= v_ilosc_walorow THEN
SET v_s = 0;
select extractvalue(col1,CONCAT('count(//futPf[',v_i,']/fut)')),
extractvalue(col1,CONCAT('//futPf[',v_i,']/undPf/pfCode')),
extractvalue(col1,CONCAT('//futPf[',v_i,']/pfCode')),
extractvalue(col1,CONCAT('//futPf[',v_i,']/currency')),
extractvalue(col1,CONCAT('//futPf[',v_i,']/cvf')),
extractvalue(col1,CONCAT('//futPf[',v_i,']/valueMeth'))
INTO v_serie,v_kod_span,v_kod_klasy,v_waluta,v_mnoznik, v_typ_papieru FROM b;
INSERT IGNORE INTO klasy (klas_nazwa,klas_nazwa_span) values (v_kod_span,v_kod_klasy);
SELECT klas_id INTO v_klas_id FROM klasy WHERE klas_nazwa = v_kod_span;
l_serie: LOOP
SET v_n = 0;
SET v_s = v_s + 1;
IF v_s <= v_serie THEN
select extractvalue(col1,CONCAT('count(//futPf[',v_i,']//fut[',v_s,']//ra//a)')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/pe')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/p')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/val')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/sc')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/intrRate/val')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/scanRate/priceScanPct')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/scanRate/volScan')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/scanRate/priceScan')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/t')),
extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']/ra/d')),
99
INTO v_ilosc_scen,v_data_wyg,v_kurs_instr,v_cena_instr,v_wsp_skal,v_stopa_proc,v_psr,v_ryz_zmien,v_ryz_ceny,
v_czas_do_wygas,v_delta_ref,v_poziom
FROM b;
SET v_end = '';
SET v_kod_klasy_tmp = v_kod_klasy;
IF substr(v_kod_klasy,4,2) = '0B' THEN
SET v_kod_klasy_tmp = substr(v_kod_klasy,1,length(v_kod_klasy)-1);
SET v_end = '20';
END IF;
SET v_sppa_nazwa = CONCAT( v_kod_klasy_tmp,(CASE substr(v_data_wyg,5,2)
WHEN '01' THEN 'F'
WHEN '02' THEN 'G'
WHEN '03' THEN 'H'
WHEN '04' THEN 'J'
WHEN '05' THEN 'K'
WHEN '06' THEN 'M'
WHEN '07' THEN 'N'
WHEN '08' THEN 'Q'
WHEN '09' THEN 'U'
WHEN '10' THEN 'V'
WHEN '11' THEN 'X'
WHEN '12' THEN 'Z'
END),substr(v_data_wyg,3,2),v_end);
INSERT INTO span_papiery (sppa_nazwa,sppa_klas_id,sppa_data_wygas,sppa_kurs_wyk,sppa_typ_papieru,sppa_czas_do_wygas,sppa_psr,
sppa_vsr,sppa_mnoznik,sppa_delta,sppa_stopa_proc,sppa_wsp_skal_delty,sppa_nr_poziomu,sppa_cena_instr)
values (v_sppa_nazwa,v_klas_id,v_data_wyg,v_kurs_instr,v_typ_papieru,v_czas_do_wygas,v_psr,v_ryz_zmien,v_mnoznik,v_delta_ref,
v_stopa_proc, v_wsp_skal,v_poziom,v_cena_instr);
SET v_spid = LAST_INSERT_ID();
l_scen: LOOP
SET v_n = v_n + 1;
IF v_n <= v_ilosc_scen THEN
select extractvalue(col1,CONCAT('//futPf[',v_i,']//fut[',v_s,']//ra//a[',v_n,']'))
INTO v_scen FROM b;
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen,v_n,v_spid);
ITERATE l_scen;
ELSE
LEAVE l_scen;
END IF;
END LOOP l_scen;
ITERATE l_serie;
ELSE
LEAVE l_serie;
END IF;
END LOOP l_serie;
ITERATE l_walory;
ELSE
LEAVE l_walory;
END IF;
END LOOP l_walory;
RETURN 1;
end;
//
DROP PROCEDURE IF EXISTS prDodajPapier//
CREATE PROCEDURE prDodajPapier(
v_sppa_nazwa VARCHAR(100),
v_nazwa_klasy VARCHAR(100),
v_data_wyg VARCHAR(100),
v_kurs_instr DECIMAL(15,4),
v_typ_papieru VARCHAR(100),
v_czas_do_wygas DECIMAL,
v_psr DECIMAL(15,4),
v_ryz_zmien DECIMAL(15,4),
v_mnoznik DECIMAL(15,4),
v_delta_ref DECIMAL(15,4),
v_stopa_proc DECIMAL(15,4),
v_wsp_skal DECIMAL(15,4),
v_cena_instr DECIMAL(15,4),
v_scen1 DECIMAL(15,4),
v_scen2 DECIMAL(15,4),
v_scen3 DECIMAL(15,4),
v_scen4 DECIMAL(15,4),
v_scen5 DECIMAL(15,4),
v_scen6 DECIMAL(15,4),
v_scen7 DECIMAL(15,4),
v_scen8 DECIMAL(15,4),
v_scen9 DECIMAL(15,4),
v_scen10 DECIMAL(15,4),
v_scen11 DECIMAL(15,4),
v_scen12 DECIMAL(15,4),
v_scen13 DECIMAL(15,4),
v_scen14 DECIMAL(15,4),
v_scen15 DECIMAL(15,4),
v_scen16 DECIMAL(15,4),
v_kod_span VARCHAR(100))
begin
DECLARE v_ret INT DEFAULT 0;
call prDodajPapierO( v_sppa_nazwa,
v_nazwa_klasy,
v_data_wyg,
v_kurs_instr,
v_typ_papieru,
v_czas_do_wygas,
v_psr,
v_ryz_zmien,
v_mnoznik,
v_delta_ref,
v_stopa_proc,
v_wsp_skal,
v_cena_instr,
v_scen1,
v_scen2,
v_scen3,
v_scen4,
v_scen5,
v_scen6,
v_scen7,
v_scen8,
v_scen9,
v_scen10,
v_scen11,
v_scen12,
v_scen13,
v_scen14,
v_scen15,
v_scen16,
v_kod_span,
null,
null,
null,
null,
null,
null);
END;
//
DROP PROCEDURE IF EXISTS prDodajPapierO//
CREATE PROCEDURE prDodajPapierO( v_sppa_nazwa VARCHAR(100),
v_nazwa_klasy VARCHAR(100),
v_data_wyg VARCHAR(100),
v_kurs_instr DECIMAL,
v_typ_papieru VARCHAR(100),
v_czas_do_wygas DECIMAL(15,4),
v_psr DECIMAL(15,4),
v_ryz_zmien DECIMAL(15,4),
v_mnoznik DECIMAL(15,4),
v_delta_ref DECIMAL(15,4),
v_stopa_proc DECIMAL(15,4),
v_wsp_skal DECIMAL(15,4),
v_cena_instr DECIMAL(15,4),
v_scen1 DECIMAL(15,4),
v_scen2 DECIMAL(15,4),
v_scen3 DECIMAL(15,4),
v_scen4 DECIMAL(15,4),
v_scen5 DECIMAL(15,4),
v_scen6 DECIMAL(15,4),
v_scen7 DECIMAL(15,4),
v_scen8 DECIMAL(15,4),
v_scen9 DECIMAL(15,4),
v_scen10 DECIMAL(15,4),
v_scen11 DECIMAL(15,4),
v_scen12 DECIMAL(15,4),
v_scen13 DECIMAL(15,4),
v_scen14 DECIMAL(15,4),
v_scen15 DECIMAL(15,4),
v_scen16 DECIMAL(15,4),
v_kod_span VARCHAR(100),
v_zmien_op_wygasl DECIMAL(15,4),
v_stopa_dyw DECIMAL(15,4),
v_kurs_wyk DECIMAL(15,4),
v_rodzaj_opcji VARCHAR(100),
v_zmien_op DECIMAL(15,4),
v_cena_baz DECIMAL(15,4))
begin
DECLARE v_klas_id INT DEFAULT 0;
DECLARE v_spid INT DEFAULT 0;
INSERT IGNORE INTO klasy(klas_nazwa,klas_som,klas_nazwa_span) values ( v_nazwa_klasy, 0, v_kod_span);
SELECT klas_id into v_klas_id FROM klasy WHERE klas_nazwa_span = v_kod_span limit 1;
INSERT INTO span_papiery (sppa_nazwa,sppa_klas_id,sppa_data_wygas,sppa_kurs_wyk,sppa_typ_papieru,sppa_czas_do_wygas,sppa_psr,
sppa_vsr,sppa_mnoznik,sppa_delta,sppa_stopa_proc,sppa_wsp_skal_delty,sppa_cena_instr,sppa_nr_poziomu)
values (v_sppa_nazwa,v_klas_id,v_data_wyg,v_kurs_instr,v_typ_papieru,v_czas_do_wygas,v_psr,v_ryz_zmien,v_mnoznik,v_delta_ref,
v_stopa_proc, v_wsp_skal,v_cena_instr,99);
SET v_spid = LAST_INSERT_ID();
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen1,1,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen2,2,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen3,3,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen4,4,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen5,5,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen6,6,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen7,7,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen8,8,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen9,9,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen10,10,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen11,11,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen12,12,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen13,13,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen14,14,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen15,15,v_spid);
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen16,16,v_spid);
end;
//
DROP PROCEDURE IF EXISTS prDodajSpread//
CREATE PROCEDURE prDodajSpread(
p_spks_typ VARCHAR(255),
p_spks_depozyt DECIMAL(10,4),
p_spks_priorytet INT,
p_nazwa_klasy VARCHAR(255),
p_spn_nr_poziomu INT,
p_spn_strona VARCHAR(255),
p_spn_liczba_delt DECIMAL(10,4))
begin
DECLARE v_klas_id INT DEFAULT 0;
DECLARE v_spks_id INT DEFAULT 0;
INSERT IGNORE INTO klasy(klas_nazwa,klas_som,klas_nazwa_span) values ( p_nazwa_klasy, 0, p_nazwa_klasy);
SELECT klas_id into v_klas_id FROM klasy WHERE klas_nazwa_span = p_nazwa_klasy limit 1;
INSERT IGNORE INTO span_klasy_spready (spks_typ,spks_depozyt,spks_priorytet )
VALUES (p_spks_typ, p_spks_depozyt,p_spks_priorytet);
SELECT spks_id INTO v_spks_id FROM span_klasy_spready WHERE
spks_typ=p_spks_typ and spks_depozyt=p_spks_depozyt and spks_priorytet=p_spks_priorytet limit 1;
INSERT INTO spready_nogi(spn_spks_id , spn_klas_id, spn_nr_poziomu,spn_strona,spn_liczba_delt)
VALUES ( v_spks_id, v_klas_id,p_spn_nr_poziomu, p_spn_strona, p_spn_liczba_delt);
end;
//
DROP FUNCTION IF EXISTS fnImportujOpcje//
CREATE FUNCTION fnImportujOpcje()
RETURNS int
begin
DECLARE v_ilosc_walorow,v_i,v_s,v_n,v_serie,v_sc,v_poziom,v_klas_id,v_spid,v_ilosc_scen,v_ilosc_opcji, v_pId, v_cId INT DEFAULT 0;
DECLARE v_kod_span,v_kod_klasy,v_waluta,v_data_wyg,v_sppa_nazwa,v_end,v_kod_klasy_tmp,v_rodzaj_opcji VARCHAR(255);
DECLARE v_mnoznik,v_kurs_instr,v_cena_instr,v_scen,v_kurs_wyk,v_stopa_dyw,v_cena_baz DECIMAL(15,6) DEFAULT 0;
DECLARE v_wsp_skal,v_stopa_proc,v_psr,v_ryz_zmien,v_ryz_ceny,v_czas_do_wygas,v_delta_ref FLOAT(20,6) DEFAULT 0;
DECLARE v_zmien_op,v_zmien_op_wygasl FLOAT(20,6);
DECLARE v_typ_papieru, v_baz_nazwa VARCHAR(5);
select extractvalue(col1,'count(//oopPf)') INTO v_ilosc_walorow FROM b;
l_walory: LOOP
SET v_i = v_i + 1;
IF v_i <= v_ilosc_walorow THEN
SET v_s = 0;
select extractvalue(col1,CONCAT('count(//oopPf[',v_i,']/series)')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']/undPf/pfCode')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']/pfCode')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']/currency')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']/cvf')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']/valueMeth'))
INTO v_serie,v_kod_span,v_kod_klasy,v_waluta,v_mnoznik, v_typ_papieru FROM b;
INSERT IGNORE INTO klasy (klas_nazwa,klas_nazwa_span) values (v_kod_span,v_kod_klasy);
SELECT klas_id INTO v_klas_id FROM klasy WHERE klas_nazwa = v_kod_span;
l_serie: LOOP
SET v_n = 0;
SET v_s = v_s + 1;
IF v_s <= v_serie THEN
select extractvalue(col1,CONCAT('count(//oopPf[',v_i,']//series[',v_s,']//opt)')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/pe')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/sc')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/intrRate/val')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/scanRate/priceScanPct')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/scanRate/volScan')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/scanRate/priceScan')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/t')) - 0.01,
99,
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/v')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/divRate/val')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/undC/exch')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/undC/pfId')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']/undC/cId'))
INTO v_ilosc_opcji,v_data_wyg,v_wsp_skal,v_stopa_proc,v_psr,v_ryz_zmien,v_ryz_ceny,
v_czas_do_wygas,v_poziom, v_zmien_op_wygasl, v_stopa_dyw, v_baz_nazwa, v_pId, v_cId
FROM b;
l_opt: LOOP
SET v_sc = 0;
SET v_n = v_n + 1;
IF v_n <= v_ilosc_opcji THEN
select extractvalue(col1,CONCAT('count(//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']//ra//a)')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']/k')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']/o')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']/p')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']/val')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']/v')),
extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']//ra//d')),
extractvalue(col1,CONCAT('//exchange[exch/text()="',v_baz_nazwa,'"]//phyPf[pfId/text()=',v_pId,']/phy[cId/text()=',v_cId,']/val'))
INTO v_ilosc_scen,v_kurs_wyk,v_rodzaj_opcji,v_kurs_instr,v_cena_instr,v_zmien_op,v_delta_ref,v_cena_baz
FROM b;
SET v_end = CAST(v_kurs_wyk as int);
SET v_kod_klasy_tmp = v_kod_klasy;
IF v_rodzaj_opcji = 'C' THEN
SET v_sppa_nazwa = CONCAT( v_kod_klasy_tmp,(CASE substr(v_data_wyg,5,2)
WHEN '01' THEN 'A'
WHEN '02' THEN 'B'
WHEN '03' THEN 'C'
WHEN '04' THEN 'D'
WHEN '05' THEN 'E'
WHEN '06' THEN 'F'
WHEN '07' THEN 'G'
WHEN '08' THEN 'H'
WHEN '09' THEN 'I'
WHEN '10' THEN 'J'
WHEN '11' THEN 'K'
WHEN '12' THEN 'L'
END),substr(v_data_wyg,3,2),v_end);
ELSE
SET v_sppa_nazwa = CONCAT( v_kod_klasy_tmp,(CASE substr(v_data_wyg,5,2)
WHEN '01' THEN 'M'
WHEN '02' THEN 'N'
WHEN '03' THEN 'O'
WHEN '04' THEN 'P'
WHEN '05' THEN 'Q'
WHEN '06' THEN 'R'
WHEN '07' THEN 'S'
WHEN '08' THEN 'T'
WHEN '09' THEN 'U'
WHEN '10' THEN 'V'
WHEN '11' THEN 'W'
WHEN '12' THEN 'X'
END),substr(v_data_wyg,3,2),v_end);
END IF;
IF v_kod_klasy_tmp = 'MW20' THEN
SET v_sppa_nazwa = v_kod_klasy_tmp;
END IF;
INSERT INTO span_papiery (sppa_nazwa,sppa_rodzaj_opcji,sppa_klas_id,sppa_data_wygas,sppa_kurs_wyk,sppa_typ_papieru,sppa_czas_do_wygas,sppa_psr,
sppa_vsr,sppa_mnoznik,sppa_delta,sppa_stopa_proc,sppa_wsp_skal_delty,sppa_nr_poziomu,sppa_cena_instr,
sppa_zmien_op, sppa_zmien_op_wygasl, sppa_stopa_dyw,sppa_cena_instr_baz)
values (v_sppa_nazwa,v_rodzaj_opcji,v_klas_id,v_data_wyg,v_kurs_wyk,v_typ_papieru,v_czas_do_wygas,v_psr,v_ryz_zmien,v_mnoznik,v_delta_ref,
v_stopa_proc, v_wsp_skal,v_poziom,v_kurs_instr,v_zmien_op, v_zmien_op_wygasl, v_stopa_dyw, v_cena_baz);
SET v_spid = LAST_INSERT_ID();
l_scen: LOOP
SET v_sc = v_sc + 1;
IF v_sc <= v_ilosc_scen THEN
select extractvalue(col1,CONCAT('//oopPf[',v_i,']//series[',v_s,']//opt[',v_n,']//ra//a[',v_sc,']'))
INTO v_scen FROM b;
INSERT INTO depozyty_jedn (dep_wartosc,dep_numer,dep_sppa_id) values (v_scen,v_sc,v_spid);
ITERATE l_scen;
ELSE
LEAVE l_scen;
END IF;
END LOOP l_scen;
ITERATE l_opt;
ELSE
LEAVE l_opt;
END IF;
END LOOP l_opt;
ITERATE l_serie;
ELSE
LEAVE l_serie;
END IF;
END LOOP l_serie;
ITERATE l_walory;
ELSE
LEAVE l_walory;
END IF;
END LOOP l_walory;
RETURN 1;
end;
//
DROP PROCEDURE IF EXISTS prImportuj//
CREATE PROCEDURE prImportuj()
begin
DECLARE v_ret INT;
START TRANSACTION;
truncate table span_klasy_spready;
truncate table spready_nogi;
truncate table klasy;
truncate table span_papiery;
truncate table depozyty_jedn;
select fnImportujKontrakty() INTO v_ret;
select fnImportujOpcje() INTO v_ret;
select fnImportujSpready() INTO v_ret;
commit;
end;
//
DROP PROCEDURE IF EXISTS prCzyscImp//
CREATE PROCEDURE prCzyscImp()
begin
truncate table span_klasy_spready;
truncate table spready_nogi;
truncate table klasy;
truncate table span_papiery;
truncate table depozyty_jedn;
end;
//
delimiter ;