· 8 years ago · Aug 14, 2018, 09:14 AM
1CREATE OR REPLACE PACKAGE BODY Z_PKG_XTEL_IMPORT IS
2 /*
3 CCavicchi 14/06/2016
4 Le referenze cliente vanno inserite solo in T067
5 Rovagnati ci passa da un vassoio JDE la tripla DM - CODART - CODARTCUST.
6 Noi alimentiamo la XIN_ZT068DECODCUST e da qui dobbiamo riportare la referenza nella T067 a livello di CF
7 */
8
9 procedure SP_INS_T067
10 (in_codprocess in out varchar2)
11 IS
12
13 CURSOR cur_t068
14 IS
15 SELECT V3.CODART
16 , V3.CODARTCUST
17 , V3.CODDIV
18 , V3.DTEMOD
19 , V3.CODDECOD
20 FROM XIN_ZT068DECODCUST v3
21 ORDER BY V3.CODDECOD;
22
23 -- Variabili
24 vl_progr_processo NUMBER := NULL;
25 vl_progr_dettaglio NUMBER := NULL;
26 vl_messaggio VARCHAR2(2000) := NULL;
27 vl_numrows NUMBER:=0;
28 vl_count NUMBER:=0;
29 vl_update NUMBER:=0;
30 vl_numprg T067PARTYARTORD.NUMPRG%type;
31
32 BEGIN
33
34 vl_progr_processo:=in_codprocess;
35 vl_progr_dettaglio := pkg_utils.log_new_detail(vl_progr_processo,
36 'SP_INS_T067',
37 'SP_INS_T067');
38
39 for rec_t068 in cur_t068 loop
40
41 vl_count:=vl_count+1;
42
43 begin
44 update T067PARTYARTORD
45 set CODARTCUST = rec_t068.codartcust
46 ,DTEMOD = xsysdate
47 where CODPARTY = rec_t068.CODDECOD
48 and CODART = rec_t068.codart
49 and CODDIV = rec_t068.coddiv
50 and CODLOCATION = '-';
51
52 if SQL%Rowcount = 0 then
53
54 begin
55
56 select nvl(MAX(NUMPRG),0) + 1 into vl_numprg
57 from T067PARTYARTORD
58 where CODPARTY = rec_t068.CODDECOD
59 and CODDIV = rec_t068.coddiv;
60
61 exception when others then
62 vl_numprg:=1;
63 end;
64
65 INSERT INTO T067PARTYARTORD
66 (CODPARTY,
67 CODART,
68 CODDIV,
69 CODLOCATION,
70 NUMPRG,
71 CODARTCUST,
72 FLGEXCLUDE,
73 DTEMOD,
74 FLGANN,
75 DTETOSERVER)
76 VALUES
77 (rec_t068.CODDECOD, --CODPARTY,
78 rec_t068.codart, --CODART,
79 rec_t068.coddiv, --CODDIV,
80 '-', --CODLOCATION,
81 vl_numprg, --NUMPRG,
82 rec_t068.codartcust, --CODARTCUST,
83 0, --FLGEXCLUDE,
84 xsysdate, --DTEMOD,
85 0, --FLGANN,
86 null --DTETOSERVER
87 );
88
89 end if;
90
91 for vl_dm in (select codparty
92 from t040party
93 where flgcustdeliv = -1
94 and codcustinv = rec_t068.CODDECOD
95 and codcustinv != codparty) loop
96
97 vl_count:=vl_count+1;
98
99 update T067PARTYARTORD
100 set CODARTCUST = rec_t068.codartcust
101 ,DTEMOD = xsysdate
102 where CODPARTY = vl_dm.codparty
103 and CODART = rec_t068.codart
104 and CODDIV = rec_t068.coddiv
105 and CODLOCATION = '-';
106
107 if SQL%Rowcount = 0 then
108
109 begin
110
111 select nvl(MAX(NUMPRG),0) + 1 into vl_numprg
112 from T067PARTYARTORD
113 where CODPARTY = vl_dm.codparty
114 and CODDIV = rec_t068.coddiv;
115
116 exception when others then
117 vl_numprg:=1;
118 end;
119
120 INSERT INTO T067PARTYARTORD
121 (CODPARTY,
122 CODART,
123 CODDIV,
124 CODLOCATION,
125 NUMPRG,
126 CODARTCUST,
127 FLGEXCLUDE,
128 DTEMOD,
129 FLGANN,
130 DTETOSERVER)
131 VALUES
132 (vl_dm.codparty, --CODPARTY,
133 rec_t068.codart, --CODART,
134 rec_t068.coddiv, --CODDIV,
135 '-', --CODLOCATION,
136 vl_numprg, --NUMPRG,
137 rec_t068.codartcust, --CODARTCUST,
138 0, --FLGEXCLUDE,
139 xsysdate, --DTEMOD,
140 0, --FLGANN,
141 null --DTETOSERVER
142 );
143
144 end if;
145
146 end loop;
147
148 commit;
149
150 exception when others then
151 rollback;
152 vl_messaggio := 'Errore Customer:' || rec_t068.CODDECOD || ' - ' || 'Product: ' || rec_t068.codart || ' - ' || substr(SQLERRM, 1, 1000) ;
153 pkg_utils.log_new_detail_error(vl_progr_processo,
154 vl_progr_dettaglio,
155 substr(SQLCODE, 1, 20),
156 vl_messaggio);
157
158 end;
159
160 end loop;
161
162
163 pkg_utils.log_end_detail(vl_progr_processo,
164 vl_progr_dettaglio,
165 0,
166 vl_count,
167 vl_update,
168 0);
169
170 EXCEPTION WHEN OTHERS THEN
171 ROLLBACK;
172
173 vl_messaggio := 'Errore :' || substr(SQLERRM, 1, 1000) ;
174 pkg_utils.log_new_detail_error(vl_progr_processo,
175 vl_progr_dettaglio,
176 substr(SQLCODE, 1, 20),
177 vl_messaggio);
178
179 --pkg_utils.log_end(vl_progr_processo,0);
180 END SP_INS_T067;
181
182 /************* PROCEDURE XOUT_CLIENTI(dteLastWrite date, ukid number)
183 Costruisce le tabelle di XOUT che non sono altro che un filtro delle
184 tabelle di sm1 sui dati creati o modificati DOPO una certa data, ovvero
185 l'ultima data di esportazione, usualmente.
186 dteLastWrite: data di filtraggio oltre la quale prendo i dati modificati/creati
187 varCodParty:= stringa del tipo '''234r23r23'',''12312312312'',''211231231'''.
188 Inoltre locka i record della t040 che deve esportare inserisce un record nella tabella
189 tb_int_locked_table dove mette ukid, l'idsessionlck e la tabella loccata(tablelck)
190 **************************************/
191
192 PROCEDURE XOUT_CLIENTI(DTELASTWRITE DATE, UKID NUMBER, VARCODPARTY VARCHAR2 := '') IS
193 STRFILTERDATE VARCHAR2(2048);
194 RETNUMBER NUMBER;
195 VL_SESSION NUMBER:= NULL;
196 VL_LOCKED_TABLE VARCHAR2(200):= NULL;
197
198 BEGIN
199
200 IF TRIM(VARCODPARTY) IS NULL OR TRIM(VARCODPARTY) = '0' THEN
201
202 STRFILTERDATE := ' AND ( t040.dtemod>=t040.dtetohost
203 OR
204 t040.dtecre>=t040.dtetohost
205 OR t040.dtetohost is null
206 OR T040.dtetohost = ''12/30/1899 00.00.00''
207 ) ';
208 ELSE
209 STRFILTERDATE := ' AND t040.codparty in ( ' || VARCODPARTY || ' ) ';
210
211 END IF;
212 /*
213 STRFILTERDATE := STRFILTERDATE ||
214 ' AND t.CODPARTY NOT IN (SELECT CODPARTY FROM t041Partydiv t041 where t041.codstatus=''1'' )';
215 */
216
217 Z_GET_SESSION('EXP_CLIENTI', VL_SESSION, 'Z_PKG_XTEL_IMPORT', 'SYSH');
218
219 VL_LOCKED_TABLE := 'T040PARTY';
220
221
222 IF (VL_SESSION = -1) THEN
223
224 RAISE_APPLICATION_ERROR(-20100, 'ERRORE DURANTE IL RECUPERO DELLA SESSIONE E IL SETTING DATI NELLA T035.');
225
226 END IF;
227
228 -- MI SALVO IL SESSIONID CHE LOCKA I CLIENTI
229 INSERT INTO TB_INT_LOCK_TABLE
230 (
231 XTUKID,
232 IDSESSIONLCK,
233 TABLELCK
234 )
235 VALUES
236 (
237 UKID,
238 VL_SESSION,
239 VL_LOCKED_TABLE
240 );
241 -- MI SALVO IL SESSIONID CHE LOCKA I CLIENTI
242 /*UPDATE T902TABROWS
243 SET CODTABROW = PO_SESSION
244 WHERE CODTAB='LOCK_CLIENTI';*/
245
246 --- LOCKA TUTTI I CLIENTI MODIFICATI DOPO L'ultimo invio CHE NON SONO CC, CN, PV( NON SONO IN GERARCHIA NELLA T053) E CT
247 -- (PER QUEST'ULTMO CASO DOVREMO INSERIRE SOLO I NODI REALI E NON QUELLI GENERATI DA UN ELEMENTO GERACHICO SOTTOSTANTE)
248
249 -- AND t040.Z_FLGSUPPLIER = ''0''
250
251 EXEC_SQL('UPDATE /*+ APPEND NOLOGGING*/ T040PARTY T040
252 SET T040.CODUSRLCK = ''SYSH'', T040.IDSESSIONLCK = '||VL_SESSION||', T040.DTELCK = xSYSDATE
253 WHERE T040.CODPARTY IN
254 (SELECT /*+ INDEX(t) */
255 distinct t.codparty
256 FROM T040PARTY T
257 INNER JOIN TB0042RELATIONS_STATIC Tb0042 ON Tb0042.CODnode = T.CODPARTY and
258 Tb0042.CODdim = ''CUST'' and tb0042.codhier = ''COMM'' and
259 tb0042.coddiv = ''001''
260 WHERE T.CODPARTY = T040.CODPARTY)
261 AND SUBSTR(T040.CODPARTY, 1, 2) NOT IN (''CC'', ''CT'', ''CN'')
262 AND t040.flgperson = ''0''
263 AND Z_PKG_XTEL_IMPORT.EXP_CODPARTY(T040.CODPARTY) <> 0
264 AND (T040.IDSESSIONLCK IS NULL OR NOT EXISTS
265 (SELECT NULL FROM T035LOGGEDUSERS WHERE IDSESSION = T040.IDSESSIONLCK))
266 ' || STRFILTERDATE);
267
268
269 -- LOCKA TUTTI I CT CHE NON SONO GENERATI DA ELEMNTI GERARCHICI SOTTOSTANTI.
270 -- QUINDI SOLO QUELLI PER CUI NON ESISTE UN ELEMENTO CON CODICE UGUALE ALLA PARTE NUMERICA DEL NODO CT STESSO
271 EXEC_SQL('UPDATE /*+ APPEND NOLOGGING*/ T040PARTY T040
272 SET T040.CODUSRLCK = ''SYSH'', T040.IDSESSIONLCK = '||VL_SESSION||', T040.DTELCK = xSYSDATE
273 WHERE T040.CODPARTY IN
274 (SELECT /*+ INDEX(t) */
275 distinct t.CODPARTY
276 FROM t040party t
277 INNER JOIN TB0042RELATIONS_STATIC Tb0042 ON Tb0042.CODnode = T.CODPARTY and
278 Tb0042.CODdim = ''CUST'' and tb0042.codhier = ''COMM'' and
279 tb0042.coddiv = ''001''
280 WHERE T.CODPARTY = T040.CODPARTY)
281 AND substr(T040.CODPARTY,1,2) = ''CT''
282 AND not exists (SELECT NULL
283 FROM T040PARTY
284 WHERE CODPARTY= SUBSTR(T040.CODPARTY, 3))
285 AND Z_PKG_XTEL_IMPORT.EXP_CODPARTY(T040.CODPARTY) <> 0
286 AND (T040.IDSESSIONLCK IS NULL OR NOT EXISTS
287 (SELECT NULL FROM T035LOGGEDUSERS WHERE IDSESSION = T040.IDSESSIONLCK))
288 ' || STRFILTERDATE);
289
290 EXEC_SQL('INSERT INTO XOUT_zT040PARTY_ALL_STORY
291 SELECT '||UKID||', T040.* FROM T040PARTY T040
292 WHERE SUBSTR(T040.CODPARTY, 1, 2) NOT IN (''CC'', ''CT'', ''CN'')
293 AND t040.flgperson = ''0''
294 AND Z_PKG_XTEL_IMPORT.EXP_CODPARTY(T040.CODPARTY) <> 0
295 ' || STRFILTERDATE);
296
297 EXEC_SQL('INSERT INTO XOUT_zT040PARTY_ALL_STORY
298 SELECT '||UKID||', T040.* FROM T040PARTY T040
299 WHERE substr(T040.CODPARTY,1,2) = ''CT''
300 AND not exists (SELECT NULL
301 FROM T040PARTY
302 WHERE CODPARTY= SUBSTR(T040.CODPARTY, 3))
303 AND Z_PKG_XTEL_IMPORT.EXP_CODPARTY(t040.codparty) <> 0
304 ' || STRFILTERDATE);
305
306 EXEC_SQL('TRUNCATE TABLE XOUT_zt040PARTY');
307
308 -- INSERISCE TUTTI I CLIENTI APPENA LOCKATI
309 EXEC_SQL('INSERT INTO XOUT_zt040party
310 SELECT /*+ INDEX(t) */ distinct t.*
311 FROM t040party t
312 WHERE T.IDSESSIONLCK = '||VL_SESSION);
313
314 /*--- INSERISCO TUTTI I CLIENTI CHE NON SONO CC, CN, PV( NON SONO IN GERARCHIA NELLA T053) E CT
315 -- (PER QUEST'ULTMO CASO DOVREMO INSERIRE SOLO I NODI REALI E NON QUELLI GENERATI DA UN ELEMENTO GERACHICO SOTTOSTANTE)
316
317 EXEC_SQL('INSERT INTO XOUT_t040party
318 SELECT \*+ INDEX(t) *\ distinct t.*
319 FROM t040party t
320 INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty
321 WHERE substr(t.CODPARTY,1,2) not in (''CC'',''CT'',''CN'') AND Z_PKG_XTEL_IMPORT.IS_NUMERIC(t.codparty)=1
322 ' || STRFILTERDATE);
323
324 -- INSERISCO TUTTI I CT CHE NON SONO GENERATI DA ELEMNTI GERARCHICI SOTTOSTANTI.
325 -- QUINDI SOLO QUELLI PER CUI NON ESISTE UN ELEMENTO CON CODICE UGUALE ALLA PARTE NUMERICA DEL NODO CT STESSO
326 EXEC_SQL('INSERT INTO XOUT_t040party
327 SELECT \*+ INDEX(t) *\ distinct t.*
328 FROM t040party t
329 INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty
330 WHERE substr(t.CODPARTY,1,2) = ''CT'' AND
331 not exists (SELECT NULL FROM T040PARTY
332 WHERE CODPARTY= SUBSTR(T.CODPARTY, 3)) AND Z_PKG_XTEL_IMPORT.IS_NUMERIC(t.codparty)=1
333 ' || STRFILTERDATE);*/
334 /*--- INSERISCO PRIMA I CLIENTI REALI, NON CREATI PER RIEMPIRE LIVELLI MANCANTI
335 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
336 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
337 substr(t.CODPARTY,1,2) not in (''CC'',''CT'',''SG'',''GR'',''AS'',''CG'',''CN'')
338 ' || STRFILTERDATE);
339
340 COMMIT;
341
342 SELECT COUNT(*) INTO RETNUMBER FROM XOUT_T040PARTY; ---numero di record scritti per i clienti
343 --- INSERISCO POI I CLIENTI CON MODIFICHE SU CC che non hanno il livello sottostante
344 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
345 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
346 substr(t.CODPARTY,1,2) = ''CC'' AND
347 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=substr(t.CODPARTY,3) )
348 ' || STRFILTERDATE);
349 COMMIT;
350 --- INSERISCO POI I CLIENTI CON MODIFICHE SU CT che non hanno il livello sottostante
351 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\
352 distinct t.*
353 FROM
354 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
355 substr(t.CODPARTY,1,2) = ''CT'' AND
356 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''CC'' || substr(t.CODPARTY,3) )
357 ' || STRFILTERDATE);
358 COMMIT;
359
360 --- INSERISCO POI I CLIENTI CON MODIFICHE SU SG che non hanno il livello sottostante
361 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
362 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
363 substr(t.CODPARTY,1,2) = ''SG'' AND
364 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''CT'' || substr(t.CODPARTY,3) )
365 ' || STRFILTERDATE); -- e filtro eventualemtne per i record creati o modificati
366 --- dopo l'ultima esportazione letta
367 COMMIT;
368 --- INSERISCO POI I CLIENTI CON MODIFICHE SU GR che non hanno il livello sottostante
369 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
370 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
371 substr(t.CODPARTY,1,2) = ''GR'' AND
372 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''SG'' || substr(t.CODPARTY,3) )
373 ' || STRFILTERDATE);
374 --- INSERISCO POI I CLIENTI CON MODIFICHE SU AS che non hanno il livello sottostante
375 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
376 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
377 substr(t.CODPARTY,1,2) = ''AS'' AND
378 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''GR'' || substr(t.CODPARTY,3) )
379 ' || STRFILTERDATE);
380 --- INSERISCO POI I CLIENTI CON MODIFICHE SU CG che non hanno il livello sottostante
381 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
382 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
383 substr(t.CODPARTY,1,2) = ''CG'' AND
384 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''AS'' || substr(t.CODPARTY,3) )
385 ' || STRFILTERDATE);
386 --- INSERISCO POI I CLIENTI CON MODIFICHE SU CN che non hanno il livello sottostante
387 EXEC_SQL('INSERT INTO XOUT_t040party SELECT \*+ INDEX(t) *\ distinct t.* FROM
388 t040party t INNER JOIN t053partyrelation t053 ON t053.codson=t.codparty WHERE
389 substr(t.CODPARTY,1,2) = ''CN'' AND
390 not exists ( SELECT CODPARTY FROM t040party t2 where t2.CODPARTY=''CG'' || substr(t.CODPARTY,3) )
391 ' || STRFILTERDATE);
392 */
393 COMMIT;
394 ----una volta esportata la t096, ricavo anche i dati per le altre tabelle collegate
395 EXEC_SQL('TRUNCATE TABLE XOUT_zT041PARTYDIV');
396 EXEC_SQL('TRUNCATE TABLE XOUT_zT042PARTYADDR');
397 EXEC_SQL('TRUNCATE TABLE XOUT_zT044PARTYNOTES');
398 EXEC_SQL('TRUNCATE TABLE XOUT_zT047PARTYPER');
399-- EXEC_SQL('TRUNCATE TABLE XOUT_T047INVMODALITY');
400 EXEC_SQL('TRUNCATE TABLE XOUT_zT045PARTYWEEK');
401 EXEC_SQL('TRUNCATE TABLE XOUT_zT046PARTYBANK');
402 EXEC_SQL('TRUNCATE TABLE XOUT_zF6X0125');--> VASSOIO EMAIL
403 EXEC_SQL('TRUNCATE TABLE XOUT_zF6X0127');--> VASSOIO GIORNI CONSEGNA, VISTITA, CHIUSURA
404
405 EXEC_SQL('INSERT INTO XOUT_zT041PARTYDIV SELECT * FROM T041PARTYDIV t
406 where t.CODPARTY IN (SELECT CODPARTY FROM XOUT_zt040PARTY)');
407 EXEC_SQL('INSERT INTO XOUT_zT042PARTYADDR SELECT * FROM T042PARTYADDR t
408 where t.CODPARTY IN (SELECT CODPARTY FROM XOUT_zt040PARTY)');
409 EXEC_SQL('INSERT INTO XOUT_zT044PARTYNOTES SELECT t1.coddiv||t1.codparty,t.IDSEQ,t.NOTETYPE,substr(t.NOTE,1,255),t.DTEMOD
410 FROM TA4410NOTES t, xout_zt040party t0, xout_zt041partydiv t1
411 WHERE t.parentkey = t0.documentkey and t0.codparty = t1.codparty and
412 t.PARENTkey IN (SELECT documentkey FROM Xout_zT040party)');
413 EXEC_SQL('INSERT INTO XOUT_zT047PARTYPER
414 (CODPARTY, CODDIV, CODPER, DESNAME, DESSURNAME, CODPOS, NUMPHONE,NUMCELL,
415 EMAIL,WEBPAGE, Z_NUMFAX,Z_DOCTOSEND, Z_CATME )
416 SELECT t047.CODPARTY, t047.CODDIV, t047.CODASSOC, t040.DESPARTY1, substr(t040.DESPARTY2,1,30),
417 T047.CODROLE1, t042.NUMPHONE1, t042.numphone2,nvl(t040.EMAIL, T042.EMAIL1),
418 t042.WEBSITE1, t042.numfax1, t047.CODROLE3, t047.CODROLE2
419 FROM T047PARTYCONTACT t047
420 JOIN T040party t040 on t047.codper = t040.codparty
421 JOIN T042PARTYADDR T042 on t040.codparty = t042.codparty and t042.codaddr = 1
422 where t047.CODPARTY IN (SELECT CODPARTY FROM XOUT_zt040PARTY)');
423-- EXEC_SQL('INSERT INTO XOUT_T047INVMODALITY SELECT * FROM T047INVMODALITY t
424-- where t.CODPARTY IN (SELECT CODPARTY FROM XOUT_t040PARTY)');
425 EXEC_SQL('INSERT INTO XOUT_zT045PARTYWEEK SELECT * FROM T045PARTYWEEK t
426 where t.CODPARTY IN (SELECT CODPARTY FROM XOUT_zt040PARTY)');
427
428 EXEC_SQL('INSERT INTO XOUT_zT046PARTYBANK SELECT * FROM T046PARTYBANK t
429 where t.CODPARTY IN (SELECT CODPARTY FROM XOUT_zt040PARTY)');
430
431 z_sp_genera_vassoio_email;
432
433-- rc 20140522 disattivato new vassoio 0127 per evitare di date RECN errati su F6X0001
434-- rc 20140729 riattivato new vassoio 0127
435 z_sp_gen_vassoio_giorni_t045;
436
437 COMMIT;
438 END;
439
440 /*----------------------- AUTOINSERT -------------------------------
441 procedura che costruisce ed esegue uno statement sql di INSERT INTO
442 FROM SELECT nella tabella passata come parametro
443 secondo i campi e le tabelle sorgenti indicati nelle tabelle INT
444 ---------------------------------------------------------------------*/
445 PROCEDURE AUTOINSERT(VARCODOPER VARCHAR2) IS
446 STRSELECT VARCHAR2(8000);
447 STRFROM VARCHAR2(4000);
448 SQL_STRING CLOB;
449 SQL_STRING_PRIMO VARCHAR2(8000);
450 SQL_STRING_SECONDO VARCHAR2(8000);
451 SQL_STRING_TERZO VARCHAR2(8000);
452 SQL_STRING_QUARTO VARCHAR2(8000);
453
454 VARTABFROM VARCHAR2(30);
455 SQL_WHERE VARCHAR2(2048);
456 STRHINT VARCHAR2(2048) := '';
457 VARTABLENAME VARCHAR2(30);
458 STRLOG1 VARCHAR2(500);
459 STRLOG2 VARCHAR2(500);
460 STRLOG3 VARCHAR2(500);
461 STRLOG4 VARCHAR2(500);
462 NLOG INT := 500;
463 SQLPART VARCHAR2(500);
464 NLEN NUMBER;
465 /* nuova gestine dei campi raggruppati: ancora da provare,
466 bisogna aggiungere un flg chiamato aggreate nella tb_int_tabfields
467 dove 1: indica i campi da mettere nella group by ,
468 0: indica i campi con funzione di aggregamento
469 SQL_GROUPBY varchar2(4024);
470 CURSOR CUR_AGGR IS SELECT * FROM TB_INT_TABFIELDS t
471 where upper(trim(t.codoper))= upper(trim(VARCODOPER)) and
472 t.aggreate=1;*/
473
474 CURSOR CUR_TAB(
475
476 CUROPER VARCHAR2) IS
477 SELECT DISTINCT TB_INT_TABFIELDS.TABLENAME,
478 TB_INT_TABFIELDS.FIELDNAME,
479 TB_INT_TABFIELDS.FIELDFROM,
480 TB_INT_TABFIELDS.TABFROM,
481 TB_INT_TABFIELDS.TRANSFORM,
482 TB_INT_TABFIELDS.FIELDORDER,
483 TB_INT_TABFIELDS.FLDTOTYPE,
484 TB_INT_TABFIELDS.FLDFRTYPE,
485 TB_INT_TABFIELDS.FLDTOLENGTH,
486 TB_INT_TABFIELDS.FLDFRLENGTH
487 FROM TB_INT_TABFIELDS
488 LEFT JOIN TB_INT_TABJOIN /*on TRIM(UPPER(tb_int_tabfields.tabfrom)) =TRIM(UPPER(tb_int_tabjoin.tabfrom))
489 and TRIM(UPPER(tb_int_tabjoin.tablename))=TRIM(UPPER(tb_int_tabfields.tablename))*/
490 ON TRIM(UPPER(TB_INT_TABFIELDS.CODOPER)) =
491 TRIM(UPPER(TB_INT_TABJOIN.CODOPER))
492 WHERE /*TRIM(UPPER(tb_int_tabfields.tablename))=TRIM(UPPER(curtabname)) */
493 LOWER(TRIM(TB_INT_TABJOIN.CODOPER)) = LOWER(TRIM(CUROPER))
494 AND TB_INT_TABFIELDS.ENABLE = 1
495 AND ((TB_INT_TABJOIN.TABFROM IS NOT NULL AND TB_INT_TABJOIN.ENABLE = 1) OR
496 (TB_INT_TABFIELDS.TABFROM IS NULL))
497 ORDER BY FIELDORDER;
498
499 CURSOR CUR_TAB2(
500
501 CUROPER VARCHAR2) IS
502 SELECT DISTINCT TB_INT_TABJOIN.TABLENAME,
503 TB_INT_TABJOIN.TABFROM,
504 TB_INT_TABJOIN.FIELDJOIN1,
505 TB_INT_TABJOIN.FIELDJOIN2,
506 TB_INT_TABJOIN.TABALIAS,
507 TB_INT_TABJOIN.TABJOIN,
508 TB_INT_TABJOIN.TIPOJOIN,
509 TB_INT_TABJOIN.TABORDER
510 FROM TB_INT_TABJOIN
511 WHERE /*TRIM(UPPER(tb_int_tabjoin.tablename))=TRIM(UPPER(curtabname))*/
512 LOWER(TRIM(TB_INT_TABJOIN.CODOPER)) = LOWER(TRIM(CUROPER))
513 AND ENABLE = 1
514 ORDER BY TB_INT_TABJOIN.TABORDER;
515
516 CURSOR CUR_TAB3(
517
518 CUROPER VARCHAR2) IS
519 SELECT DISTINCT TB_INT_TABWHEREPARAM.TABLENAME,
520 TB_INT_TABWHEREPARAM.TABPARNAME,
521 TB_INT_TABWHEREPARAM.TABPARVALUE
522 FROM TB_INT_TABWHEREPARAM
523 WHERE TRIM(UPPER(CODOPER)) = TRIM(UPPER(CUROPER));
524
525 BLNSTART BOOLEAN := TRUE;
526 INTCOUNT INT := 0; --contatore generico
527 BEGIN
528 BEGIN
529 --RECUPERO LA TABELLA DI DESTINAZIONE
530 SELECT TABLENAME
531 INTO VARTABLENAME
532 FROM TB_INT_TABJOIN T
533 WHERE LOWER(TRIM(T.CODOPER)) = LOWER(TRIM(VARCODOPER))
534 AND ROWNUM = 1;
535 EXCEPTION
536 WHEN OTHERS THEN
537 VARTABLENAME := VARCODOPER;
538 END;
539 SQL_STRING := 'INSERT /*+ NOLOGGING */ INTO ' || VARTABLENAME ||
540 ' (';
541
542 SELECT COUNT(*)
543 INTO INTCOUNT
544 FROM TB_INT_HINTS
545 WHERE UPPER(TRIM(CODOPER)) = UPPER(TRIM(VARCODOPER));
546
547 IF INTCOUNT > 0 THEN
548 SELECT T.HINT
549 INTO STRHINT
550 FROM TB_INT_HINTS T
551 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
552 END IF;
553 ---- costruiamo l'sql statement per INSERT INTO
554 ---- anzitutto mettiamo l'elenco di tutti i campi DESTINAZIONE da tb_int_tabfields
555 FOR ROW_INT_TABFIELDS IN CUR_TAB(VARCODOPER) LOOP
556 IF NOT BLNSTART THEN
557 SQL_STRING := SQL_STRING || ', ';
558 END IF;
559
560 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS.FIELDNAME;
561 BLNSTART := FALSE;
562 END LOOP;
563 --
564 ----poi mettiamo una select DISTINCT dei campi presi da tb_int_tabfields
565 SQL_STRING := SQL_STRING || ') SELECT ' || STRHINT || ' ';
566 BLNSTART := TRUE;
567
568 FOR ROW_INT_TABFIELDS IN CUR_TAB(VARCODOPER) LOOP
569 --nLen:=length(sql_string);
570 --if nLen>7500 then
571 -- sql_string_primo:= sql_string; ---back up della prima parte
572 -- sql_string:=''; ---azzero la seconda e proseguo
573 --end if;
574 IF NOT BLNSTART THEN
575 SQL_STRING := SQL_STRING || ' , ';
576 END IF;
577 IF ROW_INT_TABFIELDS.TABFROM IS NULL THEN
578 --- se tabfrom e null allora si tratta di una costante in fieldfrom o una substring in transform
579 IF TRIM(ROW_INT_TABFIELDS.TRANSFORM) IS NULL THEN
580 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS.FIELDFROM || ' AS ' ||
581 ROW_INT_TABFIELDS.FIELDNAME;
582 ELSE
583 SQL_STRING := SQL_STRING || '(' || ROW_INT_TABFIELDS.TRANSFORM ||
584 ') AS ' || ROW_INT_TABFIELDS.FIELDNAME;
585 END IF;
586
587 ELSE
588 --- altrimenti...
589 IF IS_COL_TO_DECODE(ROW_INT_TABFIELDS.FIELDNAME, VARTABLENAME) = 1 THEN
590 ---se la colonna e da decodificare, occorre inserire una subquery
591 --- in linea che recuperi il valore dalla tabella di decodifica tb_int_decodefield
592
593 SQL_STRING := SQL_STRING ||
594 ' (select d.valueto from tb_int_decodefield d
595 where d.fieldname=''' ||
596 ROW_INT_TABFIELDS.FIELDNAME ||
597 ''' and d.valuefrom
598 = ' ||
599 ROW_INT_TABFIELDS.TABFROM || ' .' ||
600 ROW_INT_TABFIELDS.FIELDFROM || ')
601 AS ' ||
602 ROW_INT_TABFIELDS.FIELDNAME;
603 ELSE
604 ---altrimenti...
605 IF ROW_INT_TABFIELDS.FLDTOTYPE IN ('VARCHAR2', 'CHAR') THEN
606 --- ISCOLSTRING
607 ---se la colonna (il campo) e di tipo stringa va tagliato nei caratteri eccedenti
608
609 IF TRIM(ROW_INT_TABFIELDS.TRANSFORM) IS NOT NULL THEN
610 -- in piu, occorre applicare eventuali trasformazioni se indicato nel campo transform
611 SQL_STRING := SQL_STRING || ' SUBSTR(' ||
612 REPLACE(ROW_INT_TABFIELDS.TRANSFORM,
613 '%S',
614 ROW_INT_TABFIELDS.TABFROM || '.' ||
615 ROW_INT_TABFIELDS.FIELDFROM) || ',1,
616 ' ||
617 TO_CHAR(ROW_INT_TABFIELDS.FLDTOLENGTH) || ')
618 AS ' ||
619 ROW_INT_TABFIELDS.FIELDNAME;
620
621 ELSE
622 --- se non ci sono trasformazioni e il campo e stringa, applichiamo soltanto
623 --- il taglio dei caratteri
624 SQL_STRING := SQL_STRING || ' SUBSTR(' ||
625 ROW_INT_TABFIELDS.TABFROM || '.' ||
626 ROW_INT_TABFIELDS.FIELDFROM || ',1,
627 ' ||
628 TO_CHAR(ROW_INT_TABFIELDS.FLDTOLENGTH) || ')
629 AS ' ||
630 ROW_INT_TABFIELDS.FIELDNAME;
631 END IF;
632 ELSE
633 ---se il campo non e di tipo stringa, o applichiamo una trasformazione
634 --- oppure non facciamo niente e copiamo il campo cosi come e.
635 IF TRIM(ROW_INT_TABFIELDS.TRANSFORM) IS NOT NULL THEN
636 SQL_STRING := SQL_STRING ||
637 REPLACE(ROW_INT_TABFIELDS.TRANSFORM,
638 '%S',
639 ROW_INT_TABFIELDS.TABFROM || '.' ||
640 ROW_INT_TABFIELDS.FIELDFROM) || ' AS ' ||
641 ROW_INT_TABFIELDS.FIELDNAME;
642
643 ELSE
644 ---copiamo il campo cosi come e
645 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS.TABFROM || '.' ||
646 ROW_INT_TABFIELDS.FIELDFROM || ' AS ' ||
647 ROW_INT_TABFIELDS.FIELDNAME;
648 END IF;
649 END IF;
650 END IF;
651 END IF;
652 -- sql_string:=sql_string || ROW_INT_TABFIELDS.tabfrom || '.' || ROW_INT_TABFIELDS.fieldfrom || ' AS ' || ROW_INT_TABFIELDS.fieldname;
653 BLNSTART := FALSE;
654 END LOOP;
655
656 --- alla fine aggiungiamo la parte delle TABELLE e dei JOIN
657 --- prese da tb_int_tabjoin
658 SQL_STRING := SQL_STRING || ' from ';
659 BLNSTART := TRUE;
660 FOR ROW_INT_TABFIELDS2 IN CUR_TAB2(VARCODOPER) LOOP
661 NLEN := LENGTH(SQL_STRING);
662 IF BLNSTART THEN
663 ---al primo giro niente join...
664 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS2.TABFROM;
665
666 BLNSTART := FALSE;
667 ELSE
668 --- ai giri successivi, join con la tabella TABFROM
669 --- e possibile ci siano piu campi nella clausula ON di join
670 --- per cui controllo se la precedente tabfrom e la stessa
671 IF UPPER(TRIM(VARTABFROM)) =
672 UPPER(TRIM(ROW_INT_TABFIELDS2.TABALIAS)) THEN
673 ---- join su piu campi, la tabella from e la stessa (e l'alias in realta..) del ciclo precedente
674 SQL_STRING := SQL_STRING || ' AND trim(TO_CHAR(';
675 IF INSTR(ROW_INT_TABFIELDS2.FIELDJOIN2, ')') = 0 THEN
676 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS2.TABALIAS || '.' ||
677 ROW_INT_TABFIELDS2.FIELDJOIN2 || ')) = ';
678 ELSE
679 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS2.FIELDJOIN2 ||
680 ')) = ';
681 END IF;
682
683 IF TRIM(ROW_INT_TABFIELDS2.TABJOIN) IS NOT NULL AND
684 INSTR(ROW_INT_TABFIELDS2.FIELDJOIN1, ')') = 0 THEN
685 --join normale tra i 2 campi delle tabelle
686 SQL_STRING := SQL_STRING || ' trim(TO_CHAR(' ||
687 ROW_INT_TABFIELDS2.TABJOIN || '.' ||
688 ROW_INT_TABFIELDS2.FIELDJOIN1 || '))';
689 ELSE
690 --- join tra il campo della tabella ed una costante..oppure una funzione esempio NVL(..)
691 SQL_STRING := SQL_STRING || ' trim(TO_CHAR(' ||
692 ROW_INT_TABFIELDS2.FIELDJOIN1 || '))';
693 END IF;
694 ELSE
695 ---- nuova tabella di join (TO DO: PARAMETRIZZARE IL TIPO DI JOIN??)
696 SQLPART := ' ' || TO_CHAR(ROW_INT_TABFIELDS2.TIPOJOIN) || ' ' ||
697 ROW_INT_TABFIELDS2.TABFROM;
698 ---se la tabella di join TABFROM e diversa da tab alias sono
699 ---- all'inizio del join e devo dichiarare l'alias..
700 IF LOWER(TRIM(ROW_INT_TABFIELDS2.TABFROM)) !=
701 LOWER(TRIM(ROW_INT_TABFIELDS2.TABALIAS)) THEN
702 SQLPART := SQLPART || ' ' || ROW_INT_TABFIELDS2.TABALIAS;
703 END IF;
704 IF UPPER(TRIM(ROW_INT_TABFIELDS2.TIPOJOIN)) <> 'CROSS JOIN' THEN
705 SQLPART := SQLPART || ' ON ';
706 --- se il campo contiene una parentesi significa che c'e una funzione
707 --- per cui non ci metto il prefisso con la tabella
708 IF INSTR(ROW_INT_TABFIELDS2.FIELDJOIN2, ')') = 0 THEN
709 SQLPART := SQLPART || ' trim(TO_CHAR(' ||
710 TO_CHAR(ROW_INT_TABFIELDS2.TABALIAS) || '.' ||
711 TO_CHAR(ROW_INT_TABFIELDS2.FIELDJOIN2) || ')) = ';
712 ELSE
713 SQLPART := SQLPART || ' trim(TO_CHAR(' ||
714 TO_CHAR(ROW_INT_TABFIELDS2.FIELDJOIN2) || ')) = ';
715 END IF;
716
717 SQL_STRING := SQL_STRING || SQLPART;
718 IF TRIM(ROW_INT_TABFIELDS2.TABJOIN) IS NOT NULL AND
719 INSTR(ROW_INT_TABFIELDS2.FIELDJOIN1, ')') = 0 THEN
720 --join normale tra i 2 campi SECCHI delle tabelle
721 SQLPART := ' trim(TO_CHAR(' || ROW_INT_TABFIELDS2.TABJOIN || '.' ||
722 ROW_INT_TABFIELDS2.FIELDJOIN1 || '))';
723 ELSE
724 --- join tra il campo della tabella ed una costante oppure una funzione esempio NVL(..)
725 SQLPART := ' trim(TO_CHAR(' || ROW_INT_TABFIELDS2.FIELDJOIN1 || '))';
726 END IF;
727 END IF; --- metto i campi solo se non e' CROSS JOIN
728 SQL_STRING := SQL_STRING || SQLPART;
729
730 END IF;
731 END IF;
732 VARTABFROM := ROW_INT_TABFIELDS2.TABALIAS;
733 END LOOP;
734 -- controlliamo se ci sono where conditions eventuali
735 SELECT COUNT(*)
736 INTO INTCOUNT
737 FROM TB_INT_TABWHERE T
738 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
739 IF INTCOUNT > 0 THEN
740 --se esistono where conditions, prendo le prima ( deve essercene solo una)
741 SELECT T.TABWHERE
742 INTO SQL_WHERE
743 FROM TB_INT_TABWHERE T
744 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
745 --controllo se ci sono placeholders da sostituire
746 SELECT COUNT(*)
747 INTO INTCOUNT
748 FROM TB_INT_TABWHEREPARAM T
749 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
750 IF INTCOUNT > 0 THEN
751 --se ci sono placeholders da sostituire, li sostituisco..
752 -- CUR_TAB3 e un cursore che cicla sulla tabella tabwhereparam dei valori dinamici dei parametri,
753 -- che va riempita prima.
754 FOR ROW_INT_TABFIELDS3 IN CUR_TAB3(VARCODOPER) LOOP
755 SQL_WHERE := REPLACE(SQL_WHERE,
756 ROW_INT_TABFIELDS3.TABPARNAME,
757 ROW_INT_TABFIELDS3.TABPARVALUE);
758 END LOOP;
759 END IF;
760 SQL_STRING := SQL_STRING || ' WHERE ' || SQL_WHERE;
761 END IF;
762 ---
763 /* inizio vecchio modo con ricerca parole chiavi*/
764
765 --- per mettere la groupo by deve esservi almeno una SUM...
766
767 IF INSTR(SQL_STRING, 'SUM(') > 0 THEN
768 SQL_STRING := SQL_STRING || ' group by ';
769 --- i campi di raggruppamento sono quelli che NON hanno una funzione di
770 --- gruppo e non sono costanti (tabfrom e nulla)
771 FOR ROW_INT_TABFIELDS IN CUR_TAB(VARCODOPER) LOOP
772 IF ((INSTR(UPPER(ROW_INT_TABFIELDS.TRANSFORM), 'SUM(') <= 0) AND
773 (INSTR(UPPER(ROW_INT_TABFIELDS.TRANSFORM), 'MIN(') <= 0) AND
774 (INSTR(UPPER(ROW_INT_TABFIELDS.TRANSFORM), 'MAX(') <= 0)
775
776 ) OR TRIM(ROW_INT_TABFIELDS.TRANSFORM) IS NULL AND
777
778 TRIM(ROW_INT_TABFIELDS.TABFROM) IS NOT NULL
779
780 THEN
781 SQL_STRING := SQL_STRING || ROW_INT_TABFIELDS.TABFROM || '.' ||ROW_INT_TABFIELDS.FIELDFROM || ' ,';
782 END IF;
783 END LOOP;
784 SQL_STRING := SUBSTR(SQL_STRING, 1, LENGTH(SQL_STRING) - 1);
785
786 END IF;
787
788 /* fine vecchio modo con ricerca parole chiavi*/
789 /* nuovo modo con campo aggregate */
790 /*SQL_GROUPBY:='';
791 FOR ROW_CUR IN CUR_AGGR LOOP
792 SQL_GROUPBY:=SQL_GROUPBY || ROW_INT_TABFIELDS.TABFROM|| '.' ||ROW_CUR.FIELDFROM || ' ,';
793
794 END LOOP;
795 IF SQL_GROUPBY is not null then
796 SQL_GROUPBY := SUBSTR(SQL_GROUPBY, 1, LENGTH(SQL_GROUPBY) - 1);
797 SQL_STRING := SQL_STRING || SQL_GROUPBY;
798 end if;*/
799 /*fine nuovo modo*/
800 --rc 20160121
801 EXEC_SQL(SQL_STRING_PRIMO || SQL_STRING);
802 --EXECUTE IMMEDIATE SQL_STRING_PRIMO || SQL_STRING;
803 --
804 COMMIT;
805 END;
806
807 /*----------------------- ADDRESS_JOB_EXPORT ----------------------------
808 job di esportazione dei clienti dalle XOUT ai vassoi
809 varCodParty:= stringa del tipo '''234r23r23'',''12312312312'',''211231231'''
810 ------------------------------------------------------------------*/
811 PROCEDURE ADDRESS_JOB_EXPORT(VARCODPARTY VARCHAR2 := '') IS
812 STRLINK VARCHAR2(1024);
813 DTELASTWRITE DATE;
814 INTCOUNT INT;
815 STRERR VARCHAR2(2048);
816 UKID NUMBER;
817 RECNUMB NUMBER := 0;
818 RECTOT NUMBER := 0;
819 VL_SESSION NUMBER := NULL;
820 VL_LOCKED_TABLE VARCHAR2(200):= NULL;
821 BEGIN
822 --strLink:='';
823 -- controllo se esiste almeno un processo di esportazione che io abbia gia terminato di scrivere
824
825 SELECT COUNT(*)
826 INTO INTCOUNT
827 FROM F6X0001 T
828
829 WHERE TRIM(T.XTY6XTYPR) = 'ADDRESS'
830 AND TRIM(T.XTENHV) = GET_ENVIRONMENT
831 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
832 -- ER: 10/07/09 non deve rimandare mai i record
833 -- gia inviati anche se la loro lettura ha dato errore
834 AND T.XTY6XPRST IN ('N', 'Y', '1', 'E', 'R', 'L');
835 IF INTCOUNT > 0 THEN
836 --- c'e gia un processo. ricavo la data
837 DECLARE
838 CURSOR CUR_DATE IS
839 SELECT GIUL_TO_GREG(T.XTY6XCRDA)
840 FROM F6X0001 T
841 WHERE TRIM(T.XTY6XTYPR) = 'ADDRESS'
842 AND TRIM(T.XTENHV) = GET_ENVIRONMENT
843 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
844 AND T.XTY6XPRST = 'N'
845 ORDER BY T.XTUKID DESC;
846 BEGIN
847 OPEN CUR_DATE;
848 FETCH CUR_DATE
849 INTO DTELASTWRITE;
850 -- prendo l'ultima data soltanto
851 CLOSE CUR_DATE;
852 END;
853 ELSE
854 DTELASTWRITE := DEFAULT_START_DATE;
855 END IF;
856
857 SELECT COUNT(*)
858 INTO INTCOUNT
859 FROM F6X0001 T
860 WHERE TRIM(T.XTY6XTYPR) = 'ADDRESS'
861 AND TRIM(T.XTENHV) = GET_ENVIRONMENT
862 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW;
863 --- vedo se eventualmente ci sono degli errori. Li devo contare per id univoco..
864
865 SELECT SEQ_UKID.NEXTVAL INTO UKID FROM DUAL;
866
867 ----
868 XOUT_CLIENTI(DTELASTWRITE, UKID, VARCODPARTY);
869
870 --- nella tabella dei campi impostiamo il valore del
871 --- cakpo ukid
872 UPDATE TB_INT_TABFIELDS T
873 SET T.FIELDFROM = UKID
874 WHERE LOWER(T.TABLENAME) = 'f6x0109'
875 AND LOWER(T.FIELDNAME) = 'axukid';
876
877 UPDATE TB_INT_TABFIELDS T
878 SET T.FIELDFROM = UKID
879 WHERE LOWER(T.TABLENAME) = 'f6x0110'
880 AND LOWER(T.FIELDNAME) = 'pxukid';
881
882 UPDATE TB_INT_TABFIELDS T
883 SET T.FIELDFROM = UKID
884 WHERE LOWER(T.TABLENAME) = 'f6x0111'
885 AND LOWER(T.FIELDNAME) = 'bxukid';
886
887 UPDATE TB_INT_TABFIELDS T
888 SET T.FIELDFROM = UKID
889 WHERE LOWER(T.TABLENAME) = 'f6x0112'
890 AND LOWER(T.FIELDNAME) = 'txukid';
891
892 UPDATE TB_INT_TABFIELDS T
893 SET T.FIELDFROM = UKID
894 WHERE LOWER(T.TABLENAME) = 'f6x0116'
895 AND LOWER(T.FIELDNAME) = 'ncukid';
896
897 UPDATE TB_INT_TABFIELDS T
898 SET T.FIELDFROM = UKID
899 WHERE LOWER(T.TABLENAME) = 'f6x0114'
900 AND LOWER(T.FIELDNAME) = 'xtukid';
901
902 COMMIT;
903 BEGIN
904 SET_WRITING_STATE(GET_ENVIRONMENT, 'ADDRESS', UKID);
905 AUTOINSERT('F6X0109');
906 COMMIT;
907 RECNUMB := GET_ROW_COUNT(UKID, 'ax', 'F6X0109', GET_ENVIRONMENT);
908 RECTOT := RECNUMB;
909
910 AUTOINSERT('f6x0110_tel');
911 AUTOINSERT('f6x0110_fax');
912 AUTOINSERT('f6x0110_cell');
913 RECNUMB := GET_ROW_COUNT(UKID, 'px', 'f6x0110', GET_ENVIRONMENT);
914 RECTOT := RECTOT + RECNUMB;
915
916 AUTOINSERT('f6x0111');
917 RECNUMB := GET_ROW_COUNT(UKID, 'bx', 'f6x0111', GET_ENVIRONMENT);
918 RECTOT := RECTOT + RECNUMB;
919
920 AUTOINSERT('f6x0112');
921 RECNUMB := GET_ROW_COUNT(UKID, 'tx', 'f6x0112', GET_ENVIRONMENT);
922 RECTOT := RECTOT + RECNUMB;
923
924 AUTOINSERT('f6x0116');
925 RECNUMB := GET_ROW_COUNT(UKID, 'nc', 'f6x0116', GET_ENVIRONMENT);
926 RECTOT := RECTOT + RECNUMB;
927
928 AUTOINSERT('f6x0114_usr6');
929 AUTOINSERT('f6x0114_usr7');
930 RECNUMB := GET_ROW_COUNT(UKID, 'xt', 'f6x0114', GET_ENVIRONMENT);
931 RECTOT := RECTOT + RECNUMB;
932
933 SET_END_WRITING_STATE(GET_ENVIRONMENT, 'ADDRESS', UKID, RECTOT);
934 COMMIT;
935 EXCEPTION
936 WHEN OTHERS THEN
937 STRERR := SQLERRM;
938 LOG_SCRIPT(TO_CHAR(xSYSDATE, 'DD/MM/YYYY HH24:MI:SS') || '-->' ||
939 STRERR);
940
941 SET_ERR_WRITING_STATE(GET_ENVIRONMENT,
942 'ADDRESS',
943 UKID,
944 STRERR,
945 RECTOT);
946
947 END;
948 END;
949
950
951 /**************************************************************************
952 COMPLETA_T062
953 esegue la ricorsione per l'esplosione cartesiana dei fattori di
954 conversione tra le unita di misura
955 chiamare con null,null,null
956 ***************************************************************************/
957 PROCEDURE COMPLETA_T062(PI_CODART IN VARCHAR2, -- ARTICOLO ( SE NULLO LO FA SU TUTTI)
958 PI_CODDIV IN VARCHAR2, -- DIVISIONE Dell'articolo CODART ( se vuoto lo fa su tutti)
959 PI_PROGR_PROCESSO IN NUMBER) -- Se vuoto lo inserisce automaticamente
960
961 IS
962
963 CURSOR CL_T062_UMCONV IS
964 SELECT CODART, CODDIV, UMFROM, UMTO, VALCONVFACT
965 FROM T062UMCONV
966 WHERE NVL2(PI_CODART, CODART, 1) = NVL2(PI_CODART, PI_CODART, 1)
967 AND NVL2(PI_CODDIV, CODDIV, 1) = NVL2(PI_CODDIV, PI_CODDIV, 1)
968 ORDER BY CODART, CODDIV, UMFROM;
969
970 VL_PROGR_PROCESSO NUMBER := PI_PROGR_PROCESSO;
971 VL_PROGR_DETTAGLIO NUMBER := 0;
972 VL_UMFROM VARCHAR2(5) := NULL;
973 VL_UMTO VARCHAR2(5) := NULL;
974 VL_VALCONVFACT T062UMCONV.VALCONVFACT%TYPE := 0;
975
976 BEGIN
977 -- apre il processo
978 IF (VL_PROGR_PROCESSO IS NULL) THEN
979 VL_PROGR_PROCESSO := pkg_utils.log_start('IMPORT',
980 'COMP_T062',
981 'CARICA');
982 --
983
984 END IF;
985
986 VL_PROGR_DETTAGLIO := pkg_utils.log_new_detail(VL_PROGR_PROCESSO,
987 'COMPLETA',
988 'T062UMCONV',
989 0,
990 NULL);
991
992 FOR RL_T062 IN CL_T062_UMCONV LOOP
993 -- unita di misura di partenza ( un nodo a caso nel grafo )
994 -- da dove parte per cercare i legami con le altre unita di misura
995
996 RIC_T062(RL_T062.CODART,
997 RL_T062.CODDIV,
998 RL_T062.UMFROM,
999 RL_T062.UMTO,
1000 RL_T062.VALCONVFACT,
1001 VL_PROGR_PROCESSO,
1002 VL_PROGR_DETTAGLIO);
1003 END LOOP;
1004
1005 -- ER 26/03/09 : forza l'iserimento di record nella t062 per tutti
1006 -- gli articoli con umord1 = uminv1 che non hanno una conversione
1007 -- passata sul vassioio f6x0102.
1008 -- Anche per questi deve essere possibile effettuare un ordine.
1009 INSERT INTO T062UMCONV
1010 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
1011 SELECT CODART, CODDIV, UMINV1, UMORD1, 1, 1
1012 FROM T060ARTICLE
1013 WHERE CODART NOT IN (SELECT CODART FROM T062UMCONV)
1014 AND UMORD1 = UMINV1
1015 AND ((CODSTATUS = 0 AND FLGORDERABLE <> 0 )
1016 OR
1017 (CODCATMER = 'ZG'))
1018 AND FLGARTFITTIZIO = 0;
1019 --
1020
1021 --- chiude il processo
1022 pkg_utils.log_end(VL_PROGR_PROCESSO, 0);
1023
1024 pkg_utils.log_end_detail(VL_PROGR_PROCESSO,
1025 VL_PROGR_DETTAGLIO,
1026 0,
1027 NULL,
1028 NULL,
1029 NULL);
1030
1031 END COMPLETA_T062;
1032 /******************************************************************
1033
1034 CREATE_GERALT crea la tabella GER_ALT
1035 Deve essere chiamata dopo la denormalizzazione
1036 Nuovo metodo di generazione della ger_alt:
1037 i livelli 1 della ger_flat diventano i livlli 0 della ger_alt
1038
1039 **********************************************************************/
1040/* PROCEDURE CREATE_GERALT IS
1041 SQLSTRING CLOB;
1042 VARDTESTART DATE;
1043 VARDTEEND DATE;
1044 BEGIN
1045 VARDTESTART := TO_DATE('20000101', 'YYYYMMDD');
1046 VARDTEEND := TO_DATE('20991231', 'YYYYMMDD');
1047
1048 EXECUTE IMMEDIATE 'drop TABLE copia_geralt';
1049
1050 EXECUTE IMMEDIATE 'create table copia_geralt as select * from t052ger_alt';
1051
1052 EXECUTE IMMEDIATE 'truncate table t052ger_alt';
1053 -------------------- lev -2 ------------------------------------------------
1054 INSERT INTO T052GER_ALT
1055 (CODDIV, CODMODULE, CODNODE, LEV, DTESTART, DTEEND, CODERESP)
1056 SELECT T041.CODDIV,
1057 'PROM3',
1058 T.CODPARTY,
1059 -2,
1060 VARDTESTART,
1061 VARDTEEND,
1062 T041.CODUSR2
1063 FROM T040PARTY T
1064 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1065 WHERE T.FLGCUSTSALE = -1;
1066 -------------------- lev -1 ------------------------------------------------
1067 -- se codcat3 ha numoptional=-1 nel codtab(t902) CTP3 ----> allora insert
1068 INSERT INTO T052GER_ALT
1069 (CODDIV,
1070 CODMODULE,
1071 CODNODE,
1072 LEV,
1073 DTESTART,
1074 DTEEND,
1075 LEVGERSOURCE,
1076 CODNODEM1,
1077 CODNODE0,
1078 CODNODE1,
1079 CODNODE2,
1080 CODNODE3,
1081 CODERESP)
1082 SELECT '001',
1083 'PROM3',
1084 T.CODPARTY,
1085 -1,
1086 F.DTESTART,
1087 F.DTEEND,
1088 -1,
1089 T.CODPARTY,
1090 F.CODLEV1,
1091 F.CODLEV2,
1092 F.CODLEV4,
1093 F.CODLEV5,
1094 T041.CODUSR2
1095 FROM T040PARTY T
1096 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1097 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1098 WHERE F.LEV = -1
1099 AND EXISTS (SELECT *
1100 FROM T902TABROWS T902
1101 WHERE T902.CODTABROW = T.CODCAT3
1102 AND T902.NUMOPTIONAL = -1
1103 AND T902.CODTAB = 'CTP3');
1104 -------------------- lev 0 ------------------------------------------------
1105 INSERT INTO T052GER_ALT
1106 (CODDIV,
1107 CODMODULE,
1108 CODNODE,
1109 LEV,
1110 DTESTART,
1111 DTEEND,
1112 LEVGERSOURCE,
1113 CODNODE0,
1114 CODNODE1,
1115 CODNODE2,
1116 CODNODE3,
1117 CODERESP)
1118 SELECT '001',
1119 'PROM3',
1120 T.CODPARTY,
1121 0,
1122 F.DTESTART,
1123 F.DTEEND,
1124 0,
1125 T.CODPARTY,
1126 F.CODLEV2,
1127 F.CODLEV4,
1128 F.CODLEV5,
1129 T041.CODUSR2
1130 FROM T040PARTY T
1131 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1132 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1133 WHERE F.LEV = 1
1134 AND EXISTS (SELECT *
1135 FROM T902TABROWS T902
1136 WHERE T902.CODTABROW = T.CODCAT3
1137 AND T902.NUMOPTIONAL = -1
1138 AND T902.CODTAB = 'CTP3');
1139 -------------------- lev 1 ------------------------------------------------
1140 INSERT INTO T052GER_ALT
1141 (CODDIV,
1142 CODMODULE,
1143 CODNODE,
1144 LEV,
1145 DTESTART,
1146 DTEEND,
1147 LEVGERSOURCE,
1148 CODNODE1,
1149 CODNODE2,
1150 CODNODE3,
1151 CODERESP)
1152 SELECT '001',
1153 'PROM3',
1154 T.CODPARTY,
1155 1,
1156 F.DTESTART,
1157 F.DTEEND,
1158 2,
1159 T.CODPARTY,
1160 F.CODLEV4,
1161 F.CODLEV5,
1162 T041.CODUSR2
1163 FROM T040PARTY T
1164 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1165 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1166 WHERE F.LEV = 2
1167 AND EXISTS (SELECT *
1168 FROM T902TABROWS T902
1169 WHERE T902.CODTABROW = T.CODCAT3
1170 AND T902.NUMOPTIONAL = -1
1171 AND T902.CODTAB = 'CTP3');
1172 -------------------- lev 2 ------------------------------------------------
1173 INSERT INTO T052GER_ALT
1174 (CODDIV,
1175 CODMODULE,
1176 CODNODE,
1177 LEV,
1178 DTESTART,
1179 DTEEND,
1180 LEVGERSOURCE,
1181 CODNODE2,
1182 CODNODE3,
1183 CODERESP)
1184 SELECT '001',
1185 'PROM3',
1186 T.CODPARTY,
1187 2,
1188 F.DTESTART,
1189 F.DTEEND,
1190 4,
1191 T.CODPARTY,
1192 F.CODLEV5,
1193 T041.CODUSR2
1194 FROM T040PARTY T
1195 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1196 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1197 WHERE F.LEV = 4
1198 AND EXISTS (SELECT *
1199 FROM T902TABROWS T902
1200 WHERE T902.CODTABROW = T.CODCAT3
1201 AND T902.NUMOPTIONAL = -1
1202 AND T902.CODTAB = 'CTP3');
1203
1204 SPIATTELLA_T052;
1205
1206 COMMIT;
1207 END;
1208
1209 /******************************************************************
1210
1211 CREATE_GERALT_OLD crea la tabella GER_ALT
1212 Deve essere chiamata dopo la denormalizzazione
1213 Vecchio metodo di generazione della ger_alt:
1214 i livelli 0 della ger_flat diventano i livlli 0 della ger_alt
1215
1216 *********************************************************************
1217 PROCEDURE CREATE_GERALT_OLD IS
1218 SQLSTRING CLOB;
1219 VARDTESTART DATE;
1220 VARDTEEND DATE;
1221 BEGIN
1222 VARDTESTART := TO_DATE('20000101', 'YYYYMMDD');
1223 VARDTEEND := TO_DATE('20991231', 'YYYYMMDD');
1224 EXECUTE IMMEDIATE 'truncate table t052ger_alt';
1225 -------------------- lev -2 ------------------------------------------------
1226 INSERT INTO T052GER_ALT
1227 (CODDIV, CODMODULE, CODNODE, LEV, DTESTART, DTEEND, CODERESP)
1228 SELECT T041.CODDIV,
1229 'PROM3',
1230 T.CODPARTY,
1231 -2,
1232 VARDTESTART,
1233 VARDTEEND,
1234 T041.CODUSR2
1235 FROM T040PARTY T
1236 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1237 WHERE T.FLGCUSTSALE = -1;
1238 -------------------- lev -1 ------------------------------------------------
1239 -- se codcat3 ha numoptional=-1 nel codtab(t902) CTP3 ----> allora insert
1240 INSERT INTO T052GER_ALT
1241 (CODDIV,
1242 CODMODULE,
1243 CODNODE,
1244 LEV,
1245 DTESTART,
1246 DTEEND,
1247 LEVGERSOURCE,
1248 CODNODEM1,
1249 CODNODE0,
1250 CODNODE1,
1251 CODNODE2,
1252 CODERESP)
1253 SELECT '001',
1254 'PROM3',
1255 T.CODPARTY,
1256 -1,
1257 F.DTESTART,
1258 F.DTEEND,
1259 -1,
1260 T.CODPARTY,
1261 F.CODLEV0,
1262 F.CODLEV2,
1263 F.CODLEV4,
1264 T041.CODUSR2
1265 FROM T040PARTY T
1266 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1267 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1268 WHERE F.LEV = -1
1269 AND EXISTS (SELECT *
1270 FROM T902TABROWS T902
1271 WHERE T902.CODTABROW = T.CODCAT3
1272 AND T902.NUMOPTIONAL = -1
1273 AND T902.CODTAB = 'CTP3');
1274 -------------------- lev 0 ------------------------------------------------
1275 INSERT INTO T052GER_ALT
1276 (CODDIV,
1277 CODMODULE,
1278 CODNODE,
1279 LEV,
1280 DTESTART,
1281 DTEEND,
1282 LEVGERSOURCE,
1283 CODNODE0,
1284 CODNODE1,
1285 CODNODE2,
1286 CODERESP)
1287 SELECT '001',
1288 'PROM3',
1289 T.CODPARTY,
1290 0,
1291 F.DTESTART,
1292 F.DTEEND,
1293 0,
1294 T.CODPARTY,
1295 F.CODLEV2,
1296 F.CODLEV4,
1297 T041.CODUSR2
1298 FROM T040PARTY T
1299 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1300 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1301 WHERE F.LEV = 0
1302 AND EXISTS (SELECT *
1303 FROM T902TABROWS T902
1304 WHERE T902.CODTABROW = T.CODCAT3
1305 AND T902.NUMOPTIONAL = -1
1306 AND T902.CODTAB = 'CTP3');
1307 -------------------- lev 1 ------------------------------------------------
1308 INSERT INTO T052GER_ALT
1309 (CODDIV,
1310 CODMODULE,
1311 CODNODE,
1312 LEV,
1313 DTESTART,
1314 DTEEND,
1315 LEVGERSOURCE,
1316 CODNODE1,
1317 CODNODE2,
1318 CODERESP)
1319 SELECT '001',
1320 'PROM3',
1321 T.CODPARTY,
1322 1,
1323 F.DTESTART,
1324 F.DTEEND,
1325 2,
1326 T.CODPARTY,
1327 F.CODLEV4,
1328 T041.CODUSR2
1329 FROM T040PARTY T
1330 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1331 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1332 WHERE F.LEV = 2
1333 AND EXISTS (SELECT *
1334 FROM T902TABROWS T902
1335 WHERE T902.CODTABROW = T.CODCAT3
1336 AND T902.NUMOPTIONAL = -1
1337 AND T902.CODTAB = 'CTP3');
1338 -------------------- lev 2 ------------------------------------------------
1339 INSERT INTO T052GER_ALT
1340 (CODDIV,
1341 CODMODULE,
1342 CODNODE,
1343 LEV,
1344 DTESTART,
1345 DTEEND,
1346 LEVGERSOURCE,
1347 CODNODE2,
1348 CODERESP)
1349 SELECT '001',
1350 'PROM3',
1351 T.CODPARTY,
1352 2,
1353 F.DTESTART,
1354 F.DTEEND,
1355 4,
1356 T.CODPARTY,
1357 T041.CODUSR2
1358 FROM T040PARTY T
1359 INNER JOIN T052GER_FLAT F ON F.CODNODE = T.CODPARTY
1360 INNER JOIN T041PARTYDIV T041 ON T041.CODPARTY = T.CODPARTY
1361 WHERE F.LEV = 4
1362 AND EXISTS (SELECT *
1363 FROM T902TABROWS T902
1364 WHERE T902.CODTABROW = T.CODCAT3
1365 AND T902.NUMOPTIONAL = -1
1366 AND T902.CODTAB = 'CTP3');
1367
1368 SPIATTELLA_T052;
1369
1370 COMMIT;
1371 END;
1372*/
1373 /*******************************************************************
1374
1375 procedura che gestisce in modo totalmente Custom, cioe svincolato dalle
1376 regole delle tabelle int, un particolare processo, in questo caso il
1377 processo TXA1
1378
1379 ********************************************************************/
1380 PROCEDURE CUSTOM_TXA1(TIPOENV VARCHAR2 := '', VARUKID INT := 0) IS
1381 BEGIN
1382 --------
1383 BEGIN
1384 SET_READING_STATE(TIPOENV, 'TXA1', VARUKID);
1385 DELETE FROM T906TABROWSX WHERE CODTAB = 'VATMG';
1386 EXEC_SQL('insert into T906TABROWSX
1387 select substr(xtco,3,5), ''VATMG'',trim(xttxa1),
1388 trim(xttxa1)||''-''||xttaxa,null,xty6xtxex,''SYS'',0
1389 from f6x0119
1390 where xtukid = ' || VARUKID ||
1391 'and trim(xtenhv)=''' || TRIM(TIPOENV) || '''',
1392 '');
1393 COMMIT;
1394 SET_END_READING_STATE(TIPOENV, 'TXA1', VARUKID);
1395 COMMIT;
1396 EXCEPTION
1397 WHEN OTHERS THEN
1398 LOG_SCRIPT('ERRORE CUSTOM_TXA1 ' || SQLERRM, 'ERRORE CUSTOM_TXA1');
1399 SET_ERROR_READING_STATE(TIPOENV, 'TXA1', VARUKID, SQLERRM);
1400 END;
1401
1402 END;
1403
1404 /*----------DIV_XT_TO_OW---------------------
1405
1406 decodifica il codice divisione da XTEL a OW
1407
1408 ---------------------------------------------*/
1409 FUNCTION DIV_XT_TO_OW(CODDIV VARCHAR) RETURN VARCHAR2 IS
1410
1411 XTCO VARCHAR2(20);
1412
1413 BEGIN
1414
1415 XTCO := TRIM(LEADING 0 FROM CODDIV);
1416
1417 IF XTCO IN ('1', '2', '3', '4') THEN
1418
1419 RETURN '0000' || XTCO;
1420
1421 ELSE
1422
1423 RETURN '00001';
1424
1425 END IF;
1426
1427 END;
1428
1429/*
1430 FUNCTION DIV_XT_TO_OW(CODDIV VARCHAR) RETURN VARCHAR2 IS
1431 BEGIN
1432 IF CODDIV = '001' THEN
1433 RETURN '00001';
1434 ELSE
1435 IF CODDIV = '002' THEN
1436 RETURN '00002';
1437 ELSE
1438 IF CODDIV = '003' THEN
1439 RETURN '00003';
1440 ELSE
1441 IF CODDIV = '003' THEN
1442 RETURN '00003';
1443 ELSE
1444 IF CODDIV = '004' THEN
1445 RETURN '00004';
1446 ELSE
1447 RETURN '00001'; --- default
1448 END IF;
1449 END IF;
1450 END IF;
1451 END IF;
1452 END IF;
1453 END;*/
1454
1455 /*----------DIV_OW_TO_XT---------------------
1456
1457 decodifica il codice divisione da OW a XTEL
1458
1459 ---------------------------------------------*/
1460
1461 FUNCTION DIV_OW_TO_XT(XTCO VARCHAR) RETURN VARCHAR2 IS
1462
1463 CODDIV VARCHAR2(20);
1464
1465 BEGIN
1466
1467 CODDIV := TRIM(XTCO);
1468 CODDIV := TRIM(LEADING 0 FROM CODDIV);
1469-- RC 20170204
1470-- IF CODDIV IN ('1', '2', '3', '4', '5', '6', '7', '8') THEN
1471 IF CODDIV IN ('1', '2', '3', '4', '6', '7', '8') THEN
1472-- RC 20170204 end
1473 RETURN '00' || CODDIV;
1474
1475 ELSE
1476
1477 RETURN '001';
1478
1479 END IF;
1480
1481 end;
1482
1483 /*FUNCTION DIV_OW_TO_XT(XTCO VARCHAR) RETURN VARCHAR2 IS
1484 CODDIV VARCHAR2(20);
1485 BEGIN
1486 CODDIV := TRIM(XTCO);
1487 IF CODDIV = '00001' OR CODDIV = '1' THEN
1488 RETURN '001';
1489 ELSE
1490 IF CODDIV = '00002' OR CODDIV = '2' THEN
1491 RETURN '002';
1492 ELSE
1493 IF CODDIV = '00003' OR CODDIV = '3' THEN
1494 RETURN '003';
1495 ELSE
1496 IF CODDIV = '00004' OR CODDIV = '4' THEN
1497 RETURN '004';
1498 ELSE
1499 IF CODDIV = '00005' OR CODDIV = '5' THEN
1500 RETURN '005';
1501 ELSE
1502 IF CODDIV = '00006' OR CODDIV = '6' THEN
1503 RETURN '006';
1504 ELSE
1505 IF CODDIV = '00007' OR CODDIV = '7' THEN
1506 RETURN '007';
1507 ELSE
1508 IF CODDIV = '00008' OR CODDIV = '8' THEN
1509 RETURN '008';
1510 ELSE
1511 RETURN '001'; ---default
1512 END IF;
1513 END IF;
1514 END IF;
1515 END IF;
1516 END IF;
1517 END IF;
1518 END IF;
1519 END IF;
1520 END;
1521*/
1522/*CREATE_AS_IFNOTEXISTS
1523 tablename tabella da creare
1524 astable tabella da cui copiare i campi
1525 otherfields campi aggiuntivi
1526 BLNCOPYVAL 1:copia i valori 0: solo la struttura
1527 blnglobal: 1 = global temporary table
1528 */
1529 PROCEDURE CREATE_AS_IFNOTEXISTS(TABLENAME IN VARCHAR2,
1530 ASTABLE IN VARCHAR2,
1531 OTHERFIELDS IN VARCHAR2 := '',
1532 BLNCOPYVAL IN INT := 0,
1533 BLNGLOBAL NUMBER := 0) IS
1534 TBNAME VARCHAR2(30);
1535 SQLSTMNT VARCHAR2(8000);
1536 CTAB INT;
1537 STRFIELDLIST VARCHAR2(8000);
1538 STRGLOBAL VARCHAR2(255);
1539 BEGIN
1540 CTAB := 0;
1541 TBNAME := 'notfound';
1542 STRGLOBAL := '';
1543 SELECT COUNT(*)
1544 INTO CTAB
1545 FROM USER_TABLES
1546 WHERE TRIM(UPPER(TABLE_NAME)) = TRIM(UPPER(TABLENAME));
1547 IF CTAB = 0 THEN
1548
1549 /* CREA COPIA DIRETTA
1550 sqlStmnt:='CREATE TABLE ' || UPPER(Tablename) || ' ' || par || ' ' || ' AS SELECT a.* ' || otherfields ||' FROM ' || UPPER(astable) || ' a';
1551
1552 */
1553 IF BLNGLOBAL = 1 THEN
1554 STRGLOBAL := ' GLOBAL TEMPORARY ';
1555 END IF;
1556 SQLSTMNT := 'CREATE ' || STRGLOBAL || ' TABLE ' || TABLENAME ||
1557 ' AS SELECT t.* ' || OTHERFIELDS || ' FROM ' || ASTABLE ||
1558 ' t ';
1559 IF BLNCOPYVAL = 0 THEN
1560 SQLSTMNT := SQLSTMNT || ' WHERE 1=2';
1561 END IF;
1562 EXEC_SQL(SQLSTMNT);
1563 COMMIT;
1564
1565 END IF;
1566 END;
1567 /*COPY_ALL_VALUES
1568 Copia tutti i valori di una tabella
1569 nell'altra.
1570 varTabFrom tabella di partenza
1571 varTabTo tabella di destinazione
1572 */
1573 PROCEDURE COPY_ALL_VALUES(VARTABTO IN VARCHAR2, VARTABFROM IN VARCHAR2) IS
1574
1575 BEGIN
1576 EXEC_SQL('INSERT INTO ' || VARTABTO || ' ( ' ||
1577 Z_PKG_XTEL_IMPORT.GET_FIELD_LIST(VARTABFROM, 1) ||
1578 ' ) SELECT ' || GET_FIELD_LIST(VARTABFROM, 1) || ' FROM ' ||
1579 VARTABFROM);
1580
1581 END;
1582 /*----------------------- DROP_TAB_IFEXISTS ----------------------------
1583 tablename: tabella da cancellare
1584 -- Cancella una tabella se esiste
1585 ------------------------------------------------------------------*/
1586 PROCEDURE DROP_TAB_IFEXISTS(TABLENAME IN VARCHAR2) IS
1587 TBNAME VARCHAR2(255);
1588 SQLSTMNT VARCHAR2(4000);
1589 CTAB INT;
1590 BEGIN
1591 CTAB := 0;
1592 TBNAME := 'notfound';
1593 SELECT COUNT(*)
1594 INTO CTAB
1595 FROM USER_TABLES
1596 WHERE TRIM(UPPER(TABLE_NAME)) = TRIM(UPPER(TABLENAME));
1597
1598 IF CTAB > 0 THEN
1599 SQLSTMNT := 'DROP table ' || TABLENAME || ' CASCADE CONSTRAINTS ';
1600 EXEC_SQL(SQLSTMNT);
1601 END IF;
1602
1603 END;
1604 /*----------------------- EXEC_SQL ----------------------------
1605 ESEGUE LO STATEMENT GENERICO SQL_STRING
1606 ECCEZIONE NON GESTITA
1607 SQL_STRING: sql statement da eseguire
1608 LOG_ID : id progressivo del log della procedura
1609 LOGSQL_ID : id progressivo del singolo statement all'interno della procedura
1610 -- Cancella una tabella se esiste
1611 ------------------------------------------------------------------*/
1612 PROCEDURE EXEC_SQL(SQL_STRING IN VARCHAR2, STRDESC IN VARCHAR2 := '') IS
1613 -- ESEGUE LO STATEMENT GENERICO SQL_STRING
1614 -- ECCEZIONE NON GESTITA
1615 TIMEINI DATE;
1616 TIMEEND DATE;
1617 I1 INT;
1618 I2 INT;
1619 I3 INT;
1620 VARTABSPACE VARCHAR2(255);
1621 BEGIN
1622 ----LOGSQL_ID := LOGSQL_ID + 1;
1623 TIMEINI := xSYSDATE;
1624 LOG_SCRIPT(TO_CHAR(TIMEINI, 'HH24:MI:SS -->') || 'START EXECUTE: ' ||
1625 SQL_STRING,
1626 STRDESC,
1627 0,
1628 4);
1629
1630 EXECUTE IMMEDIATE SQL_STRING;
1631 TIMEEND := xSYSDATE;
1632 --LOG SOLO SU DB (devo ripetere il comando per riconoscere la riga)
1633 LOG_SCRIPT(SQL_STRING, STRDESC, TIMEINI - TIMEEND, 4);
1634 --LOG SOLO SU FILE ( non ripeto il comando..)
1635
1636 END;
1637 /* ************ GET_CODPARTY_EXP ************************/
1638 FUNCTION EXP_CODPARTY(CODPARTY VARCHAR2) RETURN VARCHAR2 IS
1639 STRRET VARCHAR2(255);
1640 BEGIN
1641 IF SUBSTR(CODPARTY, 1, 2) IN
1642 ('CC', 'CT', 'AS', 'GR', 'SG', 'CG', 'CN', 'PV') THEN
1643 STRRET := TRIM(SUBSTR(CODPARTY, 3));
1644
1645 ELSE
1646 STRRET := TRIM(CODPARTY);
1647 END IF;
1648 IF IS_NUMERIC(STRRET) = 0 THEN
1649 RETURN '0';
1650 ELSE
1651 RETURN NVL(TRIM(STRRET), '0');
1652 END IF;
1653
1654 END;
1655 /* FUNCTION FIND_VALCONV
1656 trova il valore di conversione
1657 */
1658 FUNCTION FIND_VALCONV(VARCODART VARCHAR2,
1659 VARUMFROM VARCHAR2,
1660 VARUMTO VARCHAR2) RETURN NUMBER IS
1661 CURSOR CUR_UMTO IS
1662 SELECT DISTINCT UMTO
1663 FROM T062UMCONV T
1664 INNER JOIN T060ARTICLE A ON A.CODART = T.CODART
1665 AND A.CODDIV = T.CODDIV;
1666 CURSOR CUR_UMFROM(VTO VARCHAR2) IS
1667 SELECT DISTINCT UMFROM
1668 FROM T062UMCONV T
1669 INNER JOIN T060ARTICLE A ON A.CODART = T.CODART
1670 AND A.CODDIV = T.CODDIV
1671 AND T.UMTO = VTO;
1672 VALRET NUMBER;
1673 INTCOUNT NUMBER;
1674 VARTMPUMFROM VARCHAR2(255);
1675 VARTMPUMTO VARCHAR2(255);
1676 VALTMPRET NUMBER;
1677 BLNOK BOOLEAN;
1678 BEGIN
1679 VALRET := 1;
1680 BLNOK := FALSE;
1681 SELECT COUNT(*)
1682 INTO INTCOUNT
1683 FROM T062UMCONV T
1684 WHERE T.CODART = VARCODART
1685 AND T.UMFROM = VARUMFROM
1686 AND T.UMTO = VARUMTO;
1687 IF INTCOUNT > 0 THEN
1688 SELECT T.VALCONVFACT
1689 INTO VALRET
1690 FROM T062UMCONV T
1691 WHERE T.CODART = VARCODART
1692 AND T.UMFROM = VARUMFROM
1693 AND T.UMTO = VARUMTO;
1694 BLNOK := TRUE;
1695 ELSE
1696 VARTMPUMTO := VARUMTO;
1697 OPEN CUR_UMFROM(VARTMPUMTO);
1698 LOOP
1699 FETCH CUR_UMFROM
1700 INTO VARTMPUMFROM;
1701 EXIT WHEN CUR_UMFROM%NOTFOUND;
1702 VALRET := 1;
1703 LOOP
1704 ----- se tra queste c'e la conversione buona
1705 SELECT COUNT(*)
1706 INTO INTCOUNT
1707 FROM T062UMCONV T
1708 WHERE T.CODART = VARCODART
1709 AND T.UMFROM = VARTMPUMFROM
1710 AND T.UMTO = VARTMPUMTO;
1711 IF INTCOUNT > 0 THEN
1712 SELECT T.VALCONVFACT
1713 INTO VALTMPRET
1714 FROM T062UMCONV T
1715 WHERE T.CODART = VARCODART
1716 AND T.UMFROM = VARTMPUMFROM
1717 AND T.UMTO = VARTMPUMTO;
1718 VALRET := VALRET * VALTMPRET;
1719
1720 ELSE
1721 EXIT; --errore
1722 END IF;
1723 --fine
1724 IF VARTMPUMFROM = VARUMFROM THEN
1725 BLNOK := TRUE;
1726 EXIT; --OK!!!!!!!
1727
1728 ELSE
1729 VARTMPUMTO := VARTMPUMFROM; -- vado a ritroso--
1730 --selezioniamo un altro umfrom
1731 SELECT COUNT(*)
1732 INTO INTCOUNT
1733 FROM T062UMCONV T
1734 WHERE T.CODART = VARCODART
1735 AND T.UMTO = VARTMPUMTO
1736 AND T.UMFROM = VARUMFROM;
1737 --- vedo se ci sono subito conversioni finali..
1738 IF INTCOUNT > 0 THEN
1739 VARTMPUMFROM := VARUMFROM; --se si , allora imposto il from come il from finale
1740 ELSE
1741 ---altrimenti ne prendo un altro, il MAX, mettiamo..
1742 SELECT COUNT(*)
1743 INTO INTCOUNT
1744 FROM T062UMCONV T
1745 WHERE T.CODART = VARCODART
1746 AND T.UMTO = VARTMPUMTO;
1747
1748 ---conversioni dalla UmTo
1749 IF INTCOUNT = 0 THEN
1750 EXIT; --esco,errore, almeno una deve esserci
1751 END IF;
1752 SELECT MAX(UMFROM)
1753 INTO VARTMPUMFROM
1754 FROM T062UMCONV T
1755 WHERE T.CODART = VARCODART
1756 AND T.UMTO = VARTMPUMTO;
1757 END IF;
1758 END IF;
1759 END LOOP;
1760 IF BLNOK = TRUE THEN
1761 EXIT;
1762 END IF;
1763 END LOOP;
1764 END IF;
1765 IF BLNOK = TRUE THEN
1766 RETURN VALRET;
1767 ELSE
1768 RETURN 0;
1769 END IF;
1770
1771 END;
1772 /**************************GENERAL_IMPORT*********************************************************
1773 Procedura di update automatica basata sulle tabelle tb_int
1774 varTablename varchar2 Nome tabella di SM1 in cui si importa
1775 intUkid number ID del processo (tablella f6x0001 vassoio)
1776 varOper varchar2 codice operazione (campo codoper tabelle TB_INT_xxx)
1777 blnComplete number:=1 1: esegue anche l'inserimento dai vassoi alle XIN 0: solo update
1778 blnBulk number:=1 1: insert-update bulk, massivo: le tabelle di destinazione possono rimanere inutilizzabilt
1779 per diversi minuti poiche avviene via TRUNCATE + INSERT della tabella Sm1
1780 0: insert-update record per record: processo molto piu lento ma meno invasivo, in quanto
1781 aggiorna o inserisce un record alla volta.
1782 blnOnlyUpdate number:=0 1: Esegue solo un Update, ovvero non inserisce record nuovi. 0: inserisce anche record nuovi
1783 varEnv :='' PY o PD
1784 varParentKey varchar2:='' campo della tabella di destinazione legato ad una tabella parent (vedi TB_INT_PROCESSI)
1785 varParentKeyVal varchar2:=''
1786 varParentTable varchar2:='' tabella parent (vedi TB_INT_PROCESSI)
1787 varParentTableField varchar2:='' campo chiave nella tabella parent (vedi TB_INT_PROCESSI)
1788 varParentKey2 varchar2 campo chiave 2 per una chiave composta a 2 valori
1789 varParentKeyVal2 varchar2 valore del campo chiave 2
1790 varParentTableField2 varchar2 nome del campo chiave 2 nella tab parent
1791 ***********************************************************************************/
1792 PROCEDURE GENERAL_IMPORT(VARTABLENAME VARCHAR2,
1793 INTUKID NUMBER,
1794 VAROPER VARCHAR2,
1795 IDLOG NUMBER,
1796 BLNCOMPLETE NUMBER := 1,
1797 BLNBULK NUMBER := 1,
1798 BLNONLYUPDATE NUMBER := 0,
1799 VARENV VARCHAR2 := '',
1800 VARPARENTKEY VARCHAR2 := '',
1801 VARPARENTKEYVAL VARCHAR2 := '',
1802 VARPARENTTABLE VARCHAR2 := '',
1803 VARPARENTTABLEFIELD VARCHAR2 := '',
1804 VARPARENTKEY2 VARCHAR2 := '',
1805 VARPARENTKEYVAL2 VARCHAR2 := '',
1806 VARPARENTTABLEFIELD2 VARCHAR2 := '',
1807 VARXINTABLE VARCHAR2 := ''
1808 ) IS
1809 SQLSTRING CLOB;
1810 CURSOR CUR_FIELDS(VARCODOPER VARCHAR2) IS
1811 SELECT *
1812 FROM TB_INT_TABFIELDS T
1813 WHERE LOWER(TRIM(T.CODOPER)) = LOWER(TRIM(VARCODOPER))
1814 AND T.ENABLE = 1
1815 ORDER BY T.FIELDNAME;
1816 CURSOR CUR_CHILDPROC(VARCODOPER VARCHAR2) IS
1817 SELECT *
1818 FROM TB_INT_PROCESSI T
1819 WHERE LOWER(TRIM(T.PARENTTABLE)) IN
1820 (SELECT LOWER(TRIM(T2.TABLENAME))
1821 FROM TB_INT_PROCESSI T2
1822 WHERE LOWER(TRIM(T2.CODOPER)) = LOWER(TRIM(VARCODOPER)))
1823 AND T.DIRINPUT = 1
1824 ORDER BY T.TABLENAME;
1825
1826 CURSOR CUR_FDEST(VARTABLE VARCHAR2) IS
1827 SELECT COLUMN_NAME
1828 FROM USER_TAB_COLUMNS
1829 WHERE LOWER(TRIM(TABLE_NAME)) = LOWER(TRIM(VARTABLE))
1830 ORDER BY COLUMN_ID;
1831
1832 CURSOR CUR_TABFROM(VARCODOPER VARCHAR2) IS
1833 SELECT DISTINCT TABFROM
1834 FROM TB_INT_TABFIELDS T
1835 WHERE LOWER(TRIM(T.CODOPER)) = LOWER(TRIM(VARCODOPER))
1836 AND T.TABFROM IS NOT NULL;
1837
1838 INTPROCLOGDETT NUMBER;
1839 INTREC NUMBER;
1840 STRTIPOJOIN VARCHAR2(255);
1841 STRENVIRONMENT VARCHAR2(255);
1842 PREFIX VARCHAR2(10);
1843 BEGIN
1844 IF TRIM(VARENV) IS NULL THEN
1845 STRENVIRONMENT := GET_ENVIRONMENT;
1846 ELSE
1847 STRENVIRONMENT := TRIM(VARENV);
1848 END IF;
1849 UPDATE TB_INT_TABWHEREPARAM T
1850 SET T.TABPARVALUE = INTUKID
1851 WHERE T.TABPARNAME = '@XTUKID' -- vale per tutte le tabelle
1852 AND LOWER(TRIM(T.CODOPER)) IN (VAROPER);
1853 COMMIT;
1854 UPDATE TB_INT_TABWHEREPARAM T
1855 SET T.TABPARVALUE = '''' || STRENVIRONMENT || ''''
1856 WHERE T.TABPARNAME = '@XTENHV' -- vale per tutte le tabelle
1857 AND LOWER(TRIM(T.CODOPER)) IN (VAROPER);
1858 COMMIT;
1859 IF BLNONLYUPDATE = 2 THEN
1860 Z_PKG_XTEL_IMPORT.EXEC_SQL('TRUNCATE TABLE ' || VARTABLENAME);
1861
1862 END IF;
1863 IF BLNCOMPLETE = 1 THEN
1864 Z_PKG_XTEL_IMPORT.EXEC_SQL('TRUNCATE TABLE ' || VARXINTABLE);
1865 Z_PKG_XTEL_IMPORT.AUTOINSERT(VAROPER); --- banche clienti
1866 FOR ROW_TABFROM IN CUR_TABFROM(VAROPER) LOOP
1867 PREFIX := GET_TAB_PREFIX(ROW_TABFROM.TABFROM);
1868 UPDATE_ROW_READ(INTUKID,
1869 PREFIX,
1870 ROW_TABFROM.TABFROM,
1871 STRENVIRONMENT);
1872 END LOOP;
1873 END IF;
1874 IF BLNONLYUPDATE IN (0, 2) THEN
1875 STRTIPOJOIN := ' FULL OUTER JOIN ';
1876
1877 ELSE
1878 STRTIPOJOIN := ' FULL OUTER JOIN '; -- DISABILITATO, PER ORA ' INNER JOIN ';
1879
1880 END IF;
1881 IF BLNBULK = 1 THEN
1882 INTPROCLOGDETT := pkg_utils.log_new_detail(IDLOG,
1883 SUBSTR(VAROPER,
1884 1,
1885 15),
1886 VARTABLENAME,
1887 0,
1888 NULL);
1889 Z_PKG_XTEL_IMPORT.CREATE_AS_IFNOTEXISTS(VARTABLENAME || 'OLD',
1890 VARTABLENAME,
1891 '',
1892 0);
1893 EXEC_SQL('TRUNCATE TABLE ' || VARTABLENAME || 'OLD');
1894 COPY_ALL_VALUES(VARTABLENAME || 'OLD', VARTABLENAME);
1895 --- Z_PKG_XTEL_IMPORT.DROP_TAB_IFEXISTS(varTablename || 'OLD');
1896
1897 Z_PKG_XTEL_IMPORT.CREATE_AS_IFNOTEXISTS(VARTABLENAME || 'NEW',
1898 VARTABLENAME,
1899 '',
1900 0);
1901 EXEC_SQL('TRUNCATE TABLE ' || VARTABLENAME || 'NEW');
1902
1903 SQLSTRING := ' INSERT INTO ' || VARTABLENAME || 'NEW (';
1904 FOR RL_CUR_FDEST IN CUR_FDEST(VARTABLENAME) LOOP
1905 SQLSTRING := SQLSTRING || RL_CUR_FDEST.COLUMN_NAME || ' ,';
1906 END LOOP;
1907
1908 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
1909 SQLSTRING := SQLSTRING || ' ) SELECT '; --/*+ index(XIN_' || varTablename || ') index(' || varTablename || 'OLD) */ ';
1910 FOR RL_CUR_FDEST IN CUR_FDEST(VARTABLENAME) LOOP
1911 SQLSTRING := SQLSTRING || ' CASE WHEN TRIM(TO_CHAR(' || VARXINTABLE || '.' || RL_CUR_FDEST.COLUMN_NAME ||
1912 '))=''VUOTA'' THEN NULL ELSE ';
1913 SQLSTRING := SQLSTRING || 'NVL(trim(' || VARXINTABLE || '.' ||
1914 RL_CUR_FDEST.COLUMN_NAME || ') ,
1915 ' || VARTABLENAME || 'OLD.' ||
1916 RL_CUR_FDEST.COLUMN_NAME || ') END AS ' ||
1917 RL_CUR_FDEST.COLUMN_NAME || ' ,';
1918 END LOOP;
1919
1920 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
1921
1922 SQLSTRING := SQLSTRING || ' FROM ' || VARTABLENAME || 'OLD ' ||
1923 STRTIPOJOIN || ' ' || VARXINTABLE || ' ON ';
1924 FOR ROW_FIELDS IN CUR_FIELDS(VAROPER) LOOP
1925 IF ROW_FIELDS.ISKEY = 1 THEN
1926 SQLSTRING := SQLSTRING || ' ' || VARXINTABLE || '.' ||
1927 ROW_FIELDS.FIELDNAME || ' =
1928 ' || VARTABLENAME || 'OLD.' ||
1929 ROW_FIELDS.FIELDNAME || ' AND';
1930 END IF;
1931
1932 END LOOP;
1933
1934 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 3);
1935 IF TRIM(VARPARENTTABLE) IS NOT NULL THEN
1936 IF TRIM(VARPARENTKEY) IS NOT NULL AND TRIM(VARPARENTKEY2) IS NULL THEN
1937 ---- una chiave esterna singola
1938 SQLSTRING := SQLSTRING || ' WHERE ' || VARXINTABLE || '.' ||
1939 VARPARENTKEY || ' in (select ' ||
1940 VARPARENTTABLEFIELD || ' from ' || VARPARENTTABLE || ')
1941 OR ' || VARTABLENAME || 'OLD.' ||
1942 VARPARENTKEY || ' in (select ' ||
1943 VARPARENTTABLEFIELD || ' from ' || VARPARENTTABLE || ')
1944 ';
1945 ELSE
1946 IF TRIM(VARPARENTKEY) IS NOT NULL AND
1947 TRIM(VARPARENTKEY2) IS NOT NULL THEN
1948 ---- una chiave esterna singola
1949 ---- una chiave esterna doppia
1950 SQLSTRING := SQLSTRING || ' WHERE TO_CHAR(' ||
1951 VARXINTABLE || '.' || VARPARENTKEY || ')
1952 in (select ' ||
1953 VARPARENTTABLEFIELD || '
1954 from ' || VARPARENTTABLE ||
1955 ' p where p.' || VARPARENTTABLEFIELD2 || '=
1956 ' ||
1957 VARXINTABLE || '.' || VARPARENTKEY2 ||
1958 ' )
1959 OR
1960 ' || VARTABLENAME || 'OLD.' ||
1961 VARPARENTKEY || '
1962 in (select ' ||
1963 VARPARENTTABLEFIELD || '
1964 from ' || VARPARENTTABLE ||
1965 ' p where ' || VARTABLENAME || 'OLD.' ||
1966 VARPARENTKEY2 || '=
1967 p.' ||
1968 VARPARENTTABLEFIELD2 || '
1969 )
1970 ';
1971 END IF;
1972 END IF;
1973
1974 END IF;
1975
1976 BEGIN
1977 Z_PKG_XTEL_IMPORT.EXEC_SQL(SQLSTRING);
1978
1979 EXEC_SQL('TRUNCATE TABLE ' || VARTABLENAME);
1980
1981 SQLSTRING := ' INSERT INTO ' || VARTABLENAME || '
1982 (';
1983 FOR RL_CUR_FDEST IN CUR_FDEST(VARTABLENAME) LOOP
1984 SQLSTRING := SQLSTRING || RL_CUR_FDEST.COLUMN_NAME || ' ,';
1985 END LOOP;
1986
1987 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
1988 SQLSTRING := SQLSTRING || ') SELECT ';
1989 FOR RL_CUR_FDEST IN CUR_FDEST(VARTABLENAME) LOOP
1990 SQLSTRING := SQLSTRING || RL_CUR_FDEST.COLUMN_NAME || ' ,';
1991 END LOOP;
1992
1993 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
1994 SQLSTRING := SQLSTRING || ' FROM ' || VARTABLENAME || 'NEW';
1995
1996 EXEC_SQL(SQLSTRING);
1997 ---log finale, tutto ok
1998
1999 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || VARXINTABLE
2000 INTO INTREC;
2001 pkg_utils.log_end_detail(IDLOG,
2002 INTPROCLOGDETT,
2003 0,
2004 INTREC,
2005 INTREC,
2006 0);
2007 EXCEPTION
2008 WHEN OTHERS THEN
2009 --ripristino dalla OLD e logging..
2010
2011 pkg_utils.log_new_detail_error(IDLOG,
2012 INTPROCLOGDETT,
2013 SUBSTR(SQLCODE, 1, 20),
2014 SQLERRM);
2015
2016 LOG_SCRIPT('ERROR:' || SQLERRM, 'ERRORE IMPORTAZIONE');
2017 EXEC_SQL('INSERT INTO ' || VARTABLENAME || ' SELECT * FROM ' ||
2018 VARTABLENAME || 'OLD ');
2019 RAISE_APPLICATION_ERROR(-20201, SQLERRM);
2020 END;
2021 ELSE
2022 ---- modalita record per record, non bulk.
2023 ----- ciclo sui record delle XIN e di volta in volta valuto un INSERT o UN UPDATE
2024
2025 SQLSTRING := '
2026 DECLARE
2027 CURSOR CL_XIN
2028 is select t.* from ' || VARXINTABLE ||
2029 ' t ';
2030 IF TRIM(VARPARENTTABLE) IS NOT NULL THEN
2031 SQLSTRING := SQLSTRING || ' INNER JOIN ' || VARPARENTTABLE || ' t2
2032 ON t.' || VARPARENTKEY || ' = t2.' ||
2033 VARPARENTTABLEFIELD;
2034 IF TRIM(VARPARENTKEY2) IS NOT NULL THEN
2035 SQLSTRING := SQLSTRING || ' AND t.' || VARPARENTKEY2 || ' = t2.' ||
2036 VARPARENTTABLEFIELD2;
2037 END IF;
2038 IF TRIM(VARPARENTKEYVAL) IS NOT NULL THEN
2039 SQLSTRING := SQLSTRING || ' WHERE t.' || VARPARENTKEY || ' = ''' ||
2040 VARPARENTKEYVAL || '''';
2041 END IF;
2042 IF TRIM(VARPARENTKEYVAL2) IS NOT NULL THEN
2043 SQLSTRING := SQLSTRING || ' AND t.' || VARPARENTKEY2 || ' = ''' ||
2044 VARPARENTKEYVAL2 || '''';
2045 END IF;
2046 END IF;
2047
2048 SQLSTRING := SQLSTRING || ' ;
2049 vl_data_inizio_proc date := xsysdate ;
2050 vl_messaggio varchar2(2000) := null ;
2051 vl_sqlerrm varchar2(2000) := null ;
2052 vl_progr_dettaglio number := 0 ;
2053 vl_conta_xin number := 0 ;
2054 vl_ins_xin number := 0 ;
2055 vl_conta number := 0 ;
2056 vl_exception exception;
2057 vl_dis number := 0 ;
2058 vl_ok number := 0 ;
2059 vl_esito_caricamento number := 0 ;
2060 BEGIN
2061 vl_progr_dettaglio := pkg_utils.log_new_detail (
2062 ' || TO_CHAR(IDLOG) ||
2063 ' ,
2064 ''' ||
2065 SUBSTR(VAROPER, 1, 15) ||
2066 ''' ,
2067 ''' || VARTABLENAME ||
2068 ''' ,
2069 0 ,
2070 null ) ;
2071 for RL_XIN in CL_XIN loop
2072 --
2073 vl_conta_xin := vl_conta_xin + 1 ;
2074 vl_conta := vl_conta + 1 ;
2075 vl_dis := 0 ;
2076 vl_esito_caricamento := 0 ;
2077 --
2078 Begin
2079 vl_conta := 0;
2080 --
2081 Select count(*)
2082 into vl_conta
2083 from ' || VARTABLENAME || '
2084 WHERE ';
2085 FOR ROW_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2086 IF ROW_FIELDS.ISKEY = 1 THEN
2087 SQLSTRING := SQLSTRING || ' ' || VARTABLENAME || '.' ||
2088 ROW_FIELDS.FIELDNAME || ' =
2089 RL_XIN.' || ROW_FIELDS.FIELDNAME ||
2090 ' AND';
2091 END IF;
2092
2093 END LOOP;
2094
2095 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 3);
2096
2097 --
2098 SQLSTRING := SQLSTRING || ' ;
2099 If vl_conta > 0 then
2100 ----------------- aggiornamento --------------------------------------------
2101 update /*+ INDEX(t) */ ' || VARTABLENAME ||
2102 ' t set ';
2103 FOR RL_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2104 IF RL_FIELDS.ISKEY = 0 THEN
2105 -- non aggiorno le chiavi, ovviamente..
2106 SQLSTRING := SQLSTRING || RL_FIELDS.FIELDNAME || '=' ||
2107
2108 ' CASE WHEN TRIM(TO_CHAR(RL_XIN.' ||
2109 RL_FIELDS.FIELDNAME ||
2110 '))=''VUOTA''
2111 THEN NULL ELSE
2112 NVL(TRIM(RL_XIN.' ||
2113 RL_FIELDS.FIELDNAME || '),t.' || RL_FIELDS.FIELDNAME ||
2114 ' ) END ,';
2115 END IF;
2116 END LOOP;
2117 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
2118 SQLSTRING := SQLSTRING || ' WHERE ';
2119 FOR ROW_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2120 IF ROW_FIELDS.ISKEY = 1 THEN
2121 SQLSTRING := SQLSTRING || ' t.' || ROW_FIELDS.FIELDNAME || ' =
2122 RL_XIN.' ||
2123 ROW_FIELDS.FIELDNAME || ' AND';
2124 END IF;
2125
2126 END LOOP;
2127
2128 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 3);
2129 SQLSTRING := SQLSTRING || ' ;
2130 ';
2131 IF BLNONLYUPDATE IN (0, 2) THEN
2132 --- se non SOLO update, ma anche insert....
2133 SQLSTRING := SQLSTRING || '
2134 else
2135 ----------------- inserimento --------------------------------------------
2136 insert into ' || VARTABLENAME ||
2137 ' (';
2138
2139 FOR RL_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2140 SQLSTRING := SQLSTRING || RL_FIELDS.FIELDNAME || ' ,';
2141 END LOOP;
2142 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
2143
2144 SQLSTRING := SQLSTRING || ')
2145 SELECT ';
2146 FOR RL_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2147 SQLSTRING := SQLSTRING || ' CASE WHEN TRIM(TO_CHAR(' ||
2148 RL_FIELDS.FIELDNAME ||
2149 '))=''VUOTA''
2150 THEN NULL ELSE
2151 ' ||
2152 RL_FIELDS.FIELDNAME || ' END ,';
2153 ---SQLSTRING := SQLSTRING || RL_FIELDS.FIELDNAME || ' ,';
2154
2155 END LOOP;
2156 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
2157
2158 SQLSTRING := SQLSTRING || ' FROM ' || VARXINTABLE ||
2159 ' t WHERE ';
2160 FOR ROW_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2161 IF ROW_FIELDS.ISKEY = 1 THEN
2162 SQLSTRING := SQLSTRING || ' t.' || ROW_FIELDS.FIELDNAME || ' =
2163 RL_XIN.' ||
2164 ROW_FIELDS.FIELDNAME || ' AND';
2165 END IF;
2166
2167 END LOOP;
2168
2169 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 3);
2170
2171 SQLSTRING := SQLSTRING || ' ; ';
2172 END IF;
2173 --- in ogni caso chiudiamo l'if...
2174 SQLSTRING := SQLSTRING || ' end if;
2175 commit;
2176 ';
2177 --- se ci sono processi figli, li lanciamo ricorsivamente da qua
2178 /* FOR ROW_PROC IN CUR_CHILDPROC(varOper) LOOP
2179 sqlstring:= sqlstring || '
2180 Z_PKG_XTEL_IMPORT.GENERAL_IMPORT('''|| ROW_PROC.TABLENAME || ''',
2181 ' || intUkid || ',
2182 '''|| ROW_PROC.CODOPER || ''',' || idLog || ',
2183 0,
2184 0,' || blnOnlyUpdate || ',
2185 ''' || ROW_PROC.PARENTKEY || ''',
2186 RL_XIN.' || ROW_PROC.PARENTTABLEFIELD || ',
2187 ''' || ROW_PROC.PARENTTABLE || ''',
2188 ''' || ROW_PROC.PARENTTABLEFIELD || ''',';
2189
2190 if trim(ROW_PROC.PARENTKEY2) is not null then
2191 sqlstring:= sqlstring || '''' || ROW_PROC.PARENTKEY2 || ''',
2192 RL_XIN.' || ROW_PROC.PARENTTABLEFIELD2 || ',
2193 ''' || ROW_PROC.PARENTTABLEFIELD2 || '''';
2194 else
2195 sqlstring:= sqlstring || 'null,null,null';
2196
2197 end if;
2198 sqlstring:= sqlstring || ' ); ';
2199
2200 END LOOP;*/
2201
2202 SQLSTRING := SQLSTRING || '
2203 exception
2204 when others then
2205 vl_dis := 0 ;
2206 vl_esito_caricamento := -1;
2207 vl_messaggio := ''Errore in aggiornamento ' ||
2208 VARTABLENAME || ' : ';
2209 FOR ROW_FIELDS IN CUR_FIELDS(VAROPER) LOOP
2210 IF ROW_FIELDS.ISKEY = 1 THEN
2211 SQLSTRING := SQLSTRING || ROW_FIELDS.FIELDNAME || ' =
2212 '' || RL_XIN.' ||
2213 ROW_FIELDS.FIELDNAME || ' || '' ';
2214 END IF;
2215
2216 END LOOP;
2217
2218 SQLSTRING := SQLSTRING || SUBSTR(SQLERRM, 1, 1000);
2219 SQLSTRING := SQLSTRING || ' '';
2220 dbms_output.put_line(substr(vl_messaggio,1,255));
2221 pkg_utils.log_new_detail_error (
2222 ' || TO_CHAR(IDLOG) ||
2223 ' ,
2224 vl_progr_dettaglio,
2225 '' '' ,
2226 vl_messaggio ) ;
2227 end;
2228 end loop;
2229 pkg_utils.log_end_detail( ' ||
2230 TO_CHAR(IDLOG) || ',
2231 vl_progr_dettaglio,
2232 0,
2233 vl_conta_xin,
2234 vl_conta_xin,
2235 0);
2236 END;
2237 ';
2238 Z_PKG_XTEL_IMPORT.EXEC_SQL(SQLSTRING);
2239 COMMIT;
2240
2241 END IF;
2242
2243 END;
2244 /**/
2245 FUNCTION GET_BLANK_VAL RETURN VARCHAR2 IS
2246 BEGIN
2247 RETURN 'BLANK';
2248 END;
2249 /*********************FUNCTION GET_COD_LEVCLI(codcli varchar2)
2250 Ricava il codice tipo cliente nella codifica rovagnati
2251
2252 */
2253 FUNCTION GET_COD_LEVCLI(CODCLI VARCHAR2) RETURN VARCHAR2 IS
2254 INTCOUNT INT;
2255 CODRET VARCHAR2(20);
2256 LEVCLI INT;
2257
2258 BEGIN
2259 SELECT COUNT(*)
2260 INTO INTCOUNT
2261 FROM TB0042RELATIONS_STATIC T
2262 WHERE TRIM(T.CODnode) = TRIM(CODCLI) and
2263 t.coddim = 'CUST' and
2264 t.codhier = 'COMM' and
2265 t.coddiv = '001';
2266
2267 IF INTCOUNT > 0 THEN
2268 SELECT MIN(T.idlevel)
2269 INTO LEVCLI
2270 FROM TB0042RELATIONS_STATIC T
2271 WHERE TRIM(T.CODnode) = TRIM(CODCLI) and
2272 t.coddim = 'CUST' and
2273 t.codhier = 'COMM' and
2274 t.coddiv = '001';
2275
2276 CASE
2277 WHEN LEVCLI = -1 OR LEVCLI = 0 THEN
2278 SELECT CASE
2279 WHEN P.FLGCUSTINV = -1 AND P.FLGCUSTDELIV = -1 THEN
2280 'CF'
2281 WHEN P.FLGCUSTINV = 0 AND P.FLGCUSTDELIV = -1 THEN
2282 'DM'
2283 WHEN P.FLGCUSTINV = -1 AND P.FLGCUSTDELIV = -1 THEN
2284 'CF'
2285 ELSE
2286 ' '
2287 END
2288 INTO CODRET
2289 FROM T040PARTY P
2290 WHERE P.CODPARTY = TRIM(CODCLI);
2291
2292 WHEN LEVCLI = 1 THEN
2293 CODRET := 'CC';
2294 WHEN LEVCLI = 2 THEN
2295 CODRET := 'CT';
2296 WHEN LEVCLI = 3 THEN
2297 CODRET := 'SG';
2298
2299 WHEN LEVCLI = 4 THEN
2300 CODRET := 'GR';
2301 WHEN LEVCLI = 5 THEN
2302 CODRET := 'AS';
2303 WHEN LEVCLI = 6 THEN
2304 CODRET := 'CG';
2305 ELSE
2306 CODRET := ' ';
2307
2308 END CASE;
2309
2310 ELSE
2311 CODRET := ' ';
2312
2313 END IF;
2314 RETURN CODRET;
2315 END;
2316 /******** FUNCTION GET_PARENT_REC(codcli varchar2) *******************
2317
2318 Ricava il codice parent senza prefissi che sia diverso dal codice
2319 cliente.Agisce in maniera ricorsiva, da NON USARE IN QUERY MASSIVE!!!!!!!
2320
2321 *******************************************************************/
2322 FUNCTION GET_PARENT_REC(CODCLI VARCHAR2) RETURN VARCHAR2 IS
2323 INTCOUNT INT;
2324 CODRET VARCHAR2(20);
2325 LEVCLI INT;
2326 STREXPCOD VARCHAR2(255); --- codice senza CC,CF,GR...
2327 STREXPCODFATHER VARCHAR2(255); -- idem per il padre...
2328
2329 BEGIN
2330 STREXPCOD := EXP_CODPARTY(CODCLI); --prendo il codice senza CC...
2331 SELECT COUNT(*)
2332 INTO INTCOUNT
2333 FROM TB0042RELATIONS_STATIC T
2334 WHERE TRIM(T.CODnode) = TRIM(CODCLI) and
2335 t.coddim = 'CUST' and
2336 t.codhier = 'COMM' and
2337 t.coddiv = '001';
2338
2339 IF INTCOUNT > 0 THEN
2340 --- se sono in gerarchia...
2341 SELECT T.CODparentnode
2342 INTO CODRET
2343 FROM TB0042RELATIONS_STATIC T
2344 WHERE TRIM(T.CODnode) = TRIM(CODCLI) and
2345 t.coddim = 'CUST' and
2346 t.codhier = 'COMM' and
2347 t.coddiv = '001';
2348
2349 --prendo il padre ricorsivamente!!!
2350 STREXPCODFATHER := EXP_CODPARTY(CODRET); --- estraggo i prefissi CC..
2351
2352 IF STREXPCODFATHER = STREXPCOD THEN
2353 RETURN GET_PARENT_REC(CODRET);
2354 ELSE
2355 RETURN STREXPCODFATHER;
2356
2357 END IF;
2358 ELSE
2359 CODRET := ' ';
2360
2361 END IF;
2362 RETURN CODRET;
2363 END;
2364 /******************GET_PARENT2346*****************************************
2365 Ricava il codice superiore depurato dei primi caratteri a partire dalla
2366 gerarchia FLAT e dal livello. Vengomnmo accettati solo i livelli buoni per Rovagnati.
2367 Viene usata nelle query massive.
2368 /***********************************************************/
2369 FUNCTION GET_PARENT2346(CODCLI VARCHAR2,
2370 LEVCLI INTEGER,
2371 CODLEV0 VARCHAR2,
2372 CODLEV1 VARCHAR2,
2373 CODLEV2 VARCHAR2,
2374 CODLEV3 VARCHAR2,
2375 CODLEV4 VARCHAR2,
2376 CODLEV5 VARCHAR2,
2377 CODLEV6 VARCHAR2,
2378 CODLEV7 VARCHAR2) RETURN VARCHAR2
2379
2380 IS
2381 STRCODCLI VARCHAR(255);
2382 STRCODLEV0 VARCHAR(255);
2383 STRCODLEV1 VARCHAR(255);
2384 STRCODLEV2 VARCHAR(255);
2385 STRCODLEV3 VARCHAR(255);
2386 STRCODLEV4 VARCHAR(255);
2387 STRCODLEV5 VARCHAR(255);
2388 STRCODLEV6 VARCHAR(255);
2389 STRCODLEV7 VARCHAR(255);
2390
2391 BEGIN
2392 STRCODCLI := EXP_CODPARTY(CODCLI);
2393 STRCODLEV0 := EXP_CODPARTY(CODLEV0);
2394 STRCODLEV1 := EXP_CODPARTY(CODLEV1);
2395 STRCODLEV2 := EXP_CODPARTY(CODLEV2);
2396 STRCODLEV3 := EXP_CODPARTY(CODLEV3);
2397 STRCODLEV4 := EXP_CODPARTY(CODLEV4);
2398 STRCODLEV5 := EXP_CODPARTY(CODLEV5);
2399 STRCODLEV6 := EXP_CODPARTY(CODLEV6);
2400 STRCODLEV7 := EXP_CODPARTY(CODLEV7);
2401
2402 IF LEVCLI = -1 THEN
2403 RETURN GET_PARENT_INLINE(STRCODCLI,
2404 STRCODLEV0,
2405 STRCODLEV1,
2406 STRCODLEV2,
2407 STRCODLEV3,
2408 STRCODLEV4,
2409 STRCODLEV5,
2410 STRCODLEV6,
2411 STRCODLEV7);
2412 ELSE
2413 IF LEVCLI = 0 THEN
2414 RETURN GET_PARENT_INLINE(STRCODLEV1,
2415 STRCODLEV2,
2416 STRCODLEV3,
2417 STRCODLEV4,
2418 STRCODLEV5,
2419 STRCODLEV6,
2420 STRCODLEV7);
2421 ELSE
2422 IF LEVCLI = 1 THEN
2423 RETURN GET_PARENT_INLINE(STRCODCLI,
2424 STRCODLEV2,
2425 STRCODLEV3,
2426 STRCODLEV4,
2427 STRCODLEV5,
2428 STRCODLEV6,
2429 STRCODLEV7);
2430 ELSE
2431 IF LEVCLI = 2 THEN
2432 RETURN GET_PARENT_INLINE(STRCODCLI,
2433 STRCODLEV3,
2434 STRCODLEV4,
2435 STRCODLEV5,
2436 STRCODLEV6,
2437 STRCODLEV7);
2438 ELSE
2439 IF LEVCLI = 3 THEN
2440 RETURN GET_PARENT_INLINE(STRCODCLI,
2441 STRCODLEV4,
2442 STRCODLEV5,
2443 STRCODLEV6,
2444 STRCODLEV7);
2445 ELSE
2446 IF LEVCLI = 4 THEN
2447 RETURN GET_PARENT_INLINE(STRCODLEV5,
2448 STRCODLEV6,
2449 STRCODLEV7);
2450 ELSE
2451 IF LEVCLI = 5 THEN
2452 RETURN GET_PARENT_INLINE(STRCODCLI,
2453 STRCODLEV6,
2454 STRCODLEV7);
2455 ELSE
2456 IF LEVCLI = 6 THEN
2457 RETURN GET_PARENT_INLINE(STRCODCLI, STRCODLEV7);
2458 ELSE
2459 RETURN ' '; --escluso..
2460
2461 END IF;
2462 END IF;
2463 END IF;
2464
2465 END IF;
2466 END IF;
2467
2468 END IF;
2469
2470 END IF;
2471 END IF;
2472
2473 END;
2474 -----------------------------------------------------------
2475 FUNCTION GET_PARENT_INLINE_2(CT_POSITION NUMBER,
2476 CODCLI VARCHAR2,
2477 CODSUP1 VARCHAR2 := '',
2478 CODSUP2 VARCHAR2 := '',
2479 CODSUP3 VARCHAR2 := '',
2480 CODSUP4 VARCHAR2 := '',
2481 CODSUP5 VARCHAR2 := '',
2482 CODSUP6 VARCHAR2 := '',
2483 CODSUP7 VARCHAR2 := '',
2484 CODSUP8 VARCHAR2 := '') RETURN VARCHAR2 IS
2485
2486 STRRET VARCHAR2(255);
2487 --
2488 IS_FITTIZIO NUMBER(1) := NULL;
2489 --
2490 BEGIN
2491
2492
2493 IF CODCLI = CODSUP1 THEN
2494 IF CODSUP2 = CODCLI THEN
2495 IF CODSUP3 = CODCLI THEN
2496 IF CODSUP4 = CODCLI THEN
2497 IF CODSUP5 = CODCLI THEN
2498 IF CODSUP6 = CODCLI THEN
2499 IF CODSUP7 = CODCLI THEN
2500 IF CODSUP8 = CODCLI THEN
2501 STRRET := ' '; ---- livello massimo, non ha piu superiori
2502 ELSE
2503 STRRET := CODSUP8;
2504
2505 END IF;
2506
2507 ELSE
2508 STRRET := CODSUP7;
2509
2510 END IF;
2511
2512 ELSE
2513 STRRET := CODSUP6;
2514
2515 END IF;
2516
2517 ELSE
2518 STRRET := CODSUP5;
2519
2520 END IF;
2521
2522 --> SE POSITION e 4 ALLORA LA PARTE NUMERICA DEL CT e NEL CODSUP4
2523 ELSIF(CT_POSITION = 4)THEN
2524
2525 --> CONTROLLO SE QUESTO CT e REALE
2526 --> (NON DEVE ESISTE UN CODPARTY CON LA PARTE NUMERICA DEL CT)
2527 SELECT COUNT(*)
2528 INTO IS_FITTIZIO
2529 FROM T040PARTY
2530 WHERE CODPARTY = CODSUP4;
2531
2532 IF(IS_FITTIZIO = 0)THEN --> NON HA TROVATO NESSUN RECORD CON CODPARTY = PARTE NUMERICA
2533
2534 STRRET := CODSUP4; --> IL CT e REALE
2535
2536 ELSE
2537
2538 STRRET := CODSUP5; --> NEL CODSUP5 Ce IL GR CHE e SEMPRE REALE
2539
2540 END IF;
2541
2542 ELSE
2543 STRRET := CODSUP4;
2544
2545 END IF;
2546
2547 --> SE POSITION e 3 ALLORA LA PARTE NUMERICA DEL CT e NEL CODSUP3
2548 ELSIF(CT_POSITION = 3)THEN
2549
2550 --> CONTROLLO SE QUESTO CT e REALE
2551 --> (NON DEVE ESISTE UN CODPARTY CON LA PARTE NUMERICA DEL CT)
2552 SELECT COUNT(*)
2553 INTO IS_FITTIZIO
2554 FROM T040PARTY
2555 WHERE CODPARTY = CODSUP3;
2556
2557 IF(IS_FITTIZIO = 0)THEN --> NON HA TROVATO NESSUN RECORD CON CODPARTY = PARTE NUMERICA
2558
2559 STRRET := CODSUP3; --> IL CT e REALE
2560
2561 ELSE
2562
2563 STRRET := CODSUP4; --> NEL CODSUP4 Ce IL GR CHE e SEMPRE REALE
2564
2565 END IF;
2566
2567 ELSE
2568
2569 STRRET := CODSUP3;
2570
2571 END IF;
2572
2573 --> SE POSITION e 2 ALLORA LA PARTE NUMERICA DEL CT e NEL CODSUP2
2574 ELSIF(CT_POSITION = 2)THEN
2575
2576 --> CONTROLLO SE QUESTO CT e REALE
2577 --> (NON DEVE ESISTE UN CODPARTY CON LA PARTE NUMERICA DEL CT)
2578 SELECT COUNT(*)
2579 INTO IS_FITTIZIO
2580 FROM T040PARTY
2581 WHERE CODPARTY = CODSUP2;
2582
2583 IF(IS_FITTIZIO = 0)THEN --> NON HA TROVATO NESSUN RECORD CON CODPARTY = PARTE NUMERICA
2584
2585 STRRET := CODSUP2; --> IL CT e REALE
2586
2587 ELSE
2588
2589 STRRET := CODSUP3; --> NEL CODSUP3 Ce IL GR CHE e SEMPRE REALE
2590
2591 END IF;
2592
2593
2594 ELSE
2595
2596 STRRET := CODSUP2;
2597
2598 END IF;
2599
2600 --> SE POSITION e 1 ALLORA LA PARTE NUMERICA DEL CT e NEL CODSUP1
2601 ELSIF(CT_POSITION = 1)THEN
2602
2603 --> CONTROLLO SE QUESTO CT e REALE
2604 --> (NON DEVE ESISTE UN CODPARTY CON LA PARTE NUMERICA DEL CT)
2605 SELECT COUNT(*)
2606 INTO IS_FITTIZIO
2607 FROM T040PARTY
2608 WHERE CODPARTY = CODSUP1;
2609
2610 IF(IS_FITTIZIO = 0)THEN --> NON HA TROVATO NESSUN RECORD CON CODPARTY = PARTE NUMERICA
2611
2612 STRRET := CODSUP1; --> IL CT e REALE
2613
2614 ELSE
2615
2616 STRRET := CODSUP2; --> NEL CODSUP2 Ce IL GR CHE e SEMPRE REALE
2617
2618 END IF;
2619
2620 ELSE
2621
2622 --> CODSUP1 NON CONTIENE UN CT
2623 STRRET := CODSUP1;
2624
2625 END IF;
2626
2627 IF Z_PKG_XTEL_IMPORT.IS_NUMERIC(STRRET) = 1 THEN
2628 RETURN STRRET;
2629 ELSE
2630 RETURN NULL;
2631
2632 END IF;
2633
2634 END;
2635
2636 /******************GET_PARENT 2*****************************************
2637 Ricava il primo codice superiore reale
2638 andando a controllare se che il cliente superiore passato non sia un fittizio
2639 (esista la parte numerica come codparty nel db)
2640 /***********************************************************/
2641 FUNCTION GET_PARENT_2(CODCLI VARCHAR2,
2642 LEVCLI INTEGER,
2643 CODLEV0 VARCHAR2,
2644 CODLEV1 VARCHAR2,
2645 CODLEV2 VARCHAR2,
2646 CODLEV3 VARCHAR2,
2647 CODLEV4 VARCHAR2,
2648 CODLEV5 VARCHAR2,
2649 CODLEV6 VARCHAR2,
2650 CODLEV7 VARCHAR2) RETURN VARCHAR2
2651
2652 IS
2653 STRCODCLI VARCHAR(255);
2654 STRCODLEV0 VARCHAR(255);
2655 STRCODLEV1 VARCHAR(255);
2656 STRCODLEV2 VARCHAR(255);
2657 STRCODLEV3 VARCHAR(255);
2658 STRCODLEV4 VARCHAR(255);
2659 STRCODLEV5 VARCHAR(255);
2660 STRCODLEV6 VARCHAR(255);
2661 STRCODLEV7 VARCHAR(255);
2662
2663 BEGIN
2664 STRCODCLI := EXP_CODPARTY(CODCLI);
2665 STRCODLEV0 := EXP_CODPARTY(CODLEV0);
2666 STRCODLEV1 := EXP_CODPARTY(CODLEV1);
2667 STRCODLEV2 := EXP_CODPARTY(CODLEV2);
2668 STRCODLEV3 := EXP_CODPARTY(CODLEV3);
2669 STRCODLEV4 := EXP_CODPARTY(CODLEV4);
2670 STRCODLEV5 := EXP_CODPARTY(CODLEV5);
2671 STRCODLEV6 := EXP_CODPARTY(CODLEV6);
2672 STRCODLEV7 := EXP_CODPARTY(CODLEV7);
2673
2674 IF LEVCLI = -1 THEN
2675 RETURN GET_PARENT_INLINE_2(3, --> POSIZIONE IN CUI SI TROVA LA PARTE NUMERICA DEL CT (STRCODLEV2)
2676 STRCODCLI,
2677 STRCODLEV0,
2678 STRCODLEV0, --> STRCODLEV1,--> IL CC e UN NODO FINTO NON DOVRa MAI USCIRE COME RESPONSABILE GLI METTO IL LEV0
2679 STRCODLEV2, --> CT
2680 STRCODLEV3,
2681 STRCODLEV4,
2682 STRCODLEV5,
2683 STRCODLEV6,
2684 STRCODLEV7);
2685 ELSE
2686 IF LEVCLI = 0 THEN
2687 RETURN GET_PARENT_INLINE_2(2,--> POSIZIONE IN CUI SI TROVA LA PARTE NUMERICA DEL CT (STRCODLEV2)
2688 STRCODCLI,
2689 STRCODCLI,-- STRCODLEV1, IL CT e SEMPRE FINTO
2690 STRCODLEV2, --> CT
2691 STRCODLEV3,
2692 STRCODLEV4,
2693 STRCODLEV5,
2694 STRCODLEV6,
2695 STRCODLEV7);
2696 ELSE
2697 IF LEVCLI = 1 THEN
2698 RETURN GET_PARENT_INLINE_2(1,--> POSIZIONE IN CUI SI TROVA LA PARTE NUMERICA DEL CT (STRCODLEV2)
2699 STRCODCLI,
2700 STRCODLEV2,
2701 STRCODLEV3,
2702 STRCODLEV4,
2703 STRCODLEV5,
2704 STRCODLEV6,
2705 STRCODLEV7);
2706 ELSE
2707 IF LEVCLI = 2 THEN
2708 RETURN GET_PARENT_INLINE_2(0,--> NODO CT STESSO -> SE VIENE ESPORTATO e REALE PER FORZA
2709 STRCODCLI,
2710 STRCODLEV3,
2711 STRCODLEV4,
2712 STRCODLEV5,
2713 STRCODLEV6,
2714 STRCODLEV7);
2715 ELSE
2716 IF LEVCLI = 3 THEN
2717 RETURN GET_PARENT_INLINE_2(0,--> NODO SUPERIORE AL CT
2718 STRCODCLI,
2719 STRCODLEV4,
2720 STRCODLEV5,
2721 STRCODLEV6,
2722 STRCODLEV7);
2723 ELSE
2724 IF LEVCLI = 4 THEN
2725 RETURN GET_PARENT_INLINE_2(0,--> NODO SUPERIORE AL CT
2726 STRCODCLI,
2727 STRCODLEV5,
2728 STRCODLEV6,
2729 STRCODLEV7);
2730 ELSE
2731 IF LEVCLI = 5 THEN
2732 RETURN GET_PARENT_INLINE_2(0,--> NODO SUPERIORE AL CT
2733 STRCODCLI,
2734 STRCODLEV6,
2735 STRCODLEV7);
2736 ELSE
2737 IF LEVCLI = 6 THEN
2738 RETURN GET_PARENT_INLINE_2(0,--> NODO SUPERIORE AL CT
2739 STRCODCLI, STRCODLEV7);
2740 ELSE
2741 RETURN ' '; --escluso..
2742
2743 END IF;
2744 END IF;
2745 END IF;
2746
2747 END IF;
2748 END IF;
2749
2750 END IF;
2751
2752 END IF;
2753 END IF;
2754
2755 END;
2756 /******************GET_PARENT*****************************************
2757 Ricava il codice superiore depurato dei primi caratteri a partire dalla
2758 gerarchia FLAT e dal livello.
2759 Viene usata nelle query massive.
2760 /***********************************************************/
2761 FUNCTION GET_PARENT(CODCLI VARCHAR2,
2762 LEVCLI INTEGER,
2763 CODLEV0 VARCHAR2,
2764 CODLEV1 VARCHAR2,
2765 CODLEV2 VARCHAR2,
2766 CODLEV3 VARCHAR2,
2767 CODLEV4 VARCHAR2,
2768 CODLEV5 VARCHAR2,
2769 CODLEV6 VARCHAR2,
2770 CODLEV7 VARCHAR2) RETURN VARCHAR2
2771
2772 IS
2773 STRCODCLI VARCHAR(255);
2774 STRCODLEV0 VARCHAR(255);
2775 STRCODLEV1 VARCHAR(255);
2776 STRCODLEV2 VARCHAR(255);
2777 STRCODLEV3 VARCHAR(255);
2778 STRCODLEV4 VARCHAR(255);
2779 STRCODLEV5 VARCHAR(255);
2780 STRCODLEV6 VARCHAR(255);
2781 STRCODLEV7 VARCHAR(255);
2782
2783 BEGIN
2784 STRCODCLI := EXP_CODPARTY(CODCLI);
2785 STRCODLEV0 := EXP_CODPARTY(CODLEV0);
2786 STRCODLEV1 := EXP_CODPARTY(CODLEV1);
2787 STRCODLEV2 := EXP_CODPARTY(CODLEV2);
2788 STRCODLEV3 := EXP_CODPARTY(CODLEV3);
2789 STRCODLEV4 := EXP_CODPARTY(CODLEV4);
2790 STRCODLEV5 := EXP_CODPARTY(CODLEV5);
2791 STRCODLEV6 := EXP_CODPARTY(CODLEV6);
2792 STRCODLEV7 := EXP_CODPARTY(CODLEV7);
2793
2794 IF LEVCLI = -1 THEN
2795 RETURN GET_PARENT_INLINE(STRCODCLI,
2796 STRCODLEV0,
2797 STRCODLEV1,
2798 STRCODLEV2,
2799 STRCODLEV3,
2800 STRCODLEV4,
2801 STRCODLEV5,
2802 STRCODLEV6,
2803 STRCODLEV7);
2804 ELSE
2805 IF LEVCLI = 0 THEN
2806 RETURN GET_PARENT_INLINE(STRCODCLI,
2807 STRCODLEV1,
2808 STRCODLEV2,
2809 STRCODLEV3,
2810 STRCODLEV4,
2811 STRCODLEV5,
2812 STRCODLEV6,
2813 STRCODLEV7);
2814 ELSE
2815 IF LEVCLI = 1 THEN
2816 RETURN GET_PARENT_INLINE(STRCODCLI,
2817 STRCODLEV2,
2818 STRCODLEV3,
2819 STRCODLEV4,
2820 STRCODLEV5,
2821 STRCODLEV6,
2822 STRCODLEV7);
2823 ELSE
2824 IF LEVCLI = 2 THEN
2825 RETURN GET_PARENT_INLINE(STRCODCLI,
2826 STRCODLEV3,
2827 STRCODLEV4,
2828 STRCODLEV5,
2829 STRCODLEV6,
2830 STRCODLEV7);
2831 ELSE
2832 IF LEVCLI = 3 THEN
2833 RETURN GET_PARENT_INLINE(STRCODCLI,
2834 STRCODLEV4,
2835 STRCODLEV5,
2836 STRCODLEV6,
2837 STRCODLEV7);
2838 ELSE
2839 IF LEVCLI = 4 THEN
2840 RETURN GET_PARENT_INLINE(STRCODCLI,
2841 STRCODLEV5,
2842 STRCODLEV6,
2843 STRCODLEV7);
2844 ELSE
2845 IF LEVCLI = 5 THEN
2846 RETURN GET_PARENT_INLINE(STRCODCLI,
2847 STRCODLEV6,
2848 STRCODLEV7);
2849 ELSE
2850 IF LEVCLI = 6 THEN
2851 RETURN GET_PARENT_INLINE(STRCODCLI, STRCODLEV7);
2852 ELSE
2853 RETURN ' '; --escluso..
2854
2855 END IF;
2856 END IF;
2857 END IF;
2858
2859 END IF;
2860 END IF;
2861
2862 END IF;
2863
2864 END IF;
2865 END IF;
2866
2867 END;
2868 /******************GET_PARENT_LEV2346*****************************************
2869 Ricava il livello del codice superiore a partire dalla
2870 gerarchia FLAT e dal livello.Solo livelli buoni per Rovagnati
2871 Viene usata nelle query massive.
2872 /***********************************************************/
2873 FUNCTION GET_PARENT_LEV2346(CODCLI VARCHAR2,
2874 LEVCLI INTEGER,
2875 CODLEV0 VARCHAR2,
2876 CODLEV1 VARCHAR2,
2877 CODLEV2 VARCHAR2,
2878 CODLEV3 VARCHAR2,
2879 CODLEV4 VARCHAR2,
2880 CODLEV5 VARCHAR2,
2881 CODLEV6 VARCHAR2,
2882 CODLEV7 VARCHAR2) RETURN NUMBER
2883
2884 IS
2885 STRCODCLI VARCHAR(255);
2886 STRCODLEV0 VARCHAR(255);
2887 STRCODLEV1 VARCHAR(255);
2888 STRCODLEV2 VARCHAR(255);
2889 STRCODLEV3 VARCHAR(255);
2890 STRCODLEV4 VARCHAR(255);
2891 STRCODLEV5 VARCHAR(255);
2892 STRCODLEV6 VARCHAR(255);
2893 STRCODLEV7 VARCHAR(255);
2894
2895 BEGIN
2896 STRCODCLI := EXP_CODPARTY(CODCLI);
2897 STRCODLEV0 := EXP_CODPARTY(CODLEV0);
2898 STRCODLEV1 := EXP_CODPARTY(CODLEV1);
2899 STRCODLEV2 := EXP_CODPARTY(CODLEV2);
2900 STRCODLEV3 := EXP_CODPARTY(CODLEV3);
2901 STRCODLEV4 := EXP_CODPARTY(CODLEV4);
2902 STRCODLEV5 := EXP_CODPARTY(CODLEV5);
2903 STRCODLEV6 := EXP_CODPARTY(CODLEV6);
2904 STRCODLEV7 := EXP_CODPARTY(CODLEV7);
2905
2906 IF LEVCLI = -1 THEN
2907 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2908 LEVCLI,
2909 STRCODLEV0,
2910 STRCODLEV1,
2911 STRCODLEV2,
2912 STRCODLEV3,
2913 STRCODLEV4,
2914 STRCODLEV5,
2915 STRCODLEV6,
2916 STRCODLEV7);
2917 ELSE
2918 IF LEVCLI = 0 THEN
2919 ----
2920 RETURN GET_PARENT_INLINE_LEV(STRCODLEV1,
2921 1,
2922 STRCODLEV2,
2923 STRCODLEV3,
2924 STRCODLEV4,
2925 STRCODLEV5,
2926 STRCODLEV6,
2927 STRCODLEV7);
2928 ELSE
2929 IF LEVCLI = 1 THEN
2930 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2931 LEVCLI,
2932 STRCODLEV2,
2933 STRCODLEV3,
2934 STRCODLEV4,
2935 STRCODLEV5,
2936 STRCODLEV6,
2937 STRCODLEV7);
2938 ELSE
2939 IF LEVCLI = 2 THEN
2940 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2941 LEVCLI,
2942 STRCODLEV3,
2943 STRCODLEV4,
2944 STRCODLEV5,
2945 STRCODLEV6,
2946 STRCODLEV7);
2947 ELSE
2948 IF LEVCLI = 3 THEN
2949 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2950 LEVCLI,
2951 STRCODLEV4,
2952 STRCODLEV5,
2953 STRCODLEV6,
2954 STRCODLEV7);
2955 ELSE
2956 IF LEVCLI = 4 THEN
2957 RETURN GET_PARENT_INLINE_LEV(STRCODLEV5,
2958 5,
2959 STRCODLEV6,
2960 STRCODLEV7);
2961 ELSE
2962 IF LEVCLI = 5 THEN
2963 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2964 LEVCLI,
2965 STRCODLEV6,
2966 STRCODLEV7);
2967 ELSE
2968 IF LEVCLI = 6 THEN
2969 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
2970 LEVCLI,
2971 STRCODLEV7);
2972 ELSE
2973 RETURN 0; --escluso..
2974
2975 END IF;
2976 END IF;
2977 END IF;
2978
2979 END IF;
2980 END IF;
2981
2982 END IF;
2983
2984 END IF;
2985 END IF;
2986
2987 END;
2988 /******************GET_PARENT_LEV*****************************************
2989 Ricava il livello del codice superiore a partire dalla
2990 gerarchia FLAT e dal livello.
2991 Viene usata nelle query massive.
2992 /***********************************************************/
2993 FUNCTION GET_PARENT_LEV(CODCLI VARCHAR2,
2994 LEVCLI INTEGER,
2995 CODLEV0 VARCHAR2,
2996 CODLEV1 VARCHAR2,
2997 CODLEV2 VARCHAR2,
2998 CODLEV3 VARCHAR2,
2999 CODLEV4 VARCHAR2,
3000 CODLEV5 VARCHAR2,
3001 CODLEV6 VARCHAR2,
3002 CODLEV7 VARCHAR2) RETURN NUMBER
3003
3004 IS
3005 STRCODCLI VARCHAR(255);
3006 STRCODLEV0 VARCHAR(255);
3007 STRCODLEV1 VARCHAR(255);
3008 STRCODLEV2 VARCHAR(255);
3009 STRCODLEV3 VARCHAR(255);
3010 STRCODLEV4 VARCHAR(255);
3011 STRCODLEV5 VARCHAR(255);
3012 STRCODLEV6 VARCHAR(255);
3013 STRCODLEV7 VARCHAR(255);
3014
3015 BEGIN
3016 STRCODCLI := EXP_CODPARTY(CODCLI);
3017 STRCODLEV0 := EXP_CODPARTY(CODLEV0);
3018 STRCODLEV1 := EXP_CODPARTY(CODLEV1);
3019 STRCODLEV2 := EXP_CODPARTY(CODLEV2);
3020 STRCODLEV3 := EXP_CODPARTY(CODLEV3);
3021 STRCODLEV4 := EXP_CODPARTY(CODLEV4);
3022 STRCODLEV5 := EXP_CODPARTY(CODLEV5);
3023 STRCODLEV6 := EXP_CODPARTY(CODLEV6);
3024 STRCODLEV7 := EXP_CODPARTY(CODLEV7);
3025
3026 IF LEVCLI = -1 THEN
3027 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3028 LEVCLI,
3029 STRCODLEV0,
3030 STRCODLEV1,
3031 STRCODLEV2,
3032 STRCODLEV3,
3033 STRCODLEV4,
3034 STRCODLEV5,
3035 STRCODLEV6,
3036 STRCODLEV7);
3037 ELSE
3038 IF LEVCLI = 0 THEN
3039 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3040 LEVCLI,
3041 STRCODLEV1,
3042 STRCODLEV2,
3043 STRCODLEV3,
3044 STRCODLEV4,
3045 STRCODLEV5,
3046 STRCODLEV6,
3047 STRCODLEV7);
3048 ELSE
3049 IF LEVCLI = 1 THEN
3050 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3051 LEVCLI,
3052 STRCODLEV2,
3053 STRCODLEV3,
3054 STRCODLEV4,
3055 STRCODLEV5,
3056 STRCODLEV6,
3057 STRCODLEV7);
3058 ELSE
3059 IF LEVCLI = 2 THEN
3060 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3061 LEVCLI,
3062 STRCODLEV3,
3063 STRCODLEV4,
3064 STRCODLEV5,
3065 STRCODLEV6,
3066 STRCODLEV7);
3067 ELSE
3068 IF LEVCLI = 3 THEN
3069 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3070 LEVCLI,
3071 STRCODLEV4,
3072 STRCODLEV5,
3073 STRCODLEV6,
3074 STRCODLEV7);
3075 ELSE
3076 IF LEVCLI = 4 THEN
3077 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3078 LEVCLI,
3079 STRCODLEV5,
3080 STRCODLEV6,
3081 STRCODLEV7);
3082 ELSE
3083 IF LEVCLI = 5 THEN
3084 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3085 LEVCLI,
3086 STRCODLEV6,
3087 STRCODLEV7);
3088 ELSE
3089 IF LEVCLI = 6 THEN
3090 RETURN GET_PARENT_INLINE_LEV(STRCODCLI,
3091 LEVCLI,
3092 STRCODLEV7);
3093 ELSE
3094 RETURN 0; --escluso..
3095
3096 END IF;
3097 END IF;
3098 END IF;
3099
3100 END IF;
3101 END IF;
3102
3103 END IF;
3104
3105 END IF;
3106 END IF;
3107
3108 END;
3109 /******** FUNCTION GET_PARENT_INLINE(codcli varchar2) *******************
3110 Ricava il codice superiore depurato dei primi caratteri a partire dalla sequenza
3111 GIA' ESTRATTA dei superiori
3112 I codici devono essere passati TUTTI gia depurati dei primi caratteri alfanumerici
3113 aggiunti da SM1 , 'CC','CT'..ecc..
3114 codsup1, codsup2..sono i codici superiori FLAT a partire dal livello del codice cliente,
3115 ovvero codsup1 e il superiore direto, codsup2 e il superiore del superiore..ecc..
3116 *******************************************************************/
3117 FUNCTION GET_PARENT_INLINE(CODCLI VARCHAR2,
3118 CODSUP1 VARCHAR2 := '',
3119 CODSUP2 VARCHAR2 := '',
3120 CODSUP3 VARCHAR2 := '',
3121 CODSUP4 VARCHAR2 := '',
3122 CODSUP5 VARCHAR2 := '',
3123 CODSUP6 VARCHAR2 := '',
3124 CODSUP7 VARCHAR2 := '',
3125 CODSUP8 VARCHAR2 := '') RETURN VARCHAR2 IS
3126
3127 STRRET VARCHAR2(255);
3128
3129 BEGIN
3130 IF CODCLI = CODSUP1 THEN
3131 IF CODSUP2 = CODCLI THEN
3132 IF CODSUP3 = CODCLI THEN
3133 IF CODSUP4 = CODCLI THEN
3134 IF CODSUP5 = CODCLI THEN
3135 IF CODSUP6 = CODCLI THEN
3136 IF CODSUP7 = CODCLI THEN
3137 IF CODSUP8 = CODCLI THEN
3138 STRRET := ' '; ---- livello massimo, non ha piu superiori
3139 ELSE
3140 STRRET := CODSUP8;
3141
3142 END IF;
3143
3144 ELSE
3145 STRRET := CODSUP7;
3146
3147 END IF;
3148
3149 ELSE
3150 STRRET := CODSUP6;
3151
3152 END IF;
3153
3154 ELSE
3155 STRRET := CODSUP5;
3156
3157 END IF;
3158
3159 ELSE
3160 STRRET := CODSUP4;
3161
3162 END IF;
3163
3164 ELSE
3165 STRRET := CODSUP3;
3166
3167 END IF;
3168
3169 ELSE
3170 STRRET := CODSUP2;
3171
3172 END IF;
3173 ELSE
3174 STRRET := CODSUP1;
3175
3176 END IF;
3177 IF Z_PKG_XTEL_IMPORT.IS_NUMERIC(STRRET) = 1 THEN
3178 RETURN STRRET;
3179 ELSE
3180 RETURN NULL;
3181
3182 END IF;
3183
3184 END;
3185 /******** FUNCTION GET_PARENT_INLINE_LEV(codcli varchar2) *******************
3186 Ricava il livello del codice superiore depurato dei primi caratteri a partire dalla sequenza
3187 GIA' ESTRATTA dei superiori
3188 I codici devono essere passati TUTTI gia depurati dei primi caratteri alfanumerici
3189 aggiunti da SM1 , 'CC','CT'..ecc..
3190 codsup1, codsup2..sono i codici superiori FLAT a partire dal livello del codice cliente,
3191 ovvero codsup1 e il superiore direto, codsup2 e il superiore del superiore..ecc..
3192 *******************************************************************/
3193 FUNCTION GET_PARENT_INLINE_LEV(CODCLI VARCHAR2,
3194 LEVCLI INTEGER,
3195 CODSUP1 VARCHAR2 := '',
3196 CODSUP2 VARCHAR2 := '',
3197 CODSUP3 VARCHAR2 := '',
3198 CODSUP4 VARCHAR2 := '',
3199 CODSUP5 VARCHAR2 := '',
3200 CODSUP6 VARCHAR2 := '',
3201 CODSUP7 VARCHAR2 := '',
3202 CODSUP8 VARCHAR2 := '') RETURN NUMBER IS
3203
3204 INTRET NUMBER;
3205
3206 BEGIN
3207 IF CODCLI = CODSUP1 THEN
3208 IF CODSUP2 = CODCLI THEN
3209 IF CODSUP3 = CODCLI THEN
3210 IF CODSUP4 = CODCLI THEN
3211 IF CODSUP5 = CODCLI THEN
3212 IF CODSUP6 = CODCLI THEN
3213 IF CODSUP7 = CODCLI THEN
3214 IF CODSUP8 = CODCLI THEN
3215 RETURN NULL; ---- livello massimo, non ha piu superiori
3216 ELSE
3217 INTRET := LEVCLI + 8;
3218
3219 END IF;
3220
3221 ELSE
3222 INTRET := LEVCLI + 7;
3223
3224 END IF;
3225
3226 ELSE
3227 INTRET := LEVCLI + 6;
3228
3229 END IF;
3230
3231 ELSE
3232 INTRET := LEVCLI + 5;
3233
3234 END IF;
3235
3236 ELSE
3237 INTRET := LEVCLI + 4;
3238
3239 END IF;
3240
3241 ELSE
3242 INTRET := LEVCLI + 3;
3243
3244 END IF;
3245
3246 ELSE
3247 INTRET := LEVCLI + 2;
3248
3249 END IF;
3250 ELSE
3251 INTRET := LEVCLI + 1;
3252
3253 END IF;
3254
3255 RETURN INTRET;
3256 END;
3257 /*FUNCTION GET_COL_DECODE
3258 riorna il valore decodificato dalla tabella TB_INT_DECODEFIELD
3259 */
3260 FUNCTION GET_COL_DECODE(VARCOLNAME VARCHAR2,
3261 VARCOLVALUEFROM VARCHAR2,
3262 VARTABNAME VARCHAR2) RETURN VARCHAR2 IS
3263 COLVALUE VARCHAR2(255);
3264
3265 BEGIN
3266 SELECT VALUETO
3267 INTO COLVALUE
3268 FROM TB_INT_DECODEFIELD T
3269 WHERE UPPER(TRIM(T.TABLENAME)) = UPPER(TRIM(VARTABNAME))
3270 AND UPPER(TRIM(T.FIELDNAME)) = UPPER(TRIM(VARCOLNAME))
3271 AND UPPER(TRIM(T.VALUEFROM)) = UPPER(TRIM(VARCOLVALUEFROM));
3272
3273 RETURN COLVALUE;
3274
3275 EXCEPTION
3276 WHEN OTHERS THEN
3277 BEGIN
3278 LOG_SCRIPT('ERRORE GET_COL_DECODE ' || VARCOLNAME || ' ' ||
3279 VARTABNAME);
3280 RETURN VARCOLVALUEFROM;
3281 END;
3282
3283 END;
3284 /*function GET DAY CODE */
3285 FUNCTION GET_DELIV_CODE(STRDESC VARCHAR2, NDAY INT) RETURN VARCHAR2 IS
3286 STRRET VARCHAR2(3);
3287
3288 BEGIN
3289
3290 SELECT CASE
3291 WHEN NDAY = 1 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3292 '002'
3293 WHEN NDAY = 1 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3294 '003'
3295 WHEN NDAY = 1 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3296 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3297 '001'
3298 WHEN NDAY = 2 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3299 '005'
3300 WHEN NDAY = 2 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3301 '006'
3302 WHEN NDAY = 2 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3303 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3304 '004'
3305 WHEN NDAY = 3 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3306 '008'
3307 WHEN NDAY = 3 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3308 '009'
3309 WHEN NDAY = 3 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3310 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3311 '007'
3312 WHEN NDAY = 4 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3313 '011'
3314 WHEN NDAY = 4 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3315 '012'
3316 WHEN NDAY = 4 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3317 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3318 '010'
3319 WHEN NDAY = 5 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3320 '014'
3321 WHEN NDAY = 5 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3322 '015'
3323 WHEN NDAY = 5 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3324 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3325 '013'
3326 WHEN NDAY = 6 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3327 '017'
3328 WHEN NDAY = 6 AND INSTR(UPPER(STRDESC), 'AFT') > 0
3329
3330 THEN
3331 '018'
3332 WHEN NDAY = 6 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3333 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3334 '016'
3335 WHEN NDAY = 7 AND INSTR(UPPER(STRDESC), 'MOR') > 0 THEN
3336 '020'
3337 WHEN NDAY = 7 AND INSTR(UPPER(STRDESC), 'AFT') > 0 THEN
3338 '021'
3339 WHEN NDAY = 7 AND INSTR(UPPER(STRDESC), 'AFT') = 0 AND
3340 INSTR(UPPER(STRDESC), 'MOR') = 0 THEN
3341 '019'
3342 END
3343 INTO STRRET
3344 FROM DUAL;
3345
3346 RETURN STRRET;
3347 EXCEPTION
3348 WHEN OTHERS THEN
3349 RETURN '000';
3350 END;
3351 /*FUNCTION GET_COL_LENGTH
3352 ritorna la lunghezza delle colonna della tabella passata.
3353 ritorna 0 in caso di errore
3354 */
3355 FUNCTION GET_COL_LENGTH(COLNAME VARCHAR2, TABNAME VARCHAR2) RETURN NUMBER IS
3356 LENCOL INT;
3357
3358 BEGIN
3359
3360 SELECT DATA_LENGTH
3361 INTO LENCOL
3362 FROM USER_TAB_COLUMNS T
3363 WHERE UPPER(TRIM(T.TABLE_NAME)) = UPPER(TRIM(TABNAME))
3364 AND UPPER(TRIM(T.COLUMN_NAME)) = UPPER(TRIM(COLNAME));
3365
3366 RETURN LENCOL;
3367 EXCEPTION
3368 WHEN OTHERS THEN
3369 RETURN 0;
3370 END;
3371 /*GET_ENVIRONMENT
3372 ritorna l'ambiente test/produzione PY/PD
3373 per ora ritorna una costante, poi bisognera
3374 ricavare il valore da una tabella
3375 */
3376 FUNCTION GET_ENVIRONMENT RETURN VARCHAR2 IS
3377 BEGIN
3378 RETURN 'PD';
3379 END;
3380 /*----------------------- GET_FIELD_LIST ----------------------------
3381 -- Crea una tabella se non esiste
3382 -- tablename : nome tabella da cui prendere i campi
3383 -- return: stringa con 'campo1 tipocampo(lunghezza),campo2 tipocampo(lunghezza) ...
3384 ------------------------------------------------------------------*/
3385 FUNCTION GET_FIELD_LIST(VARTABLENAME IN VARCHAR2,
3386 ONLYFILEDNAME NUMBER := 0) RETURN VARCHAR2 IS
3387 CTAB INT;
3388 STRFIELDLIST VARCHAR2(8000);
3389 STRFIELDNAME VARCHAR2(255);
3390 STRFIELDTYPE VARCHAR2(255);
3391 STRFIELDLENGTH VARCHAR2(255);
3392 STRDATAPRECISION VARCHAR2(255);
3393 STRDATASCALE VARCHAR2(255);
3394 STRCHARFIELDLENGTH VARCHAR2(255);
3395
3396 BEGIN
3397 CTAB := 0;
3398 STRFIELDLENGTH := '';
3399 SELECT COUNT(*)
3400 INTO CTAB
3401 FROM USER_TABLES
3402 WHERE TABLE_NAME = UPPER(TRIM(VARTABLENAME));
3403
3404 IF CTAB > 0 THEN
3405 DECLARE
3406 CURSOR FIELD_CURSOR IS
3407 SELECT COLUMN_NAME,
3408 DATA_TYPE,
3409 DATA_LENGTH,
3410 CHAR_COL_DECL_LENGTH,
3411 DATA_PRECISION,
3412 DATA_SCALE
3413 FROM USER_TAB_COLUMNS
3414 WHERE TABLE_NAME = UPPER(TRIM(VARTABLENAME))
3415 ORDER BY COLUMN_ID;
3416
3417 BEGIN
3418 OPEN FIELD_CURSOR;
3419 LOOP
3420 FETCH FIELD_CURSOR
3421 INTO STRFIELDNAME, STRFIELDTYPE, STRFIELDLENGTH, STRCHARFIELDLENGTH, STRDATAPRECISION, STRDATASCALE;
3422 EXIT WHEN FIELD_CURSOR%NOTFOUND;
3423 IF ONLYFILEDNAME = 0 THEN
3424 STRFIELDLIST := STRFIELDLIST || ',' || STRFIELDNAME || ' ' ||
3425 STRFIELDTYPE;
3426
3427 CASE
3428 WHEN STRFIELDTYPE = 'VARCHAR2' OR STRFIELDTYPE = 'CHAR' THEN
3429 STRFIELDLIST := STRFIELDLIST || '(' || STRCHARFIELDLENGTH || ') ';
3430 ELSE
3431 CASE
3432 WHEN STRFIELDTYPE = 'NUMBER' THEN
3433 IF TO_NUMBER(STRDATAPRECISION) >= 0 AND
3434 TO_NUMBER(STRDATASCALE) >= 0 THEN
3435 STRFIELDLIST := STRFIELDLIST || ' ( ' ||
3436 STRDATAPRECISION || ',' ||
3437 STRDATASCALE || ' ) ';
3438 END IF;
3439
3440 ELSE
3441 NULL;
3442
3443 END CASE;
3444
3445 END CASE;
3446
3447 ELSE
3448 STRFIELDLIST := STRFIELDLIST || ',' || STRFIELDNAME;
3449 END IF;
3450
3451 END LOOP;
3452
3453 STRFIELDLIST := SUBSTR(STRFIELDLIST, 2);
3454 CLOSE FIELD_CURSOR;
3455 END;
3456
3457 END IF;
3458
3459 RETURN STRFIELDLIST;
3460 END;
3461 /*FUNCTION GET_FIRST_LOWER
3462 ritorna il primo record non dummy inferiore
3463
3464 intLev se disponibile e il livello del codparty passato
3465 altrimenti se lo calcola, rallentando
3466 */
3467 FUNCTION GET_FIRST_LOWER(VARPARTY VARCHAR2, INTLEV INT := NULL)
3468 RETURN VARCHAR2 IS
3469 VARCODSON VARCHAR(255);
3470 ISDUMM INT;
3471 BEGIN
3472 ISDUMM := IS_DUMMY_REC(VARPARTY, INTLEV);
3473 IF ISDUMM = 1 THEN
3474 SELECT MAX(CODnode)
3475 INTO VARCODSON
3476 FROM TB0042RELATIONS_STATIC T
3477 WHERE T.CODparentnode = VARPARTY and
3478 t.coddim = 'CUST' and
3479 t.codhier = 'COMM' and
3480 t.coddiv = '001';
3481
3482 RETURN GET_FIRST_LOWER(VARCODSON);
3483 ELSE
3484 IF ISDUMM = 0 THEN
3485 RETURN VARPARTY;
3486 ELSE
3487 RETURN NULL;
3488 END IF;
3489 END IF;
3490 EXCEPTION
3491 WHEN OTHERS THEN
3492 LOG_SCRIPT('ERRORE GET_FIRST_LOWER ',
3493 'ERRORE GET_FIRST_LOWER ' || VARCODSON || ' ' || SQLERRM);
3494 RETURN NULL;
3495 END;
3496 /*FUNCTION GET_FIRST_UPPER
3497 ritorna il primo record non dummy superiore
3498
3499 intLev se disponibile e il livello del codparty passato
3500 altrimenti se lo calcola, rallentando
3501 */
3502 FUNCTION GET_FIRST_UPPER(VARPARTY VARCHAR2, INTLEV INT := NULL)
3503 RETURN VARCHAR2 IS
3504 VARCODFATHER VARCHAR(255);
3505 ISDUMM INT;
3506 VARLEVFATHER INT;
3507 BEGIN
3508 ISDUMM := IS_DUMMY_REC(VARPARTY, INTLEV);
3509 IF ISDUMM = 1 THEN
3510 ---- se e dummy, cerco il superiore del padre
3511 SELECT CODparentnode, TO_NUMBER(codLEVELparent)
3512 INTO VARCODFATHER, VARLEVFATHER
3513 FROM TB0042RELATIONS_STATIC T
3514 WHERE T.CODnode = VARPARTY
3515 AND T.idlevel = INTLEV
3516 AND xSYSDATE BETWEEN T.DTEstart AND T.DTEend;
3517
3518 RETURN GET_FIRST_UPPER(VARCODFATHER, VARLEVFATHER);
3519 ELSE
3520 ---se non e dummy, e lui stesso
3521 IF ISDUMM = 0 THEN
3522 RETURN VARPARTY;
3523 ELSE
3524 --- se isdummy e errata, torno null
3525 RETURN NULL;
3526 END IF;
3527 END IF;
3528 EXCEPTION
3529 WHEN OTHERS THEN
3530 LOG_SCRIPT('ERRORE GET_FIRST_UPPER ',
3531 'ERRORE GET_FIRST_UPPER ' || VARCODFATHER || ' ' ||
3532 SQLERRM);
3533 RETURN NULL;
3534 END;
3535 /*************** FUNCTION GET_HOST *********************
3536
3537 *********************************************************/
3538 FUNCTION GET_HOST RETURN VARCHAR2 IS
3539 RETVAR VARCHAR2(255);
3540
3541 BEGIN
3542 SELECT user INTO RETVAR FROM DUAL;
3543
3544 IF INSTR(RETVAR, '\') > 0 THEN
3545 RETVAR := SUBSTR(RETVAR, INSTR(RETVAR, '\') + 1, 10);
3546 ELSE
3547 IF INSTR(RETVAR, '/') > 0 THEN
3548 RETVAR := SUBSTR(RETVAR, INSTR(RETVAR, '/') + 1, 10);
3549 ELSE
3550 RETVAR := SUBSTR(RETVAR, 1, 10);
3551
3552 END IF;
3553
3554 END IF;
3555
3556 RETURN RETVAR;
3557 EXCEPTION
3558 WHEN OTHERS THEN
3559 RETURN '*error*';
3560
3561 END;
3562 /*
3563 FUNCTION GET_HOUR_DECODE(varCodtab varchar2,varValTabFrom varchar2) return VARCHAR2
3564
3565 */
3566 FUNCTION GET_HOUR_DECODE(VARCODHOUR VARCHAR2) RETURN VARCHAR2 IS
3567 STRRET VARCHAR2(3);
3568 INTVAL NUMBER;
3569
3570 BEGIN
3571 INTVAL := TO_NUMBER(VARCODHOUR);
3572
3573 IF INTVAL < 50 THEN
3574 STRRET := '00';
3575 ELSE
3576 IF INTVAL < 60 THEN
3577 STRRET := '01';
3578
3579 ELSE
3580 IF INTVAL < 70 THEN
3581 STRRET := '02';
3582 ELSE
3583 IF INTVAL < 80 THEN
3584 STRRET := '03';
3585 ELSE
3586 IF INTVAL < 90 THEN
3587 STRRET := '04';
3588 ELSE
3589 IF INTVAL < 100 THEN
3590 STRRET := '05';
3591 ELSE
3592 IF INTVAL < 110 THEN
3593 STRRET := '06';
3594 ELSE
3595 IF INTVAL < 120 THEN
3596 STRRET := '07';
3597 ELSE
3598 IF INTVAL < 130 THEN
3599 STRRET := '08';
3600 ELSE
3601 IF INTVAL < 140 THEN
3602 STRRET := '09';
3603 ELSE
3604 IF INTVAL < 150 THEN
3605 STRRET := '10';
3606 ELSE
3607 IF INTVAL < 160 THEN
3608 STRRET := '11';
3609 ELSE
3610 IF INTVAL < 170 THEN
3611 STRRET := '12';
3612 ELSE
3613 IF INTVAL < 180 THEN
3614 STRRET := '13';
3615 ELSE
3616 IF INTVAL < 190 THEN
3617 STRRET := '14';
3618 ELSE
3619 IF INTVAL < 200 THEN
3620 STRRET := '15';
3621 ELSE
3622 IF INTVAL < 210 THEN
3623 STRRET := '16';
3624 ELSE
3625 IF INTVAL >= 210 AND INTVAL <= 230 THEN
3626 STRRET := '16';
3627 ELSE
3628 STRRET := '00';
3629
3630 END IF;
3631
3632 END IF;
3633 END IF;
3634 END IF;
3635 END IF;
3636 END IF;
3637 END IF;
3638 END IF;
3639 END IF;
3640 END IF;
3641 END IF;
3642 END IF;
3643 END IF;
3644
3645 END IF;
3646
3647 END IF;
3648
3649 END IF;
3650 END IF;
3651
3652 END IF;
3653
3654 RETURN STRRET;
3655 EXCEPTION
3656 WHEN OTHERS THEN
3657 RETURN '00';
3658 END;
3659 /************************GET_LAST_VAL_EX*******************************************
3660 recupera l'ultimo valore importato per il campo. Altrimento torna spazio per varchar
3661 oppure 0 per numerici.
3662 *********************************************************************************/
3663 FUNCTION GET_LAST_VAL_EX(CODKEY VARCHAR2,
3664 FIELDNAME VARCHAR2,
3665 FIELDTYPE VARCHAR2) RETURN VARCHAR2 IS
3666 STRRET VARCHAR2(255);
3667 SQLSTRING VARCHAR2(8000);
3668 INTCOUNT INT;
3669
3670 BEGIN
3671
3672 SQLSTRING := '
3673 select /*+ index(F6X0109_BU) */ count(*)
3674 FROM F6X0109_BU t
3675 where
3676 t.axan8=TO_NUMBER(trim(''' || CODKEY || ''' ) )
3677 and t.axukid in
3678 (
3679 select MAX(xtukid) from F6X0001 t2 inner join
3680 F6X0109_BU t3 on t2.xtukid=t3.axukid
3681 where
3682 trim(t2.xty6xptdr)=''IX''
3683 )';
3684
3685 EXECUTE IMMEDIATE SQLSTRING
3686 INTO INTCOUNT;
3687
3688 IF INTCOUNT > 0 THEN
3689
3690 SQLSTRING := 'SELECT ' || FIELDNAME || ' FROM F6X0109_BU t
3691 where
3692 t.axan8=' || TRIM(CODKEY) || '
3693 and t.axukid in
3694 (
3695 select MAX(xtukid) from F6X0001 t2 inner join
3696 F6X0109_BU t3 on t2.xtukid=t3.axukid and
3697 t3.axenhv=t2.xtenhv
3698 where
3699 trim(t2.xty6xptdr)=''IX''
3700 )
3701 ';
3702 EXECUTE IMMEDIATE SQLSTRING
3703 INTO STRRET;
3704 RETURN STRRET;
3705 ELSE
3706 IF FIELDTYPE = 'NUMBER' THEN
3707 RETURN 0;
3708 ELSE
3709 RETURN ' ';
3710
3711 END IF;
3712
3713 END IF;
3714 END;
3715 /************************GET_LAST_VALX*******************************************
3716 recupera l'ultimo valore importato per il campo. Altrimento torna spazio per varchar
3717 oppure 0 per numerici.
3718 *********************************************************************************/
3719 FUNCTION GET_LAST_VAL(CODKEY VARCHAR2,
3720 FIELDNAME VARCHAR2,
3721 FIELDTYPE VARCHAR2) RETURN VARCHAR2 IS
3722 STRRET VARCHAR2(255);
3723 SQLSTRING VARCHAR2(8000);
3724 INTCOUNT INT;
3725 TYPE TCUR IS REF CURSOR;
3726
3727 CUR_VAL TCUR;
3728 BEGIN
3729
3730 SQLSTRING := '
3731 SELECT ' || FIELDNAME || ' FROM F6X0109_BU t
3732 inner join f6x0001 t2 on t2.xtukid=t.axukid and t2.xtenhv=t.axenhv
3733 where t.axan8=' || TRIM(CODKEY) || '
3734 and trim(t2.xty6xptdr)=''IX''
3735 order by t2.xtukid desc
3736 ';
3737
3738 OPEN CUR_VAL FOR SQLSTRING;
3739 FETCH CUR_VAL
3740 INTO STRRET;
3741 IF NOT CUR_VAL%NOTFOUND THEN
3742
3743 RETURN STRRET;
3744 ELSE
3745 IF FIELDTYPE = 'NUMBER' THEN
3746 RETURN 0;
3747 ELSE
3748 RETURN ' ';
3749
3750 END IF;
3751
3752 END IF;
3753 /*EXCEPTION
3754 WHEN OTHERS THEN
3755 if fieldType='NUMBER' then
3756 return 0;
3757 else
3758 return ' ';
3759 end if;
3760 LOG_SCRIPT(sqlstring);*/
3761
3762 END;
3763 /********************************************************
3764 GET_TAB_PREFIX
3765 ritorna il prefisso di 2 caratteri dei vassoi ROVAGNATI
3766 vartabFrom nome del vassoio(tabella..)
3767 ************************************************************/
3768 FUNCTION GET_TAB_PREFIX(VARTABFROM VARCHAR2) RETURN VARCHAR2 IS
3769 VARTIPO VARCHAR2(255);
3770 VARPREFIX VARCHAR2(255);
3771 VARTABLEFROMSYN VARCHAR2(255);
3772 VARSTR VARCHAR2(255);
3773 STRERR VARCHAR2(2048);
3774
3775 BEGIN
3776 SELECT OBJECT_TYPE
3777 INTO VARTIPO
3778 FROM USER_OBJECTS T
3779 WHERE UPPER(TRIM(T.OBJECT_NAME)) = UPPER(TRIM(VARTABFROM));
3780
3781 IF VARTIPO = 'SYNONYM' THEN
3782
3783 CREATE_AS_IFNOTEXISTS(VARTABFROM || 'SYNTMP', VARTABFROM, '', 0);
3784 -- EXECUTE IMMEDIATE 'CREATE TABLE ' || vartabFrom || 'SYNTMP AS SELECT * FROM ' || vartabFrom || ' WHERE 1=2';
3785 COMMIT;
3786 VARSTR := VARTABFROM || 'SYNTMP';
3787 VARTABLEFROMSYN := VARSTR;
3788 SELECT TRIM(REPLACE(COLUMN_NAME, 'UKID', ''))
3789 INTO VARPREFIX
3790 FROM USER_TAB_COLUMNS T
3791 WHERE T.COLUMN_NAME LIKE '%UKID'
3792 AND T.TABLE_NAME = UPPER(TRIM(VARSTR));
3793
3794 DROP_TAB_IFEXISTS(VARTABFROM || 'SYNTMP');
3795 ELSE
3796 VARSTR := VARTABFROM;
3797 VARTABLEFROMSYN := VARSTR;
3798 SELECT TRIM(REPLACE(COLUMN_NAME, 'UKID', ''))
3799 INTO VARPREFIX
3800 FROM USER_TAB_COLUMNS T
3801 WHERE T.COLUMN_NAME LIKE '%UKID'
3802 AND T.TABLE_NAME = VARSTR;
3803
3804 END IF;
3805 RETURN VARPREFIX;
3806 EXCEPTION
3807 WHEN OTHERS THEN
3808 STRERR := SQLERRM;
3809 RETURN '';
3810 END;
3811 /*********************************************************************
3812 LEV_FROM_OW_TO_XT
3813 Trascodifica in uscita il livello del cliente
3814 *********************************************************************/
3815 FUNCTION LEV_FROM_OW_TO_XT(INTLEV VARCHAR2) RETURN NUMBER IS
3816 BEGIN
3817
3818 CASE
3819 WHEN INTLEV = 'DM' THEN
3820 RETURN - 1;
3821 WHEN INTLEV = 'CF' THEN
3822 RETURN 0;
3823
3824 WHEN INTLEV = 'CC' THEN
3825 RETURN 1;
3826
3827 WHEN INTLEV = 'CT' THEN
3828 RETURN 2;
3829
3830 WHEN INTLEV = 'SG' THEN
3831 RETURN 3;
3832
3833 WHEN INTLEV = 'GR' THEN
3834 RETURN 4;
3835
3836 WHEN INTLEV = 'AS' THEN
3837 RETURN 5;
3838
3839 WHEN INTLEV = 'CG' THEN
3840 RETURN 6;
3841
3842 WHEN INTLEV = 'CN' THEN
3843 RETURN 7;
3844 ELSE
3845 RETURN NULL;
3846 END CASE;
3847
3848 END;
3849 /*********************************************************************
3850 LEV_FROM_XT_TO_OW
3851 Trascodifica in uscita il livello del cliente
3852 *********************************************************************/
3853 FUNCTION LEV_FROM_XT_TO_OW(INTLEV NUMBER) RETURN VARCHAR2 IS
3854 BEGIN
3855
3856 CASE
3857 WHEN INTLEV = -1 THEN
3858 RETURN 'DM';
3859 WHEN INTLEV = 0 THEN
3860 RETURN 'CF';
3861
3862 WHEN INTLEV = 1 THEN
3863 RETURN 'CC';
3864
3865 WHEN INTLEV = 2 THEN
3866 RETURN 'CT';
3867
3868 WHEN INTLEV = 3 THEN
3869 RETURN 'SG';
3870
3871 WHEN INTLEV = 4 THEN
3872 RETURN 'GR';
3873
3874 WHEN INTLEV = 5 THEN
3875 RETURN 'AS';
3876
3877 WHEN INTLEV = 6 THEN
3878 RETURN 'CG';
3879
3880 WHEN INTLEV = 7 THEN
3881 RETURN 'CN';
3882 ELSE
3883 RETURN NULL;
3884 END CASE;
3885
3886 END;
3887 /*GET_PROG_NAME
3888 ritorna il nome del programma chiamante
3889
3890 */
3891 FUNCTION GET_PROG_NAME RETURN VARCHAR2 IS
3892 BEGIN
3893 RETURN PROCESS_PROG_NAME;
3894 END;
3895 /******************** GET_ROW_COUNT ****************************/
3896 FUNCTION GET_ROW_COUNT(UKID NUMBER,
3897 TABPREFIX VARCHAR2,
3898 TABLENAME VARCHAR2,
3899 VARENV VARCHAR2) RETURN NUMBER IS
3900 RECCOUNT NUMBER;
3901 SQLSTRING VARCHAR2(1024);
3902
3903 BEGIN
3904 SQLSTRING := 'SELECT count(*) from ' || TABLENAME || ' f where f.' ||
3905 TABPREFIX || 'ukid=' || UKID || ' and trim(f.' ||
3906 TABPREFIX || 'enhv)=
3907 ''' || VARENV || '''';
3908
3909 EXECUTE IMMEDIATE SQLSTRING
3910 INTO RECCOUNT;
3911 RETURN RECCOUNT;
3912 EXCEPTION
3913 WHEN OTHERS THEN
3914 RETURN 0;
3915 LOG_SCRIPT(' ERRORE GET_ROW_COUNT ' || TABLENAME || ' ' || TABPREFIX || ' ' ||
3916 TO_CHAR(UKID));
3917
3918 END;
3919 /*FUNCTION GIUL_TO_GREG(varGiulDate varchar2) return date;
3920 varGiulDate: data di tipo varchar2, juliana
3921 stringa di 6 caratteri con pad left di zeri in formato juliano
3922 ovvero ZZZXXX con
3923 ZZZ: numero di anni dal 1900
3924 XXX: numero di giorni dall'inizio dell'anno della data in input
3925 return: data di tipo DATE, oracle type(gregoriana)
3926 -----------*/
3927 FUNCTION GIUL_TO_GREG(VARGIULDATE VARCHAR2) RETURN DATE IS
3928 GREGDATE DATE;
3929 STRDTE VARCHAR2(20);
3930
3931 BEGIN
3932 STRDTE := LPAD(VARGIULDATE, 6, '0');
3933 SELECT TO_DATE('0101' || (1900 + SUBSTR(STRDTE, 1, 3)), 'DDMMYYYY') +
3934 (SUBSTR(STRDTE, 4) - 1)
3935 INTO GREGDATE
3936 FROM DUAL;
3937
3938 RETURN GREGDATE;
3939 EXCEPTION
3940 WHEN OTHERS THEN
3941 RETURN NULL;
3942
3943 END;
3944 /*FUNCTION GREG_TO_GIUL(varGregDate date) return varchar2
3945 varGregDate: data di tipo DATE, oracle type
3946 return: string di 6 caratteri con pad left di zeri in formato juliano
3947 ovvero ZZZXXX con
3948 ZZZ: numero di anni dal 1900
3949 XXX: numero di giorni dall'inizio dell'anno della data in input
3950 -----------*/
3951 FUNCTION GREG_TO_GIUL(VARGREGDATE DATE) RETURN VARCHAR2 IS
3952 GIULDATE VARCHAR2(6);
3953
3954 BEGIN
3955
3956 IF VARGREGDATE > TO_DATE('19000101', 'YYYYMMDD') THEN
3957
3958 SELECT LPAD(TO_CHAR(VARGREGDATE, 'YYYY') - 1900, 3, '0') ||
3959 LPAD(TRUNC(VARGREGDATE -
3960 TO_DATE('01/01/' || TO_CHAR(VARGREGDATE, 'YYYY'),
3961 'DD/MM/YYYY')) + 1,
3962 3,
3963 '0')
3964 INTO GIULDATE
3965 FROM DUAL;
3966
3967 ELSE
3968 GIULDATE := NULL;
3969
3970 END IF;
3971
3972 RETURN GIULDATE;
3973 EXCEPTION
3974 WHEN OTHERS THEN
3975 RETURN NULL;
3976
3977 END;
3978 /*------------ IMPORT_DEFVAL ---------------------------------
3979
3980 Importa i valori di default in TB_INT_DEFAULT e genera la vista
3981 v_def_val con i campi in una singola riga aventi i valori
3982 di default nel tipo corretto
3983
3984 TB_INT_DEFAULT campi rilevanti
3985 FIELDTO: nome campo
3986 DFLFIELD: regola per recuperare il campo di default
3987 DEFVAL: valore di default convertito in VARCHAR2
3988
3989 Va fatta girare quando viene aggiunto un nuovo campo oppure quando varia
3990 */ ----------- IMPORT_DEFVAL ---------------------------------
3991 PROCEDURE IMPORT_DEFVAL IS
3992 SQLSTRING CLOB;
3993 CURSOR CUR_V IS
3994 SELECT T.* FROM TB_INT_DEFAULT T ORDER BY T.FIELDTO;
3995
3996 BEGIN
3997
3998 SQLSTRING := 'CREATE OR REPLACE FORCE VIEW qz_v_DEF_VAL AS SELECT ';
3999 FOR RL_CUR IN CUR_V LOOP
4000
4001 SQLSTRING := SQLSTRING || ' max(' || RL_CUR.FIELDTO || ')
4002 AS ' || RL_CUR.FIELDTO || ',';
4003 END LOOP;
4004
4005 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
4006 SQLSTRING := SQLSTRING || ' from ( SELECT ';
4007 FOR RL_CUR IN CUR_V LOOP
4008
4009 SQLSTRING := SQLSTRING || 'CASE WHEN upper(trim(
4010 CVDTAI))=''' ||
4011 SUBSTR(UPPER(TRIM(RL_CUR.FIELDTO)), 3) || ''' then ';
4012 IF UPPER(TRIM(RL_CUR.DFLFIELD)) = 'BLANK' THEN
4013 SQLSTRING := SQLSTRING || ''' '''; ---BLANK
4014 ELSE
4015 SQLSTRING := SQLSTRING || RL_CUR.DFLFIELD;
4016
4017 END IF;
4018
4019 SQLSTRING := SQLSTRING || ' else null end as ' || RL_CUR.FIELDTO || ',';
4020
4021 END LOOP;
4022
4023 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1);
4024 SQLSTRING := SQLSTRING || ' FROM F6X0006 t WHERE CVTBLE IN(''F6X0109'',''F6X0115'')
4025 AND CVKCO IN(''00001'',''00000'')
4026 ) V
4027 ';
4028
4029 Z_PKG_XTEL_IMPORT.LOG_SCRIPT(SQLSTRING);
4030 COMMIT;
4031 EXECUTE IMMEDIATE TO_CHAR(SQLSTRING);
4032 COMMIT;
4033 DECLARE
4034 CURSOR CUR_FIELDS IS
4035 SELECT * FROM TB_INT_DEFAULT T WHERE T.DFLFIELD <> 'BLANK';
4036 BEGIN
4037
4038 FOR ROW_FIELDS IN CUR_FIELDS LOOP
4039
4040 EXECUTE IMMEDIATE 'UPDATE tb_int_default t SET t.defval
4041 = (SELECT ' || ROW_FIELDS.FIELDTO ||
4042 ' from qz_V_DEF_VAL )
4043 WHERE upper(trim(t.fieldto))=upper(trim(''' ||
4044 ROW_FIELDS.FIELDTO || '''))
4045 ';
4046 END LOOP;
4047
4048 COMMIT;
4049 END;
4050
4051 END;
4052 /*FUNCTION IS_COL_STRING
4053 riorna true se la colonna della tabella passata e di tipo carattere
4054 */
4055 FUNCTION IS_COL_STRING(COLNAME VARCHAR2, TABNAME VARCHAR2) RETURN NUMBER IS
4056 COLTYPE VARCHAR2(255);
4057
4058 BEGIN
4059 --return false;/* problema: in remoto non funziona perche schemi diversi... */
4060 SELECT DATA_TYPE
4061 INTO COLTYPE
4062 FROM USER_TAB_COLUMNS T
4063 WHERE UPPER(TRIM(T.TABLE_NAME)) = UPPER(TRIM(TABNAME))
4064 AND UPPER(TRIM(T.COLUMN_NAME)) = UPPER(TRIM(COLNAME));
4065
4066 IF COLTYPE = 'VARCHAR2' OR COLTYPE = 'CHAR' THEN
4067 RETURN 1;
4068 ELSE
4069 RETURN 0;
4070
4071 END IF;
4072
4073 EXCEPTION
4074 WHEN OTHERS THEN
4075 RETURN 0;
4076 END;
4077 /*FUNCTION IS_COL_TO_DECODE
4078 riorna true se il valore deve essere decodificato, dalla tabella TB_INT_DECODEFIELD
4079 */
4080 FUNCTION IS_COL_TO_DECODE(VARCOLNAME VARCHAR2, VARTABNAME VARCHAR2)
4081 RETURN NUMBER IS
4082 COUNTVAL INT;
4083
4084 BEGIN
4085 SELECT COUNT(*)
4086 INTO COUNTVAL
4087 FROM TB_INT_DECODEFIELD T
4088 WHERE UPPER(TRIM(T.TABLENAME)) = UPPER(TRIM(VARTABNAME))
4089 AND UPPER(TRIM(T.FIELDNAME)) = UPPER(TRIM(VARCOLNAME));
4090
4091 IF COUNTVAL > 0 THEN
4092 RETURN 1;
4093 ELSE
4094 RETURN 0;
4095
4096 END IF;
4097
4098 END;
4099 /*FUNCTION IS NUMERIC*/
4100 FUNCTION IS_NUMERIC(INPUTSTRING VARCHAR2) RETURN NUMBER IS
4101 NUM NUMBER;
4102
4103 BEGIN
4104 IF TRIM(INPUTSTRING) IS NULL THEN
4105 RETURN 0;
4106 END IF;
4107 NUM := TO_NUMBER(INPUTSTRING);
4108 RETURN 1;
4109 EXCEPTION
4110 WHEN OTHERS THEN
4111 RETURN 0;
4112
4113 END;
4114 /*FUNCTION IS_DUMMY_REC
4115 ritorna 1 se e un record dummmy
4116 0 se no
4117 -1 se errore
4118
4119 intLev se disponibile e il livello del codparty passato
4120 altrimenti se lo calcola, rallentando
4121 */
4122 FUNCTION IS_DUMMY_REC(VARPARTY VARCHAR2, INTLEV INT := NULL) RETURN INT IS
4123 VARCODSON VARCHAR2(255);
4124 VARLEVSON INT;
4125 VARLEVPARTY INT;
4126 INTCOUNT INT;
4127 VAREXPSON VARCHAR2(255);
4128 STRSQL VARCHAR2(1024);
4129 BEGIN
4130 --prendo il livello del party passato
4131 IF INTLEV IN (1, 5) OR SUBSTR(VARPARTY, 1, 2) IN ('CC', 'AS') THEN
4132 RETURN 1;
4133 END IF;
4134
4135 IF INTLEV IS NULL THEN
4136 SELECT TO_NUMBER(codLEVEL)
4137 INTO VARLEVPARTY
4138 FROM TB0042RELATIONS_static
4139 WHERE CODnode = VARPARTY and
4140 coddim = 'CUST' and
4141 codhier = 'COMM' and
4142 coddiv = '001';
4143 ELSE
4144 VARLEVPARTY := INTLEV;
4145 END IF;
4146 ---se e di livello <=2 ed esiste almeno un record inferiore con codice uguale a meno dei caratteri
4147 --iniziali, e un dummy record
4148 VAREXPSON := EXP_CODPARTY(VARPARTY);
4149 STRSQL := 'SELECT COUNT(*)
4150 FROM T053_TEMP T
4151 WHERE CODSON <> ''' || VARPARTY || '''
4152 AND ''' || VAREXPSON ||
4153 ''' = T.EXPSON
4154 AND TO_NUMBER(T.LEVELSON) < ' || VARLEVPARTY || '
4155 AND ' || VARLEVPARTY || ' <= 2';
4156 EXECUTE IMMEDIATE STRSQL
4157 INTO INTCOUNT;
4158 IF INTCOUNT > 0 THEN
4159 RETURN 1;
4160 ELSE
4161 ---se e di livello >2 ed esiste almeno un record superiore con codice uguale a meno dei caratteri
4162 --iniziali, e un dummy record
4163
4164 /*STRSQL := 'SELECT COUNT(*)
4165
4166 FROM T053_TEMP T
4167 WHERE CODSON <> ''' || VARPARTY || '''
4168 AND ''' || VAREXPSON ||
4169 ''' = T.EXPSON
4170 AND TO_NUMBER(T.LEVELSON) > ' || VARLEVPARTY || '
4171 AND ' || VARLEVPARTY || ' > 2';
4172 EXECUTE IMMEDIATE STRSQL
4173 INTO INTCOUNT;*/
4174
4175 STRSQL := ' SELECT COUNT(*)
4176 FROM T053_TEMP T
4177 WHERE CODSON <> ''' || VARPARTY || '''
4178 AND ''' || VAREXPSON ||
4179 ''' = T.EXPSON
4180 AND TO_NUMBER(T.LEVELSON) > ' || VARLEVPARTY || '
4181 AND ' || VARLEVPARTY || ' > 2 ';
4182 EXECUTE IMMEDIATE STRSQL
4183 INTO INTCOUNT;
4184
4185 IF INTCOUNT > 0 THEN
4186 RETURN 1;
4187 ELSE
4188 RETURN 0;
4189 END IF;
4190 END IF;
4191
4192 EXCEPTION
4193 WHEN OTHERS THEN
4194 --- LOG_SCRIPT('DUMMY RECORD ' || VARPARTY || ' ' || SQLERRM,
4195 --- 'DUMMY RECORD ');
4196 RETURN - 1;
4197 END;
4198 PROCEDURE RIEMPI_GERARCHIA_FITTIZI(PI_PROGR_PROCESSO NUMBER) IS
4199
4200 VL_PROGR_DETTAGLIO NUMBER;
4201
4202 BEGIN
4203
4204 BEGIN
4205
4206 VL_PROGR_DETTAGLIO := pkg_utils.log_new_detail(PI_PROGR_PROCESSO,
4207 'GER_FITTIZI',
4208 'COMPLETA GERARCHIA ARTICOOLI FITTIZI',
4209 0);
4210
4211 /* UPDATE T060ARTICLE A
4212 SET CODBRAND = (SELECT T902.OPTINFO
4213 FROM T902TABROWS T902
4214 WHERE T902.CODTABROW = A.CODFRMT
4215 AND CODTAB = 'FRMT')
4216 WHERE A.FLGFITTIZIO = -1
4217 AND A.CODARTSOURCE IN ('CODFRMT');*/
4218
4219 UPDATE T060ARTICLE A
4220 SET A.CODLINMER = (SELECT T902.OPTINFO
4221 FROM T902TABROWS T902
4222 WHERE T902.CODTABROW = A.CODFRMT
4223 AND CODSYS = A.CODDIV
4224 AND CODTAB = 'FRMT')
4225 WHERE A.FLGartFITTIZIO = -1
4226 AND A.CODARTSOURCE IN ('CODFRMT', 'CODBRAND');
4227
4228 UPDATE T060ARTICLE A
4229 SET A.CODFAMMER = (SELECT T902.OPTINFO
4230 FROM T902TABROWS T902
4231 WHERE T902.CODTABROW = A.CODLINMER
4232 AND CODSYS = A.CODDIV
4233 AND CODTAB = 'LINME')
4234 WHERE A.FLGartFITTIZIO = -1
4235 AND A.CODARTSOURCE IN ('CODFRMT', 'CODBRAND', 'CODLINMER');
4236
4237 UPDATE T060ARTICLE A
4238 SET A.CODCATMER = (SELECT T902.OPTINFO
4239 FROM T902TABROWS T902
4240 WHERE T902.CODTABROW = A.CODFAMMER
4241 AND CODSYS = A.CODDIV
4242 AND CODTAB = 'FAMME')
4243 WHERE A.FLGartFITTIZIO = -1
4244 AND A.CODARTSOURCE IN
4245 ('CODFRMT', 'CODBRAND', 'CODLINMER', 'CODFAMMER');
4246
4247 pkg_utils.log_end_detail(PI_PROGR_PROCESSO,
4248 VL_PROGR_DETTAGLIO,
4249 0,
4250 0,
4251 0,
4252 0);
4253
4254 EXCEPTION
4255 WHEN OTHERS THEN
4256 ROLLBACK;
4257
4258 pkg_utils.log_new_detail_error(PI_PROGR_PROCESSO,
4259 VL_PROGR_DETTAGLIO,
4260 SUBSTR(SQLCODE, 1, 20),
4261 SUBSTR(SQLERRM, 1, 1000));
4262
4263 RAISE_APPLICATION_ERROR(-20100,
4264 'ERRORE:' || SUBSTR(SQLERRM, 1, 1000));
4265
4266 END;
4267
4268 END;
4269
4270
4271 /*----------------------- INCASSI_JOB_EXPORT ----------------------------
4272 job di esportazione incassi dei clienti dalle XOUT ai vassoi
4273 ------------------------------------------------------------------*/
4274 PROCEDURE INCASSI_JOB_EXPORT IS
4275 STRLINK VARCHAR2(1024);
4276 DTELASTWRITE DATE;
4277 INTCOUNT INT;
4278 STRERR VARCHAR2(2048);
4279 UKID NUMBER;
4280 RECTOT NUMBER := 0;
4281
4282 BEGIN
4283 --strLink:='';
4284 -- controllo se esiste almeno un processo di esportazione che io abbia gia terminato di scrivere
4285
4286 SELECT COUNT(*)
4287 INTO INTCOUNT
4288 FROM F6X0001 T
4289 WHERE TRIM(T.XTY6XTYPR) = 'INCASSI'
4290 AND TRIM(T.XTENHV) = GET_ENVIRONMENT
4291 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
4292 AND T.XTY6XPRST = 'N';
4293
4294 IF INTCOUNT > 0 THEN
4295 --- c'e gia un processo. ricavo la data
4296 DECLARE
4297 CURSOR CUR_DATE IS
4298 SELECT GIUL_TO_GREG(T.XTY6XCRDA)
4299 FROM F6X0001 T
4300 WHERE TRIM(T.XTY6XTYPR) = 'ADDRESS'
4301 AND TRIM(T.XTENHV) = GET_ENVIRONMENT
4302 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
4303 AND T.XTY6XPRST = 'N'
4304 ORDER BY T.XTUKID DESC;
4305
4306 BEGIN
4307 OPEN CUR_DATE;
4308 FETCH CUR_DATE
4309 INTO DTELASTWRITE;
4310 -- prendo l'ultima data soltanto
4311 CLOSE CUR_DATE;
4312 END;
4313 ELSE
4314 DTELASTWRITE := DEFAULT_START_DATE;
4315
4316 END IF;
4317
4318 SELECT SEQ_UKID.NEXTVAL INTO UKID FROM DUAL;
4319
4320 ----
4321 XOUT_INCASSI(DTELASTWRITE);
4322
4323 --- nella tabella dei campi impostiamo il valore del
4324 --- cakpo ukid
4325 UPDATE TB_INT_TABFIELDS T
4326 SET T.FIELDFROM = UKID
4327 WHERE LOWER(T.TABLENAME) = 'f6x0301'
4328 AND LOWER(T.FIELDNAME) = 'xtukid';
4329
4330 UPDATE TB_INT_TABFIELDS T
4331 SET T.FIELDFROM = '''' || GET_ENVIRONMENT || ''''
4332 WHERE LOWER(T.TABLENAME) = 'f6x0301'
4333 AND LOWER(T.FIELDNAME) = 'xtenhv';
4334
4335 COMMIT;
4336 BEGIN
4337 SET_WRITING_STATE(GET_ENVIRONMENT, 'INCASSI', UKID);
4338 AUTOINSERT('f6x0301');
4339 RECTOT := GET_ROW_COUNT(UKID, 'xt', 'f6x0301', GET_ENVIRONMENT);
4340
4341 SET_END_WRITING_STATE(GET_ENVIRONMENT, 'INCASSI', UKID, RECTOT);
4342 EXCEPTION
4343 WHEN OTHERS THEN
4344 STRERR := SQLERRM;
4345 SET_ERR_WRITING_STATE(GET_ENVIRONMENT,
4346 'INCASSI',
4347 UKID,
4348 STRERR,
4349 RECTOT);
4350
4351 END;
4352
4353 END;
4354 /*----------------------- log_file_write ----------------------------
4355 scrive su file di log il messaggio passato
4356 msg stringa da scrivere sul file di log
4357 -- Cancella una tabella se esiste
4358 ------------------------------------------------------------------*/
4359 PROCEDURE LOG_FILE_WRITE(MSG IN VARCHAR2, APPLICATION IN VARCHAR2 := '') IS
4360
4361 OUTPUT_FILE UTL_FILE.FILE_TYPE;
4362 STRTODAY VARCHAR2(255);
4363 STRCHUNCK VARCHAR2(1000);
4364 I INT;
4365 NCHUNCK INT;
4366 FILENAME VARCHAR2(30);
4367
4368 BEGIN
4369 STRTODAY := TO_CHAR(xSYSDATE, 'yyyyMMdd');
4370 --strMsg:= to_Char(sysdate,'hh:mm:ss ---> ')|| msg;
4371 IF TRIM(APPLICATION) IS NULL THEN
4372 FILENAME := 'rovaspot';
4373 ELSE
4374 FILENAME := 'log' || APPLICATION;
4375
4376 END IF;
4377
4378 OUTPUT_FILE := UTL_FILE.FOPEN('LOGSXTEL',
4379 'log' || APPLICATION || STRTODAY || '.txt',
4380 'A');
4381 ----utl_file.put_line(output_file,'SCRIPT LENGTH:' || TO_CHAR(LENGTH(strMsg)) ,true);
4382 ----utl_file.new_line(output_file,2);
4383 IF LENGTH(MSG) > 1000 THEN
4384 NCHUNCK := LENGTH(MSG) / 1000;
4385 END IF;
4386
4387 I := 0;
4388 WHILE I < NCHUNCK LOOP
4389 STRCHUNCK := SUBSTR(MSG, I * 1000 + 1, 1000);
4390 UTL_FILE.PUT_LINE(OUTPUT_FILE, STRCHUNCK, TRUE);
4391 I := I + 1;
4392 END LOOP;
4393
4394 /* ultimi bytes..*/
4395
4396 STRCHUNCK := SUBSTR(MSG, I * 1000 + 1);
4397 UTL_FILE.PUT_LINE(OUTPUT_FILE, STRCHUNCK, TRUE);
4398 UTL_FILE.NEW_LINE(OUTPUT_FILE, 2);
4399 /*utl_file.new_line(output_file);*/
4400
4401 UTL_FILE.FCLOSE(OUTPUT_FILE);
4402 EXCEPTION
4403 WHEN OTHERS THEN
4404 UTL_FILE.FCLOSE(OUTPUT_FILE);
4405
4406 END;
4407 /*---------------- LOG_PROCESS_ERR----------------------------------------
4408 Esegue la scrittura di un record di log nella F6X0002 riguardo ad un perocesso
4409 eseguito con errore
4410 ----------------------------------------------------------*/
4411 PROCEDURE LOG_PROCESS_ERR(VARDESC VARCHAR2,
4412 VARENV VARCHAR2,
4413 TIPOPROC VARCHAR2,
4414 VARUKID NUMBER) IS
4415 BEGIN
4416 INSERT INTO F6X0002 T
4417 (XTENHV,
4418 XTUKID,
4419 XTUK01,
4420 XTY6XPRER,
4421 XTGPTX,
4422 XTY6XTYPR,
4423 XTUSER,
4424 XTPID,
4425 XTJOBN,
4426 XTUPMJ,
4427 XTUPMT)
4428 VALUES
4429 (VARENV,
4430 VARUKID,
4431 (SELECT MAX(XTUK01) + 1 FROM F6X0002),
4432 'E',
4433 VARDESC,
4434 TIPOPROC,
4435 (SELECT SUBSTR(user, 1, 10)
4436 FROM DUAL),
4437 PROCESS_PROG_NAME,
4438 GET_HOST,
4439 GREG_TO_GIUL(xSYSDATE),
4440 TO_CHAR(xSYSDATE, 'HH24MISS'));
4441
4442 EXCEPTION
4443 WHEN OTHERS THEN
4444 NULL;
4445
4446 END;
4447 /*---------------- LOG_PROCESS_OK----------------------------------------
4448 Esegue la scrittura di un record di log nella F6X0002 riguardo ad un perocesso
4449 eseguito senza errori
4450 ----------------------------------------------------------*/
4451 PROCEDURE LOG_PROCESS_OK(VARDESC VARCHAR2,
4452 VARENV VARCHAR2,
4453 TIPOPROC VARCHAR2,
4454 VARUKID NUMBER) IS
4455 BEGIN
4456 INSERT INTO F6X0002 T
4457 (XTENHV,
4458 XTUKID,
4459 XTUK01,
4460 XTY6XPRER,
4461 XTGPTX,
4462 XTY6XTYPR,
4463 XTUSER,
4464 XTPID,
4465 XTJOBN,
4466 XTUPMJ,
4467 XTUPMT)
4468 VALUES
4469 (VARENV,
4470 VARUKID,
4471 (SELECT MAX(XTUK01) + 1 FROM F6X0002),
4472 'I',
4473 VARDESC,
4474 TIPOPROC,
4475 (SELECT SUBSTR(user, 1, 10)
4476 FROM DUAL),
4477 PROCESS_PROG_NAME,
4478 GET_HOST,
4479 GREG_TO_GIUL(xSYSDATE),
4480 TO_CHAR(xSYSDATE, 'HH24MISS'));
4481
4482 EXCEPTION
4483 WHEN OTHERS THEN
4484 NULL;
4485
4486 END;
4487 /*----------------------- LOG_SCRIPT ----------------------------
4488 scrive sulla tabella di log lo statement specifico all'interno della procedura
4489 SQLDescription descrizione breve
4490 SQLScript statement eseguito
4491 tipolog:1: file e db 2:solo file 3: solo db 4:anche COMMIT
4492 ------------------------------------------------------------------*/
4493 PROCEDURE LOG_SCRIPT(SQLSCRIPT IN VARCHAR2,
4494 SQLDESCRIPTION IN VARCHAR2 := '',
4495 DUR INT := 0,
4496 TIPOLOG INT := 1) IS
4497 INTLOGENABLE INTEGER := 1;
4498 SQLDESCR VARCHAR2(50);
4499 INTID NUMBER;
4500
4501 BEGIN
4502 -- LOG_FILE_WRITE( 'script_id: ' || TO_CHAR(ScriptID ) || ' statement:' || SQLScript);
4503
4504 IF TIPOLOG = 1 OR TIPOLOG = 2 OR TIPOLOG = 4 THEN
4505 LOG_FILE_WRITE(SQLSCRIPT, 'rova');
4506 END IF;
4507
4508 IF TIPOLOG = 1 OR TIPOLOG = 3 OR TIPOLOG = 4 THEN
4509 IF TRIM(SQLDESCRIPTION) IS NOT NULL THEN
4510 SQLDESCR := SUBSTR(SQLDESCRIPTION, 1, 50);
4511 ELSE
4512 SQLDESCR := SUBSTR(SQLSCRIPT, 1, 50);
4513
4514 END IF;
4515
4516 SELECT SEQ_SQL_SCRIPT.NEXTVAL INTO INTID FROM DUAL;
4517
4518 INSERT INTO TB_INT_SQLSCRIPT
4519 (SQLDESCRIPTION, SQLSCRIPT, DTELOG, DURATA, SQL_ID)
4520 VALUES
4521 (SQLDESCR, SQLSCRIPT, xSYSDATE, DUR, INTID);
4522
4523 ---- LOG_FILE_WRITE(SQL_STR,'SP1_DWH');
4524
4525 END IF;
4526 IF TIPOLOG = 4 THEN
4527 COMMIT;
4528 END IF;
4529
4530 END;
4531
4532
4533 /*****************PROCEDURE CREA NODO DA
4534 Procedura molto specifica per ROVAGNATI.
4535 Aggiunge una riga in t040,t041, t042 copiando i valori da NodoDa
4536 e modificando codparty aggiungendogli il prefisso, impostando i flag come passati
4537 dai parametri
4538 **********************************************/
4539 PROCEDURE CREA_NODO_DA(PREFISSO VARCHAR2,
4540 NODODA VARCHAR2,
4541 VARFLGCUSTINV NUMBER,
4542 VARFLGCUSTDELIV NUMBER) IS
4543
4544 CURSOR CUR_FIELDS(VARTABLENAME VARCHAR2) IS
4545 SELECT COLUMN_NAME
4546 FROM USER_TAB_COLUMNS T
4547 WHERE T.TABLE_NAME = UPPER(TRIM(VARTABLENAME))
4548 ORDER BY T.COLUMN_ID;
4549
4550 SQLSTRING CLOB;
4551
4552 BEGIN
4553 SQLSTRING := ' INSERT INTO T040PARTY(';
4554 FOR ROW_FIELDS IN CUR_FIELDS('t040party') LOOP
4555 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4556 END LOOP;
4557
4558 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4559 SQLSTRING := SQLSTRING || ') SELECT ';
4560 FOR ROW_FIELDS IN CUR_FIELDS('t040party') LOOP
4561
4562 CASE
4563 WHEN ROW_FIELDS.COLUMN_NAME = 'CODPARTY' THEN
4564 SQLSTRING := SQLSTRING || '''' || PREFISSO || ''' || ' ||
4565 ROW_FIELDS.COLUMN_NAME || ' as ' ||
4566 ROW_FIELDS.COLUMN_NAME || ',';
4567
4568 WHEN ROW_FIELDS.COLUMN_NAME = 'FLGCUSTINV' THEN
4569 SQLSTRING := SQLSTRING || VARFLGCUSTINV || ' as FLGCUSTINV,';
4570
4571 WHEN ROW_FIELDS.COLUMN_NAME = 'FLGCUSTDELIV' THEN
4572 SQLSTRING := SQLSTRING || VARFLGCUSTDELIV || ' as FLGCUSTDELIV,';
4573 ELSE
4574 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4575 END CASE;
4576
4577 END LOOP;
4578
4579 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4580 SQLSTRING := SQLSTRING || ' FROM t040party where codparty=''' || NODODA || '''';
4581 EXEC_SQL(SQLSTRING);
4582 ---- T041partydiv
4583 SQLSTRING := ' INSERT INTO t041partydiv(';
4584 FOR ROW_FIELDS IN CUR_FIELDS('t041partydiv') LOOP
4585 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4586 END LOOP;
4587
4588 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4589 SQLSTRING := SQLSTRING || ') SELECT ';
4590 FOR ROW_FIELDS IN CUR_FIELDS('t041partydiv') LOOP
4591
4592 CASE
4593 WHEN ROW_FIELDS.COLUMN_NAME = 'CODPARTY' THEN
4594 SQLSTRING := SQLSTRING || '''' || PREFISSO || ''' || ' ||
4595 ROW_FIELDS.COLUMN_NAME || ' as ' ||
4596 ROW_FIELDS.COLUMN_NAME || ',';
4597
4598 ELSE
4599 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4600 END CASE;
4601
4602 END LOOP;
4603
4604 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4605 SQLSTRING := SQLSTRING || ' FROM t041partydiv where codparty=''' ||
4606 NODODA || '''';
4607 EXEC_SQL(SQLSTRING);
4608 ---- T042partyaddr
4609 SQLSTRING := ' INSERT INTO T042partyaddr(';
4610 FOR ROW_FIELDS IN CUR_FIELDS('T042partyaddr') LOOP
4611 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4612 END LOOP;
4613
4614 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4615 SQLSTRING := SQLSTRING || ') SELECT ';
4616 FOR ROW_FIELDS IN CUR_FIELDS('T042partyaddr') LOOP
4617
4618 CASE
4619 WHEN ROW_FIELDS.COLUMN_NAME = 'CODPARTY' THEN
4620 SQLSTRING := SQLSTRING || '''' || PREFISSO || ''' || ' ||
4621 ROW_FIELDS.COLUMN_NAME || ' as ' ||
4622 ROW_FIELDS.COLUMN_NAME || ',';
4623
4624 ELSE
4625 SQLSTRING := SQLSTRING || ROW_FIELDS.COLUMN_NAME || ',';
4626 END CASE;
4627
4628 END LOOP;
4629
4630 SQLSTRING := SUBSTR(SQLSTRING, 1, LENGTH(SQLSTRING) - 1); --tolgo la virgola
4631 SQLSTRING := SQLSTRING || ' FROM T042partyaddr where codparty=''' ||
4632 NODODA || '''';
4633 EXEC_SQL(SQLSTRING);
4634 COMMIT;
4635 EXCEPTION
4636 WHEN OTHERS THEN
4637 ROLLBACK;
4638 LOG_SCRIPT('ERRORE CREAZIONE NODO ' || PREFISSO || ' ' || NODODA,
4639 'ERRORE CREA NODO');
4640
4641 END;
4642 /*****************************************************************************
4643 Procedura chiamata dopo il processo ADDRESS in direzione input
4644 vedi tabella TB_INT_POSTPROCESS
4645 Custom per Rovagnati, non generalizzabile.
4646 Deve chiamarsi POST_ADDRESS in quanto questo nome procedura e scritto nella
4647 TB_INT_POSTPROCESSI e viene chiamata in automatico alla fine dell'importazione
4648 ******************************************************************************/
4649 PROCEDURE POST_ADDRESS(TIPOENV VARCHAR2 := '', VARUKID INT := 0) IS
4650 --- nuovi cf o cf dm di gdo. in codvatcert(pa8) c'e null
4651 CURSOR CUR_NEW_CF_CF_DM_GD IS
4652 SELECT T.*
4653 FROM XIN_zT040PARTY T
4654 WHERE T.CODPARTY NOT IN
4655 (SELECT TB0042.CODnode FROM TB0042RELATIONS_STATIC TB0042 where tb0042.coddiv = '001' and
4656 tb0042.coddim = 'CUST' and
4657 tb0042.codhier = 'COMM')
4658 AND T.FLGCUSTINV = -1
4659 AND (UPPER(TRIM(T.CODCAT3)) = 'GDO' OR
4660 UPPER(TRIM(T.CODCAT3)) = 'EST')
4661 --and (trim(codvatcert) is null or trim(codvatcert)=0)
4662 ;
4663
4664 --- nuovi cf o cf dm di ntr. in codvatcert(pa8) il sottogruppo.
4665 CURSOR CUR_NEW_CF_CF_DM_NT IS
4666 SELECT T.*
4667 FROM XIN_zT040PARTY T
4668 WHERE T.CODPARTY NOT IN
4669 (SELECT TB0042.CODnode FROM TB0042RELATIONS_STATIC TB0042 where tb0042.coddiv = '001' and
4670 tb0042.coddim = 'CUST' and
4671 tb0042.codhier = 'COMM')
4672 AND T.FLGCUSTINV = -1
4673 AND UPPER(TRIM(T.CODCAT3)) = 'NTR'
4674 AND EXISTS (SELECT *
4675 FROM TB0042RELATIONS_STATIC TB0042
4676 WHERE TB0042.CODnode = 'SG' || T.CODVATCERT);
4677
4678 --- nuovi cf o cf dm di GD con SUBENTRO in codcustxtel (axan83) il subentrante
4679 /*CURSOR CUR_SUB_CF_CF_DM_GD IS
4680 SELECT T.*
4681 FROM XIN_T040PARTY T
4682 WHERE \* anche i nodi gia presenti in gerarchia posso subentrare ad altri
4683 T.CODPARTY NOT IN
4684 (SELECT T053.CODSON FROM T053PARTYRELATION T053)
4685 AND*\
4686 T.FLGCUSTINV = -1
4687 AND (UPPER(TRIM(T.CODCAT3)) = 'GDO' OR UPPER(TRIM(T.CODCAT3)) = 'EST')
4688 AND EXISTS (SELECT *
4689 FROM T053PARTYRELATION T053
4690 WHERE T053.CODSON = T.CODCUSTXTEL)
4691 AND T.CODPARTY <> T.CODCUSTXTEL;
4692 */
4693-- REC_FOR_CHECK_T053 T053PARTYRELATION%ROWTYPE;
4694-- REC_FOR_INS_T053 T053PARTYRELATION%ROWTYPE;
4695 --
4696 VL_INSERISCI_NUOVO BOOLEAN := FALSE;
4697 --
4698 VL_DATA DATE := SYSDATE;
4699 --
4700
4701 --- nuovi dm. in codvatcert (axpa8) ho il codice del CF corrispondente(anche in codcustinv)
4702 CURSOR CUR_NEW_DM IS
4703 SELECT T.*
4704 FROM XIN_zT040PARTY T
4705 WHERE T.CODPARTY NOT IN
4706 (SELECT TB0042.CODnode FROM TB0042RELATIONS_STATIC TB0042 where tb0042.coddiv = '001' and
4707 tb0042.coddim = 'CUST' and
4708 tb0042.codhier = 'COMM')
4709 AND T.FLGCUSTINV = 0
4710 AND T.FLGCUSTDELIV = -1
4711 -- ER 26/02 : se il campo pa8 (corrispondente al codvatcert)
4712 -- e 0 non devo inserire la DM in gerarchia
4713 AND NVL(T.CODVATCERT, '0') <> '0'
4714 --- and exists (select * from t053partyrelation t053 where t053.codson=t.codvatcert)
4715 ;
4716
4717 ---nuovi nodi, in codcat5 il tipo (sic)
4718 CURSOR CUR_NEW_NODI IS
4719 SELECT T.*
4720 FROM XIN_zT040PARTY T
4721 WHERE T.CODPARTY NOT IN
4722 (SELECT TB0042.CODnode FROM TB0042RELATIONS_STATIC TB0042 where tb0042.coddiv = '001' and
4723 tb0042.coddim = 'CUST' and
4724 tb0042.codhier = 'COMM')
4725 AND T.FLGCUSTINV = 0
4726 AND T.FLGCUSTDELIV = 0
4727 AND T.CODCAT5 IN ('SG', 'CT', 'AS', 'GR', 'CN', 'CG');
4728
4729 VARDTESTART DATE;
4730 VARDTEEND DATE;
4731 CODSUP VARCHAR2(255);
4732 LEVSUP NUMBER;
4733 LEVNODE NUMBER;
4734 CGNEW VARCHAR2(255) := 'CG211'; --- CAPO GRUPPO CLIENTI NUOVI
4735 GRNEW VARCHAR2(255) := 'GR212'; --- GRUPPO CLIENTI NUOVI
4736 SGNEW VARCHAR2(255) := 'SG213'; --- SOTTOGRUPPO CLIENTI NUOVI
4737 CTNEW VARCHAR2(255) := 'CT8614'; --- CLIENTI TOTALI NUOV
4738 ASNEW VARCHAR2(255) := 'ASNEW'; --- ASSOCIAZIONI NUOV
4739 CNNEW VARCHAR2(255) := 'CNNEW'; --- CN NUOV
4740
4741 BEGIN
4742 VARDTESTART := TO_DATE('20000101', 'YYYYMMDD');
4743 VARDTEEND := TO_DATE('20991231', 'YYYYMMDD');
4744 ---- aggiornamento di codmoddel per i clienti GDO DM+CF
4745 UPDATE T041PARTYDIV T
4746 SET T.CODMODDEL = (SELECT T2.CODMODDEL
4747 FROM T041PARTYDIV T2
4748 WHERE T2.CODPARTY =
4749 (SELECT T040.CODCUSTINV
4750 FROM T040PARTY T040
4751 WHERE T040.CODPARTY = T.CODPARTY))
4752 WHERE T.CODMODDEL IS NULL
4753 AND T.CODPARTY IN (SELECT CODPARTY
4754 FROM T040PARTY T040
4755 WHERE T040.FLGCUSTDELIV = -1
4756 AND T040.FLGCUSTINV = -1
4757 AND TRIM(T040.CODCAT2) = 'GDO');
4758 COMMIT;
4759 /***** aggiornamento codice fornitore ****************/
4760 UPDATE T041PARTYDIV T
4761 SET T.z_DESSUPPLIER1 = (SELECT T2.DESPARTY1
4762 FROM T040PARTY T2
4763 WHERE T2.CODPARTY = T.CODSUPPLIER1)
4764 WHERE EXISTS (SELECT T2.DESPARTY1
4765 FROM T040PARTY T2
4766 WHERE T2.CODPARTY = T.CODSUPPLIER1);
4767 COMMIT;
4768 /****** aggiornamento codblccause e codstatus ***************/
4769 UPDATE T041PARTYDIV T041
4770 SET T041.CODSTATUS = '0', T041.CODBLCCAUSE = NULL
4771 WHERE T041.CODPARTY IN
4772 (SELECT CODPARTY FROM T040PARTY WHERE FLGCUSTINV = -1)
4773 AND T041.z_CODSTATUSADMIN IN ('C1', 'C2', 'C3', 'C4')
4774 AND T041.CODBLCCAUSE = 'S8';
4775
4776 /* UPDATE T041PARTYDIV T
4777 SET T.DESSUPPLIER1 = NULL
4778 WHERE NOT EXISTS (SELECT T2.DESPARTY1
4779 FROM T040PARTY T2
4780 WHERE T2.CODPARTY = T.CODSUPPLIER1);*/
4781
4782 --- nuovi CF o CF+DM NT: nel loro PA8 (codvatcert) ci sara il sottogruppo (SG)
4783 FOR ROW_CUR IN CUR_NEW_CF_CF_DM_NT LOOP
4784 --- creare anagrafica , (gia fatto automaticamente dalle proc automatiche)
4785 --- creare anagrafica CC corrispondente:
4786 --- copio dal cf tutti i valori a parte, metto CC||codparty, e "spengo" i flag
4787 --- FLGCUSTINV e FLGCUSTDELIV
4788
4789 --- se CF + DM, creo anche il DM
4790 IF ROW_CUR.FLGCUSTINV = -1 AND ROW_CUR.FLGCUSTDELIV = -1 THEN
4791 BEGIN
4792 INSERT INTO TB0042RELATIONS_STATIC
4793 (CODDIV,
4794 CODDIM,
4795 CODHIER,
4796 CODNODE,
4797 IDLEVEL,
4798 IDPARENTLEVEL,
4799 DTESTART,
4800 DTEEND,
4801 CODPARENTNODE,
4802 CODLEVEL,
4803 CODLEVELPARENT,
4804 DTEMOD,
4805 CODUSRMOD,
4806 DTECRE)
4807 VALUES
4808 ('001',
4809 'CUST',
4810 'COMM',
4811 ROW_CUR.CODPARTY,
4812 -1,
4813 0,
4814 ROW_CUR.DTECRE,
4815 VARDTEEND,
4816 ROW_CUR.CODPARTY,
4817 '-1',
4818 '0',
4819 xSYSDATE,
4820 null,
4821 xSYSDATE);
4822
4823 INSERT INTO TB0042RELATIONS_WORK
4824 (CODDIV,
4825 CODHIER,
4826 CODNODE,
4827 IDLEVEL,
4828 IDPARENTLEVEL,
4829 DTESTART,
4830 DTEEND,
4831 CODPARENTNODE,
4832 CODLEVEL,
4833 CODLEVELPARENT,
4834 DTEMOD,
4835 CODUSRMOD)
4836 VALUES
4837 ('001',
4838 'COMM',
4839 ROW_CUR.CODPARTY,
4840 -1,
4841 0,
4842 ROW_CUR.DTECRE,
4843 VARDTEEND,
4844 ROW_CUR.CODPARTY,
4845 '-1',
4846 '0',
4847 xSYSDATE,
4848 null);
4849
4850 EXCEPTION
4851 WHEN OTHERS THEN
4852 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
4853 SQLERRM,
4854 'NON-BLOCC ERR POSTADDRESS');
4855
4856 END;
4857
4858 END IF;
4859
4860 CREA_NODO_DA('CC', ROW_CUR.CODPARTY, 0, 0);
4861 --- creare anagrafica CT corrispondente,
4862 CREA_NODO_DA('CT', ROW_CUR.CODPARTY, 0, 0);
4863 ---creare T053 con legami CF-CC
4864 BEGIN
4865 INSERT INTO TB0042RELATIONS_STATIC
4866 (CODDIV,
4867 CODDIM,
4868 CODHIER,
4869 CODNODE,
4870 IDLEVEL,
4871 IDPARENTLEVEL,
4872 DTESTART,
4873 DTEEND,
4874 CODPARENTNODE,
4875 CODLEVEL,
4876 CODLEVELPARENT,
4877 DTEMOD,
4878 CODUSRMOD,
4879 DTECRE)
4880 VALUES
4881 ('001',
4882 'CUST',
4883 'COMM',
4884 ROW_CUR.CODPARTY,
4885 0,
4886 1,
4887 ROW_CUR.DTECRE,
4888 VARDTEEND,
4889 'CC' || ROW_CUR.CODPARTY,
4890 '0',
4891 '1',
4892 xSYSDATE,
4893 null,
4894 xSYSDATE);
4895
4896 INSERT INTO TB0042RELATIONS_WORK
4897 (CODDIV,
4898 CODHIER,
4899 CODNODE,
4900 IDLEVEL,
4901 IDPARENTLEVEL,
4902 DTESTART,
4903 DTEEND,
4904 CODPARENTNODE,
4905 CODLEVEL,
4906 CODLEVELPARENT,
4907 DTEMOD,
4908 CODUSRMOD)
4909 VALUES
4910 ('001',
4911 'COMM',
4912 ROW_CUR.CODPARTY,
4913 0,
4914 1,
4915 ROW_CUR.DTECRE,
4916 VARDTEEND,
4917 'CC' || ROW_CUR.CODPARTY,
4918 '0',
4919 '1',
4920 xSYSDATE,
4921 null);
4922
4923 EXCEPTION
4924 WHEN OTHERS THEN
4925 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
4926 SQLERRM,
4927 'NON-BLOCC ERR POSTADDRESS');
4928
4929 END;
4930
4931 ---creare T053 con legami CC-CT
4932 BEGIN
4933 INSERT INTO TB0042RELATIONS_STATIC
4934 (CODDIV,
4935 CODDIM,
4936 CODHIER,
4937 CODNODE,
4938 IDLEVEL,
4939 IDPARENTLEVEL,
4940 DTESTART,
4941 DTEEND,
4942 CODPARENTNODE,
4943 CODLEVEL,
4944 CODLEVELPARENT,
4945 DTEMOD,
4946 CODUSRMOD,
4947 DTECRE)
4948 VALUES
4949 ('001',
4950 'CUST',
4951 'COMM',
4952 'CC' || ROW_CUR.CODPARTY,
4953 1,
4954 2,
4955 ROW_CUR.DTECRE,
4956 VARDTEEND,
4957 'CT' || ROW_CUR.CODPARTY,
4958 '1',
4959 '2',
4960 xSYSDATE,
4961 null,
4962 xSYSDATE);
4963
4964 INSERT INTO TB0042RELATIONS_WORK
4965 (CODDIV,
4966 CODHIER,
4967 CODNODE,
4968 IDLEVEL,
4969 IDPARENTLEVEL,
4970 DTESTART,
4971 DTEEND,
4972 CODPARENTNODE,
4973 CODLEVEL,
4974 CODLEVELPARENT,
4975 DTEMOD,
4976 CODUSRMOD)
4977 VALUES
4978 ('001',
4979 'COMM',
4980 'CC' || ROW_CUR.CODPARTY,
4981 1,
4982 2,
4983 ROW_CUR.DTECRE,
4984 VARDTEEND,
4985 'CT' || ROW_CUR.CODPARTY,
4986 '1',
4987 '2',
4988 xSYSDATE,
4989 null);
4990
4991 EXCEPTION
4992 WHEN OTHERS THEN
4993 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
4994 SQLERRM,
4995 'NON-BLOCC ERR POSTADDRESS');
4996
4997 END;
4998 ---creare T053 con legami CT-SG. SG e in codvatcert, messo dall'importazione (da AXPA8)
4999 BEGIN
5000 INSERT INTO TB0042RELATIONS_STATIC
5001 (CODDIV,
5002 CODDIM,
5003 CODHIER,
5004 CODNODE,
5005 IDLEVEL,
5006 IDPARENTLEVEL,
5007 DTESTART,
5008 DTEEND,
5009 CODPARENTNODE,
5010 CODLEVEL,
5011 CODLEVELPARENT,
5012 DTEMOD,
5013 CODUSRMOD,
5014 DTECRE)
5015 VALUES
5016 ('001',
5017 'CUST',
5018 'COMM',
5019 'CT'||ROW_CUR.CODPARTY,
5020 2,
5021 3,
5022 ROW_CUR.DTECRE,
5023 VARDTEEND,
5024 'SG' || ROW_CUR.CODVATCERT,
5025 '2',
5026 '3',
5027 xSYSDATE,
5028 null,
5029 xSYSDATE);
5030
5031 INSERT INTO TB0042RELATIONS_WORK
5032 (CODDIV,
5033 CODHIER,
5034 CODNODE,
5035 IDLEVEL,
5036 IDPARENTLEVEL,
5037 DTESTART,
5038 DTEEND,
5039 CODPARENTNODE,
5040 CODLEVEL,
5041 CODLEVELPARENT,
5042 DTEMOD,
5043 CODUSRMOD)
5044 VALUES
5045 ('001',
5046 'COMM',
5047 'CT'||ROW_CUR.CODPARTY,
5048 2,
5049 3,
5050 ROW_CUR.DTECRE,
5051 VARDTEEND,
5052 'SG' || ROW_CUR.CODVATCERT,
5053 '2',
5054 '3',
5055 xSYSDATE,
5056 null);
5057
5058 EXCEPTION
5059 WHEN OTHERS THEN
5060 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
5061 SQLERRM,
5062 'NON-BLOCC ERR POSTADDRESS');
5063
5064 END;
5065 END LOOP;
5066
5067 -- nuovi CF o CF+DM GD : nel loro PA8 ci sara null e campo AN83 uguale a se stesso (AN8) (nuovi in assoluto),
5068 -- creare anagrafica , creare anagrafica CC corrispondente, creare anagrafica CT corrispondente, creare T053 con legame CF-CC CC-CTNEW
5069 FOR ROW_CUR IN CUR_NEW_CF_CF_DM_GD LOOP
5070 --- creare anagrafica , (gia fatto automaticamente dalle proc automatiche)
5071 --- creare anagrafica CC corrispondente:
5072 --- copio dal cf tutti i valori a parte, metto CC||codparty, e "spengo" i flag
5073 --- FLGCUSTINV e FLGCUSTDELIV
5074 CREA_NODO_DA('CC', ROW_CUR.CODPARTY, 0, 0);
5075 --- creare anagrafica CT corrispondente,
5076 -- CREA_NODO_DA('CT',ROW_CUR.CODPARTY,0,0);
5077 ---creare T053 con legami CF-CC
5078 BEGIN
5079 INSERT INTO TB0042RELATIONS_STATIC
5080 (CODDIV,
5081 CODDIM,
5082 CODHIER,
5083 CODNODE,
5084 IDLEVEL,
5085 IDPARENTLEVEL,
5086 DTESTART,
5087 DTEEND,
5088 CODPARENTNODE,
5089 CODLEVEL,
5090 CODLEVELPARENT,
5091 DTEMOD,
5092 CODUSRMOD,
5093 DTECRE)
5094 VALUES
5095 ('001',
5096 'CUST',
5097 'COMM',
5098 ROW_CUR.CODPARTY,
5099 1,
5100 0,
5101 ROW_CUR.DTECRE,
5102 VARDTEEND,
5103 'CC' || ROW_CUR.CODPARTY,
5104 '1',
5105 '0',
5106 xSYSDATE,
5107 null,
5108 xSYSDATE);
5109
5110 INSERT INTO Tb0042relations_Work
5111 (CODDIV,
5112 CODHIER,
5113 CODNODE,
5114 IDLEVEL,
5115 IDPARENTLEVEL,
5116 DTESTART,
5117 DTEEND,
5118 CODPARENTNODE,
5119 CODLEVEL,
5120 CODLEVELPARENT,
5121 DTEMOD,
5122 CODUSRMOD)
5123 VALUES
5124 ('001',
5125 'COMM',
5126 ROW_CUR.CODPARTY,
5127 1,
5128 0,
5129 ROW_CUR.DTECRE,
5130 VARDTEEND,
5131 'CC' || ROW_CUR.CODPARTY,
5132 '1',
5133 '0',
5134 xSYSDATE,
5135 null);
5136
5137 EXCEPTION
5138 WHEN OTHERS THEN
5139 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
5140 SQLERRM,
5141 'NON-BLOCC ERR POSTADDRESS');
5142
5143 END;
5144 ---creare T053 con legami CC-CT
5145 BEGIN
5146 INSERT INTO TB0042RELATIONS_STATIC
5147 (CODDIV,
5148 CODDIM,
5149 CODHIER,
5150 CODNODE,
5151 IDLEVEL,
5152 IDPARENTLEVEL,
5153 DTESTART,
5154 DTEEND,
5155 CODPARENTNODE,
5156 CODLEVEL,
5157 CODLEVELPARENT,
5158 DTEMOD,
5159 CODUSRMOD,
5160 DTECRE)
5161 VALUES
5162 ('001',
5163 'CUST',
5164 'COMM',
5165 'CC' || ROW_CUR.CODPARTY,
5166 1,
5167 2,
5168 ROW_CUR.DTECRE,
5169 VARDTEEND,
5170 CTNEW,
5171 '1',
5172 '2',
5173 xSYSDATE,
5174 null,
5175 xSYSDATE);
5176
5177 INSERT INTO TB0042RELATIONS_WORK
5178 (CODDIV,
5179 CODHIER,
5180 CODNODE,
5181 IDLEVEL,
5182 IDPARENTLEVEL,
5183 DTESTART,
5184 DTEEND,
5185 CODPARENTNODE,
5186 CODLEVEL,
5187 CODLEVELPARENT,
5188 DTEMOD,
5189 CODUSRMOD)
5190 VALUES
5191 ('001',
5192 'COMM',
5193 'CC' || ROW_CUR.CODPARTY,
5194 1,
5195 2,
5196 ROW_CUR.DTECRE,
5197 VARDTEEND,
5198 CTNEW,
5199 '1',
5200 '2',
5201 xSYSDATE,
5202 null);
5203
5204
5205 EXCEPTION
5206 WHEN OTHERS THEN
5207 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
5208 SQLERRM,
5209 'NON-BLOCC ERR POSTADDRESS');
5210
5211 END;
5212
5213 ---creare T053 con legami CT-SG. SG e in codvatcert, messo dall'importazione (da AXPA8)
5214 /* BEGIN
5215
5216 END; */
5217 END LOOP;
5218
5219 --- nuove DM: creare anagrafica e scrivere T053 con legame DM-CF
5220
5221 FOR ROW_CUR IN CUR_NEW_DM LOOP
5222 ---creare T053 con legami CF-CC del codice in codvatcert (axpa8)
5223 BEGIN
5224 INSERT INTO TB0042RELATIONS_STATIC
5225 (CODDIV,
5226 CODDIM,
5227 CODHIER,
5228 CODNODE,
5229 IDLEVEL,
5230 IDPARENTLEVEL,
5231 DTESTART,
5232 DTEEND,
5233 CODPARENTNODE,
5234 CODLEVEL,
5235 CODLEVELPARENT,
5236 DTEMOD,
5237 CODUSRMOD,
5238 DTECRE)
5239 VALUES
5240 ('001',
5241 'CUST',
5242 'COMM',
5243 ROW_CUR.CODPARTY,
5244 -1,
5245 0,
5246 ROW_CUR.DTECRE,
5247 VARDTEEND,
5248 ROW_CUR.CODVATCERT,
5249 '-1',
5250 '0',
5251 xSYSDATE,
5252 null,
5253 xSYSDATE);
5254
5255 INSERT INTO TB0042RELATIONS_WORK
5256 (CODDIV,
5257 CODHIER,
5258 CODNODE,
5259 IDLEVEL,
5260 IDPARENTLEVEL,
5261 DTESTART,
5262 DTEEND,
5263 CODPARENTNODE,
5264 CODLEVEL,
5265 CODLEVELPARENT,
5266 DTEMOD,
5267 CODUSRMOD)
5268 VALUES
5269 ('001',
5270 'COMM',
5271 ROW_CUR.CODPARTY,
5272 -1,
5273 0,
5274 ROW_CUR.DTECRE,
5275 VARDTEEND,
5276 ROW_CUR.CODVATCERT,
5277 '-1',
5278 '0',
5279 xSYSDATE,
5280 null);
5281
5282
5283 EXCEPTION
5284 WHEN OTHERS THEN
5285 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
5286 SQLERRM,
5287 'NON-BLOCC ERR POSTADDRESS');
5288
5289 END;
5290 END LOOP;
5291
5292 --- nuovi nodi: in funzione della tipologia (campo SIC-->codcat5) creare anagrafica con il prefisso giusto e creare T053 con legame XX-XXNEW(livello superiore); es. arriva 199 con SIC = GR:V00001 creare anagrafica GR199 e legame fra GR199 e ASNEW
5293 FOR ROW_CUR IN CUR_NEW_NODI LOOP
5294 ---creare T053 con legami CF-CC del codice in in codpartynext (axan83)
5295 --CREA_NODO_DA(ROW_CUR.codcat5,ROW_CUR.CODPARTY,0,0);
5296 EXEC_SQL('ALTER TRIGGER TU_T040PARTY DISABLE',
5297 'TU_T040PARTY DISABLE');
5298 EXEC_SQL('ALTER TRIGGER TU_T041PARTYDIV DISABLE',
5299 'TU_T041PARTYDIV DISABLE');
5300 EXEC_SQL('ALTER TRIGGER TU_T042PARTYADDR DISABLE',
5301 'TU_T042PARTYADDR DISABLE');
5302 /*
5303 BEGIN
5304 UPDATE t040party t set t.codparty= ROW_CUR.codcat5 || t.codparty WHERE
5305 t.codparty=ROW_CUR.CODPARTY ;
5306
5307 EXCEPTION WHEN OTHERS THEN
5308 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' || SQLERRM,'NON-BLOCC ERR POSTADDRESS');
5309
5310 END;
5311 BEGIN
5312 UPDATE t041partydiv t set t.codparty= ROW_CUR.codcat5 || t.codparty WHERE
5313 t.codparty=ROW_CUR.CODPARTY ;
5314
5315 EXCEPTION WHEN OTHERS THEN
5316 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' || SQLERRM,'NON-BLOCC ERR POSTADDRESS');
5317
5318 END;
5319 BEGIN
5320 UPDATE t042partyaddr t set t.codparty= ROW_CUR.codcat5 || t.codparty WHERE
5321 t.codparty=ROW_CUR.CODPARTY;
5322
5323 EXCEPTION WHEN OTHERS THEN
5324 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' || SQLERRM,'NON-BLOCC ERR POSTADDRESS');
5325
5326 END; */
5327 CASE
5328 WHEN ROW_CUR.CODCAT5 = 'CC' THEN
5329 CODSUP := CTNEW;
5330 LEVNODE := 1;
5331 LEVSUP := 2;
5332
5333 WHEN ROW_CUR.CODCAT5 = 'CT' THEN
5334 CODSUP := SGNEW;
5335 LEVNODE := 2;
5336 LEVSUP := 3;
5337
5338 WHEN ROW_CUR.CODCAT5 = 'SG' THEN
5339 CODSUP := GRNEW;
5340 LEVNODE := 3;
5341 LEVSUP := 4;
5342 WHEN ROW_CUR.CODCAT5 = 'GR' THEN
5343 CODSUP := ASNEW;
5344 LEVNODE := 4;
5345 LEVSUP := 5;
5346 WHEN ROW_CUR.CODCAT5 = 'AS' THEN
5347 CODSUP := CGNEW;
5348 LEVNODE := 5;
5349 LEVSUP := 6;
5350 WHEN ROW_CUR.CODCAT5 = 'CG' THEN
5351 CODSUP := CNNEW;
5352 LEVNODE := 6;
5353 LEVSUP := 7;
5354 END CASE;
5355 BEGIN
5356 INSERT INTO TB0042RELATIONS_STATIC
5357 (CODDIV,
5358 CODDIM,
5359 CODHIER,
5360 CODNODE,
5361 IDLEVEL,
5362 IDPARENTLEVEL,
5363 DTESTART,
5364 DTEEND,
5365 CODPARENTNODE,
5366 CODLEVEL,
5367 CODLEVELPARENT,
5368 DTEMOD,
5369 CODUSRMOD,
5370 DTECRE)
5371 VALUES
5372 ('001',
5373 'CUST',
5374 'COMM',
5375 ROW_CUR.CODPARTY,
5376 LEVNODE,
5377 LEVSUP,
5378 ROW_CUR.DTECRE,
5379 VARDTEEND,
5380 CODSUP,
5381 LEVNODE,
5382 LEVSUP,
5383 xSYSDATE,
5384 null,
5385 xSYSDATE);
5386
5387 INSERT INTO TB0042RELATIONS_WORK
5388 (CODDIV,
5389 CODHIER,
5390 CODNODE,
5391 IDLEVEL,
5392 IDPARENTLEVEL,
5393 DTESTART,
5394 DTEEND,
5395 CODPARENTNODE,
5396 CODLEVEL,
5397 CODLEVELPARENT,
5398 DTEMOD,
5399 CODUSRMOD)
5400 VALUES
5401 ('001',
5402 'COMM',
5403 ROW_CUR.CODPARTY,
5404 LEVNODE,
5405 LEVSUP,
5406 ROW_CUR.DTECRE,
5407 VARDTEEND,
5408 CODSUP,
5409 LEVNODE,
5410 LEVSUP,
5411 xSYSDATE,
5412 null);
5413
5414
5415 EXCEPTION
5416 WHEN OTHERS THEN
5417 LOG_SCRIPT('ERRORE POST_ADDRESS ' || ROW_CUR.CODPARTY || ' ' ||
5418 SQLERRM,
5419 'NON-BLOCC ERR POSTADDRESS');
5420
5421 END;
5422
5423 EXEC_SQL('ALTER TRIGGER TU_T040PARTY ENABLE', 'TU_T040PARTY ENABLE');
5424 EXEC_SQL('ALTER TRIGGER TU_T041PARTYDIV ENABLE',
5425 'TU_T041PARTYDIV ENABLE');
5426 EXEC_SQL('ALTER TRIGGER TU_T042PARTYADDR ENABLE',
5427 'TU_T042PARTYADDR ENABLE');
5428
5429 END LOOP;
5430 COMMIT;
5431 END;
5432 /*******POST_ITEM*****
5433 Post processo dei prodotti
5434 Crea i prodotti fittizi
5435 *********/
5436 PROCEDURE POST_ITEM(TIPOENV VARCHAR2 := '', VARUKID INT := 0)
5437
5438 IS
5439 C_CONF_DUMMY_ARTICLES VARCHAR2(255);
5440 C_CONF_CODTAB VARCHAR2(255);
5441 C_CONF_ATTIVA VARCHAR2(255);
5442 C_UM_FAT VARCHAR2(255);
5443 C_UM_ORD VARCHAR2(255);
5444 VL_MESSAGGIO VARCHAR2(4056);
5445 PI_PROGR_PROCESSO NUMBER;
5446 VL_PROGR_DETTAGLIO_T060 NUMBER;
5447
5448 BEGIN
5449 C_CONF_DUMMY_ARTICLES := 'DUMMY_ARTICLES';
5450 C_CONF_CODTAB := 'CONF_INOUT';
5451 C_CONF_ATTIVA := '0';
5452 C_UM_FAT := 'KG';
5453 C_UM_ORD := 'PZ';
5454 PI_PROGR_PROCESSO := pkg_utils.log_start('USE',
5455 'LOCAL',
5456 'POST_ITEM');
5457 VL_PROGR_DETTAGLIO_T060 := pkg_utils.log_new_detail(PI_PROGR_PROCESSO,
5458 'DET',
5459 'inizio POSTRPOCESSO ARTICOLI',
5460 0);
5461 -- FITTIZI
5462 VL_MESSAGGIO := 'fittizi per rovagnati';
5463 DELETE T074LISTDETT T074
5464 WHERE EXISTS (SELECT NULL
5465 FROM T060ARTICLE T060
5466 WHERE T060.CODART = T074.CODART
5467 ---- AND T060.CODDIV = T074.CODDIV
5468 AND T060.FLGARTFITTIZIO = -1);
5469
5470 DELETE T062UMCONV T062
5471 WHERE EXISTS (SELECT NULL
5472 FROM T060ARTICLE T060
5473 WHERE T060.CODART = T062.CODART
5474 AND T060.CODDIV = T062.CODDIV
5475 AND T060.FLGARTFITTIZIO = -1);
5476 -- RC 20091029 eliminazione dei fattori di conversione calcolati cancellando tutti quelli non presenti nella xin_t062 (provenienza JDE)
5477 DELETE T062UMCONV T062
5478 WHERE NOT EXISTS (SELECT NULL
5479 FROM XIN_zT062UMCONV XIN_T062
5480 WHERE XIN_T062.CODART = T062.CODART
5481 AND XIN_T062.CODDIV = T062.CODDIV
5482 AND XIN_T062.UMFROM = T062.UMFROM
5483 AND XIN_T062.UMTO = T062.UMTO);
5484
5485 DELETE T060ARTICLE WHERE FLGARTFITTIZIO = -1;
5486
5487 INSERT INTO T060ARTICLE
5488 (CODART,
5489 CODSAL1,
5490 CODDIV,
5491 DESART,
5492 DESART2,
5493 CODBRAND,
5494 CODLINMER,
5495 CODFRMT,
5496 CODCATMER,
5497 CODFAMMER,
5498 UMINV1,
5499 UMORD1,
5500 CODSTATUS,
5501 FLGANN,
5502 Z_FLGFITTIZIO,
5503 FLGARTFITTIZIO,
5504 CODARTSOURCE,
5505 DOCUMENTKEY)
5506 SELECT CODART,
5507 CODSAL1,
5508 CODDIV,
5509 DESART,
5510 DESART2,
5511 CODBRAND,
5512 CODLINMER,
5513 CODFRMT,
5514 CODCATMER,
5515 CODFAMMER,
5516 UMINV1,
5517 UMORD1,
5518 CODSTATUS,
5519 FLGANN,
5520 z_FLGFITTIZIO,
5521 FLGARTFITTIZIO,
5522 CODARTSOURCE,
5523 'Product|'||CODART||'|'||CODDIV
5524 FROM qZ_ART_FITTIZI_NEW;
5525
5526 ---- umconv per prodotti fittizi; prendo i valori max valconfact che trovo tra i prodotti validi
5527 --- aventi lo stesso livello gerarchico
5528 ---- stesso codfrmt
5529 INSERT INTO T062UMCONV
5530 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5531 (SELECT T060ARTICLE.CODART,
5532 T060ARTICLE.CODDIV,
5533 VFRMT.UMFROM,
5534 VFRMT.UMTO,
5535 MAX(VFRMT.VALCONVFACT),
5536 CASE
5537 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5538 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5539 ELSE
5540 NULL
5541 END AS VALCONFACTREV
5542 FROM T060ARTICLE
5543 INNER JOIN (SELECT T.*, T2.CODFRMT
5544 FROM T062UMCONV T
5545 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5546 WHERE T2.CODSTATUS = '0'
5547 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODFRMT =
5548 T060ARTICLE.CODFRMT
5549 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODFRMT'
5550 GROUP BY T060ARTICLE.CODART,
5551 T060ARTICLE.CODDIV,
5552 VFRMT.UMFROM,
5553 VFRMT.UMTO,
5554 T060ARTICLE.CODFRMT);
5555
5556 ---- stesso codcatmer
5557 INSERT INTO T062UMCONV
5558 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5559 (SELECT T060ARTICLE.CODART,
5560 T060ARTICLE.CODDIV,
5561 VFRMT.UMFROM,
5562 VFRMT.UMTO,
5563 MAX(VFRMT.VALCONVFACT),
5564 CASE
5565 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5566 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5567 ELSE
5568 NULL
5569 END AS VALCONFACTREV
5570
5571 FROM T060ARTICLE
5572 INNER JOIN (SELECT T.*, T2.CODCATMER
5573 FROM T062UMCONV T
5574 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5575 WHERE T2.CODSTATUS = '0'
5576 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODCATMER =
5577 T060ARTICLE.CODCATMER
5578 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODCATMER'
5579 GROUP BY T060ARTICLE.CODART,
5580 T060ARTICLE.CODDIV,
5581 VFRMT.UMFROM,
5582 VFRMT.UMTO,
5583 T060ARTICLE.CODCATMER);
5584
5585 ---- stesso CODFAMMER
5586 INSERT INTO T062UMCONV
5587 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5588 (SELECT T060ARTICLE.CODART,
5589 T060ARTICLE.CODDIV,
5590 VFRMT.UMFROM,
5591 VFRMT.UMTO,
5592 MAX(VFRMT.VALCONVFACT),
5593 CASE
5594 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5595 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5596 ELSE
5597 NULL
5598 END AS VALCONFACTREV
5599 FROM T060ARTICLE
5600 INNER JOIN (SELECT T.*, T2.CODFAMMER
5601 FROM T062UMCONV T
5602 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5603 WHERE T2.CODSTATUS = '0'
5604 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODFAMMER =
5605 T060ARTICLE.CODFAMMER
5606 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODFAMMER'
5607 GROUP BY T060ARTICLE.CODART,
5608 T060ARTICLE.CODDIV,
5609 VFRMT.UMFROM,
5610 VFRMT.UMTO,
5611 T060ARTICLE.CODFAMMER);
5612
5613 ---- stesso CODLINMER
5614 INSERT INTO T062UMCONV
5615 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5616 (SELECT T060ARTICLE.CODART,
5617 T060ARTICLE.CODDIV,
5618 VFRMT.UMFROM,
5619 VFRMT.UMTO,
5620 MAX(VFRMT.VALCONVFACT),
5621 CASE
5622 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5623 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5624 ELSE
5625 NULL
5626 END AS VALCONFACTREV
5627 FROM T060ARTICLE
5628 INNER JOIN (SELECT T.*, T2.CODLINMER
5629 FROM T062UMCONV T
5630 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5631 WHERE T2.CODSTATUS = '0'
5632 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODLINMER =
5633 T060ARTICLE.CODLINMER
5634 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODLINMER'
5635 GROUP BY T060ARTICLE.CODART,
5636 T060ARTICLE.CODDIV,
5637 VFRMT.UMFROM,
5638 VFRMT.UMTO,
5639 T060ARTICLE.CODLINMER);
5640
5641 ---- stesso Codbrand
5642 INSERT INTO T062UMCONV
5643 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5644 (SELECT T060ARTICLE.CODART,
5645 T060ARTICLE.CODDIV,
5646 VFRMT.UMFROM,
5647 VFRMT.UMTO,
5648 MAX(VFRMT.VALCONVFACT),
5649 CASE
5650 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5651 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5652 ELSE
5653 NULL
5654 END AS VALCONFACTREV
5655 FROM T060ARTICLE
5656 INNER JOIN (SELECT T.*, T2.CODBRAND
5657 FROM T062UMCONV T
5658 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5659 WHERE T2.CODSTATUS = '0'
5660 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODBRAND =
5661 T060ARTICLE.CODBRAND
5662 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODBRAND'
5663 GROUP BY T060ARTICLE.CODART,
5664 T060ARTICLE.CODDIV,
5665 VFRMT.UMFROM,
5666 VFRMT.UMTO,
5667 T060ARTICLE.CODBRAND);
5668
5669-- RC 15062011 aggiunta creazione t062 per articoli fittizi che non hanno
5670-- fra gli articoli elementari che rappresentano, articoli in stato 0 valido
5671-- viene fatto un secondo giro con codstatus 1 e vengono inseriti i fattori di conversione se non esistono gia
5672
5673 ---- umconv per prodotti fittizi; prendo i valori max valconfact che trovo tra i prodotti prenotabili
5674 --- aventi lo stesso livello gerarchico
5675 ---- stesso codfrmt
5676
5677 INSERT INTO T062UMCONV
5678 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5679 (SELECT T060ARTICLE.CODART,
5680 T060ARTICLE.CODDIV,
5681 VFRMT.UMFROM,
5682 VFRMT.UMTO,
5683 MAX(VFRMT.VALCONVFACT),
5684 CASE
5685 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5686 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5687 ELSE
5688 NULL
5689 END AS VALCONFACTREV
5690 FROM T060ARTICLE
5691 INNER JOIN (SELECT T.*, T2.CODFRMT
5692 FROM T062UMCONV T
5693 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5694 WHERE T2.CODSTATUS = '1'
5695 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODFRMT =
5696 T060ARTICLE.CODFRMT
5697 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODFRMT'
5698 and not exists
5699 (select null from T062UMCONV t062 where
5700 t060article.coddiv = t062.coddiv and
5701 t060article.codart = t062.codart and
5702 VFRMT.UMFROM = t062.UMFROM and
5703 VFRMT.UMTO = t062.UMTO)
5704 GROUP BY T060ARTICLE.CODART,
5705 T060ARTICLE.CODDIV,
5706 VFRMT.UMFROM,
5707 VFRMT.UMTO,
5708 T060ARTICLE.CODFRMT);
5709
5710 ---- stesso codcatmer
5711 INSERT INTO T062UMCONV
5712 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5713 (SELECT T060ARTICLE.CODART,
5714 T060ARTICLE.CODDIV,
5715 VFRMT.UMFROM,
5716 VFRMT.UMTO,
5717 MAX(VFRMT.VALCONVFACT),
5718 CASE
5719 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5720 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5721 ELSE
5722 NULL
5723 END AS VALCONFACTREV
5724
5725 FROM T060ARTICLE
5726 INNER JOIN (SELECT T.*, T2.CODCATMER
5727 FROM T062UMCONV T
5728 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5729 WHERE T2.CODSTATUS = '1'
5730 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODCATMER =
5731 T060ARTICLE.CODCATMER
5732 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODCATMER'
5733 and not exists
5734 (select null from T062UMCONV t062 where
5735 t060article.coddiv = t062.coddiv and
5736 t060article.codart = t062.codart and
5737 VFRMT.UMFROM = t062.UMFROM and
5738 VFRMT.UMTO = t062.UMTO)
5739 GROUP BY T060ARTICLE.CODART,
5740 T060ARTICLE.CODDIV,
5741 VFRMT.UMFROM,
5742 VFRMT.UMTO,
5743 T060ARTICLE.CODCATMER);
5744
5745 ---- stesso CODFAMMER
5746 INSERT INTO T062UMCONV
5747 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5748 (SELECT T060ARTICLE.CODART,
5749 T060ARTICLE.CODDIV,
5750 VFRMT.UMFROM,
5751 VFRMT.UMTO,
5752 MAX(VFRMT.VALCONVFACT),
5753 CASE
5754 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5755 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5756 ELSE
5757 NULL
5758 END AS VALCONFACTREV
5759 FROM T060ARTICLE
5760 INNER JOIN (SELECT T.*, T2.CODFAMMER
5761 FROM T062UMCONV T
5762 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5763 WHERE T2.CODSTATUS = '1'
5764 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODFAMMER =
5765 T060ARTICLE.CODFAMMER
5766 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODFAMMER'
5767 and not exists
5768 (select null from T062UMCONV t062 where
5769 t060article.coddiv = t062.coddiv and
5770 t060article.codart = t062.codart and
5771 VFRMT.UMFROM = t062.UMFROM and
5772 VFRMT.UMTO = t062.UMTO)
5773 GROUP BY T060ARTICLE.CODART,
5774 T060ARTICLE.CODDIV,
5775 VFRMT.UMFROM,
5776 VFRMT.UMTO,
5777 T060ARTICLE.CODFAMMER);
5778
5779 ---- stesso CODLINMER
5780 INSERT INTO T062UMCONV
5781 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5782 (SELECT T060ARTICLE.CODART,
5783 T060ARTICLE.CODDIV,
5784 VFRMT.UMFROM,
5785 VFRMT.UMTO,
5786 MAX(VFRMT.VALCONVFACT),
5787 CASE
5788 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5789 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5790 ELSE
5791 NULL
5792 END AS VALCONFACTREV
5793 FROM T060ARTICLE
5794 INNER JOIN (SELECT T.*, T2.CODLINMER
5795 FROM T062UMCONV T
5796 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5797 WHERE T2.CODSTATUS = '1'
5798 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODLINMER =
5799 T060ARTICLE.CODLINMER
5800 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODLINMER'
5801 and not exists
5802 (select null from T062UMCONV t062 where
5803 t060article.coddiv = t062.coddiv and
5804 t060article.codart = t062.codart and
5805 VFRMT.UMFROM = t062.UMFROM and
5806 VFRMT.UMTO = t062.UMTO)
5807 GROUP BY T060ARTICLE.CODART,
5808 T060ARTICLE.CODDIV,
5809 VFRMT.UMFROM,
5810 VFRMT.UMTO,
5811 T060ARTICLE.CODLINMER);
5812
5813 ---- stesso Codbrand
5814 INSERT INTO T062UMCONV
5815 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
5816 (SELECT T060ARTICLE.CODART,
5817 T060ARTICLE.CODDIV,
5818 VFRMT.UMFROM,
5819 VFRMT.UMTO,
5820 MAX(VFRMT.VALCONVFACT),
5821 CASE
5822 WHEN 1 / ROUND(MAX(VFRMT.VALCONVFACT), 7) < 1000000 THEN
5823 ROUND(1 / ROUND(MAX(VFRMT.VALCONVFACT), 7), 7)
5824 ELSE
5825 NULL
5826 END AS VALCONFACTREV
5827 FROM T060ARTICLE
5828 INNER JOIN (SELECT T.*, T2.CODBRAND
5829 FROM T062UMCONV T
5830 INNER JOIN T060ARTICLE T2 ON T2.CODART = T.CODART
5831 WHERE T2.CODSTATUS = '1'
5832 AND T2.FLGARTFITTIZIO = 0) VFRMT ON VFRMT.CODBRAND =
5833 T060ARTICLE.CODBRAND
5834 WHERE T060ARTICLE.FLGARTFITTIZIO = -1 AND t060article.CODARTSOURCE = 'CODBRAND'
5835 and not exists
5836 (select null from T062UMCONV t062 where
5837 t060article.coddiv = t062.coddiv and
5838 t060article.codart = t062.codart and
5839 VFRMT.UMFROM = t062.UMFROM and
5840 VFRMT.UMTO = t062.UMTO)
5841 GROUP BY T060ARTICLE.CODART,
5842 T060ARTICLE.CODDIV,
5843 VFRMT.UMFROM,
5844 VFRMT.UMTO,
5845 T060ARTICLE.CODBRAND);
5846-- END RC 15062011
5847
5848-- rc 28072016 update flg gift per le affettatrici
5849
5850 update T060ARTICLE t060 set flggift = '0' where
5851 (T060.codcatmer = 'ZG' and T060.codbrand = 'Z27' and T060.FLGARTFITTIZIO = '0');
5852-- END rc 28072016 update flg gift per le affettatrici
5853
5854 /*check per vedere se mancano le trascodifiche UMORD1--KG*/
5855 /*
5856 INSERT INTO T074LISTDETT
5857 (CODART,
5858 CODDIV,
5859 CODLIST,
5860 DTEFROMMASTER,
5861 PRZVAL,
5862 DTEFROMDETAIL,
5863 UMPRZ,
5864 DTETODETAIL,
5865 DTEMOD,
5866 FLGANN)
5867 (SELECT CODART,
5868 CODDIV,
5869 T070.CODLIST,
5870 T070.DTEFROMMASTER,
5871 0,
5872 T070.DTEFROMMASTER,
5873 C_UM_FAT,
5874 T070.DTETOMASTER,
5875 SYSDATE,
5876 0
5877 FROM T060ARTICLE
5878 CROSS JOIN T070LIST T070
5879
5880 WHERE FLGARTFITTIZIO = -1);
5881 */
5882 COMPLETA_T062(NULL, NULL, NULL);
5883 RIEMPI_GERARCHIA_FITTIZI(PI_PROGR_PROCESSO);
5884 --SP_UPD_T082_CODARTCUST(PI_PROGR_PROCESSO);
5885 SP_INS_T067(PI_PROGR_PROCESSO);
5886
5887 pkg_utils.log_end(PI_PROGR_PROCESSO, 0);
5888
5889 COMMIT;
5890
5891 EXCEPTION
5892 WHEN OTHERS THEN
5893 ROLLBACK;
5894 VL_MESSAGGIO := 'ERRORE IN INSERIMENTO FITTIZI ' ||
5895 SUBSTR(SQLERRM, 1, 1000);
5896 --
5897 pkg_utils.log_new_detail_error(PI_PROGR_PROCESSO,
5898 VL_PROGR_DETTAGLIO_T060,
5899 SUBSTR(SQLCODE, 1, 20),
5900 VL_MESSAGGIO);
5901
5902 END;
5903 /*******************************************************************
5904
5905 Post processo delle UDC
5906
5907 ********************************************************************/
5908 PROCEDURE POST_UDC(TIPOENV VARCHAR2 := '', VARUKID INT := 0) IS
5909 BEGIN
5910 ---- UMART UO, loro non ce la passano
5911 BEGIN
5912 INSERT INTO T902TABROWS
5913 (CODSYS, CODTAB, CODTABROW, DESTABROW, FLGANN)
5914 VALUES
5915 ('001', 'UMART', 'UO', 'Unita Ordine', 0);
5916
5917 EXCEPTION
5918 WHEN OTHERS THEN
5919 LOG_SCRIPT('ERRORE INSERIMENTO UMART UO',
5920 'ERRORE INSERIMENTO UMART UO');
5921
5922 END;
5923
5924 ---- FORMATTAZIONE HOUR
5925 BEGIN
5926 UPDATE T902TABROWS T
5927 SET T.DESTABROW = SUBSTR(TRIM(T.DESTABROW), 1, 2) || ':' ||
5928 SUBSTR(TRIM(T.DESTABROW), 3, 2)
5929 WHERE INSTR(T.DESTABROW, ':') <= 0
5930 AND TRIM(T.CODTAB) = 'HOUR'
5931 AND LENGTH(TRIM(T.DESTABROW)) = 4;
5932
5933 COMMIT;
5934 EXCEPTION
5935 WHEN OTHERS THEN
5936 LOG_SCRIPT('ERRORE FORMATTAZIONE UDC HOUR',
5937 'ERRORE FORMATTAZIONE UDC HOUR');
5938
5939 END;
5940
5941 END;
5942
5943 /*************************** PROCESS CYCLE AUTO ***************************************************
5944 Gestione automatica attraverso la tabella TB_INT_PROCESSI
5945 tipoEnv varchar2:='PD', 'PD'
5946 tipoProc varchar2:='ITEM','ADDRESS','UDC'
5947 varUkid int identificativo di processo Rovagnati
5948 blnBulk int 0: record per record 1: massivo
5949 blnOnlyUpdate int 0:default, modalita insert/update 1: solo update, record nuovi non inseriti,2 delete-INSERT
5950 *********************************************************************************/
5951 PROCEDURE PROCESS_CYCLE_AUTO(TIPOENV VARCHAR2 := 'PD',
5952 TIPOPROC VARCHAR2 := 'ITEM',
5953 VARUKID INT := 0,
5954 BLNBULK INT := 0,
5955 BLNONLYUPDATE INT := 0) IS
5956 CURSOR CUR_PROC IS
5957 SELECT *
5958
5959 FROM TB_INT_PROCESSI T
5960 WHERE UPPER(TRIM(T.PROCESSNAME)) = UPPER(TRIM(TIPOPROC))
5961 AND T.DIRINPUT = 1
5962 ORDER BY T.PROCORDER;
5963
5964 CURSOR CUR_POSTPROC IS
5965 SELECT *
5966 FROM TB_INT_POSTPROCESS T
5967 WHERE UPPER(TRIM(T.PROCESSNAME)) = UPPER(TRIM(TIPOPROC))
5968 AND T.DIRINPUT = 1
5969 ORDER BY T.PROCORDER;
5970
5971 INTUKID NUMBER;
5972 SQLERR VARCHAR2(2048);
5973 TYPE T_CUR IS REF CURSOR;
5974
5975 CUR_SEMAFORO T_CUR;
5976 STRCUR VARCHAR2(1024);
5977 IDLOG NUMBER;
5978 INTCOUNT INT;
5979 PREFIX VARCHAR2(255);
5980 CURSOR CUR_TABFROM(VARCODOPER VARCHAR2) IS
5981 SELECT DISTINCT TABFROM
5982 FROM TB_INT_TABFIELDS T
5983 WHERE LOWER(TRIM(T.CODOPER)) = LOWER(TRIM(VARCODOPER))
5984 AND T.TABFROM IS NOT NULL;
5985
5986 varTabXin varchar2(30);
5987 BEGIN
5988 IF NVL(VARUKID, 0) = 0 THEN
5989 STRCUR := ' select f6x0001.xtukid
5990 from f6x0001
5991 where (TRIM(UPPER(f6x0001.xtenhv))=''' || TIPOENV ||
5992 ''' AND
5993 TRIM(UPPER(f6x0001.xty6xtypr))=''' || TIPOPROC || '''
5994 and (f6x0001.xty6xprst in (''N'',''1'',''R'')) and f6x0001.xty6xptdr=''' ||
5995 OW_TO_XTEL || ''')
5996 order by f6x0001.xtukid ';
5997 ELSE
5998 STRCUR := ' select f6x0001.xtukid
5999 from f6x0001
6000 where f6x0001.xtukid = ' || VARUKID;
6001
6002 END IF;
6003
6004 OPEN CUR_SEMAFORO FOR STRCUR;
6005
6006 LOOP
6007 FETCH CUR_SEMAFORO
6008 INTO INTUKID;
6009 EXIT WHEN CUR_SEMAFORO%NOTFOUND;
6010 BEGIN
6011 IDLOG := pkg_utils.log_start('USE',
6012 'BATCH',
6013 TIPOPROC || ' UKID ' ||
6014 INTUKID);
6015
6016 SET_READING_STATE(TIPOENV, TIPOPROC, INTUKID);
6017 --- ciclo di lettura vassoi---> xin
6018 FOR ROW_PROC IN CUR_PROC LOOP
6019 ---ricaviamo la XIN dalle TABJOIN
6020 --- come vincolo la TABJOIN.TABLENAME contiene la XIN
6021 --- in tutte le righe
6022
6023 SELECT MAX(TJ.TABLENAME) INTO varTabXin
6024 FROM TB_INT_TABJOIN TJ
6025 WHERE TJ.CODOPER=ROW_PROC.CODOPER;
6026
6027 UPDATE TB_INT_TABWHEREPARAM T
6028 SET T.TABPARVALUE = INTUKID
6029 WHERE T.TABPARNAME = '@XTUKID' -- vale per tutte le tabelle
6030 AND LOWER(TRIM(T.TABLENAME)) = varTabXin;
6031
6032 COMMIT;
6033 UPDATE TB_INT_TABWHEREPARAM T
6034 SET T.TABPARVALUE = '''' || TIPOENV || ''''
6035 WHERE T.TABPARNAME = '@XTENHV' -- vale per tutte le tabelle
6036 AND LOWER(TRIM(T.TABLENAME)) = varTabXin;
6037
6038 COMMIT;
6039
6040 SELECT COUNT(*)
6041 INTO INTCOUNT
6042 FROM TB_INT_PROCESSI T
6043 WHERE UPPER(TRIM(T.PROCESSNAME)) =
6044 UPPER(TRIM(ROW_PROC.PROCESSNAME))
6045 AND UPPER(TRIM(T.TABLENAME)) = UPPER(TRIM(ROW_PROC.TABLENAME))
6046 AND T.CODOPER <> ROW_PROC.CODOPER
6047 AND ROW_PROC.PROCORDER > T.PROCORDER;
6048
6049 --- azzero la XIN solo se nello stesso processo non c'e un codoper diverso dal corrente
6050 --- che scrive sulla stessa tabella e che abbia ordine inferiore, ovvero gia eseguito.
6051 --- Esempio: xin_t045partyper
6052 IF INTCOUNT = 0 THEN
6053 EXEC_SQL('TRUNCATE TABLE ' || varTabXin,
6054 'TRUNCATE TABLE ' || varTabXin);
6055
6056 END IF;
6057
6058 COMMIT;
6059
6060 AUTOINSERT(ROW_PROC.CODOPER);
6061
6062 FOR ROW_TABFROM IN CUR_TABFROM(ROW_PROC.CODOPER) LOOP
6063 PREFIX := GET_TAB_PREFIX(ROW_TABFROM.TABFROM);
6064 UPDATE_ROW_READ(INTUKID, PREFIX, ROW_TABFROM.TABFROM, TIPOENV);
6065 END LOOP;
6066
6067 COMMIT;
6068 END LOOP;
6069
6070 --- ciclo di update xin--->sm1
6071 FOR ROW_PROC IN CUR_PROC LOOP
6072 ---ricaviamo la XIN dalle TABJOIN
6073 --- come vincolo la TABJOIN.TABLENAME contiene la XIN
6074 --- in tutte le righe
6075
6076 SELECT MAX(TJ.TABLENAME) INTO varTabXin
6077 FROM TB_INT_TABJOIN TJ
6078 WHERE TJ.CODOPER=ROW_PROC.CODOPER;
6079
6080 IF BLNBULK = 1 THEN
6081 --- in modalita bulk, vengono caricate massivamente tutti i record di ciascuna tabella,
6082 --- nell'ordine indicato nella TB_INT_PROCESSI.PROCORDER, e i controlli di integrita
6083 --- vengono fatti sulle chiavi dei parent nella clausola where
6084
6085
6086 GENERAL_IMPORT(ROW_PROC.TABLENAME,
6087 INTUKID,
6088 ROW_PROC.CODOPER,
6089 IDLOG,
6090 0,
6091 1,
6092 BLNONLYUPDATE,
6093 TIPOENV,
6094 ROW_PROC.PARENTKEY,
6095 '',
6096 ROW_PROC.PARENTTABLE,
6097 ROW_PROC.PARENTTABLEFIELD,
6098 ROW_PROC.PARENTKEY2,
6099 '',
6100 ROW_PROC.PARENTTABLEFIELD2,
6101 varTabXin
6102 );
6103 ELSE
6104 ---- in modalita non bulk, record per record, qui chiamiamo solo le tabelle PADRI poiche
6105 --- al loro interno c'e la chiamata ricorsiva a tutte le tabelle figlie!
6106 -- if trim(ROW_PROC.PARENTTABLE) is null then
6107 GENERAL_IMPORT(ROW_PROC.TABLENAME,
6108 INTUKID,
6109 ROW_PROC.CODOPER,
6110 IDLOG,
6111 0,
6112 0,
6113 BLNONLYUPDATE,
6114 TIPOENV,
6115 ROW_PROC.PARENTKEY,
6116 '',
6117 ROW_PROC.PARENTTABLE,
6118 ROW_PROC.PARENTTABLEFIELD,
6119 ROW_PROC.PARENTKEY2,
6120 '',
6121 ROW_PROC.PARENTTABLEFIELD2,
6122 varTabXin
6123 );
6124 -- end if;
6125
6126 END IF;
6127
6128 END LOOP;
6129
6130 SET_END_READING_STATE(TIPOENV, TIPOPROC, INTUKID);
6131 -- esequzione dei post processi
6132 FOR ROW_POST IN CUR_POSTPROC LOOP
6133 EXEC_SQL('BEGIN ' || ROW_POST.PROCEDURENAME || '(''' ||
6134 TRIM(TIPOENV) || ''', ' || INTUKID || ') ; END;');
6135 END LOOP;
6136
6137 pkg_utils.log_end(IDLOG, 0);
6138
6139 COMMIT;
6140 EXCEPTION
6141 WHEN OTHERS THEN
6142 ---segnaliamo nella tab processi l'errore in lettura
6143 COMMIT;
6144 SQLERR := SQLERRM;
6145 SET_ERROR_READING_STATE(TIPOENV, TIPOPROC, INTUKID, SQLERR);
6146 pkg_utils.log_end(IDLOG, -1);
6147
6148 END;
6149
6150 END LOOP;
6151
6152 CLOSE CUR_SEMAFORO;
6153 COMMIT;
6154 END;
6155 /************* PROOCESS_EXPORT_AUTO(varProcessName varchar2)************
6156 Esportazione Xtel--->OW
6157 ************************************************************************/
6158 PROCEDURE PROCESS_EXPORT_AUTO(VARPROCESSNAME VARCHAR2,
6159
6160 VARENHV VARCHAR2 := 'PD') IS
6161 STRLINK VARCHAR2(1024);
6162 DTELASTWRITE DATE;
6163 INTCOUNT INT;
6164 STRERR VARCHAR2(2048);
6165 UKID NUMBER;
6166 RECNUMB NUMBER := 0;
6167 RECTOT NUMBER := 0;
6168 VAREXPPROCEDURE VARCHAR2(255);
6169 OLD_TABFROM VARCHAR2(255) := '@';
6170 OLD_TABFROMPREFIX VARCHAR2(5);
6171 IDLOG NUMBER;
6172 INTPROCLOGDETT NUMBER;
6173 -- ER 30-09-2009 gestione lock
6174 VL_SESSION NUMBER := NULL;
6175 VL_LOCKED_TABLE VARCHAR2(200):= NULL;
6176 /* RC 20090804 modificato codoper in codoperout*/
6177 CURSOR CUR_PROC IS
6178 SELECT DISTINCT P.PROCESSNAME,
6179 P.TABFROM,
6180 P.TABFROMPREFIX,
6181 P.CODOPEROUT
6182 FROM TB_INT_PROCESSI P
6183 WHERE UPPER(TRIM(P.PROCESSNAME)) = UPPER(TRIM(VARPROCESSNAME))
6184 AND P.DIROUTPUT = 1
6185 ORDER BY P.TABFROM;
6186
6187 BEGIN
6188 --strLink:='';
6189 -- controllo se esiste almeno un processo di esportazione che io abbia gia terminato di scrivere
6190
6191 SELECT COUNT(*)
6192 INTO INTCOUNT
6193 FROM F6X0001 T
6194 WHERE TRIM(T.XTY6XTYPR) = VARPROCESSNAME
6195 AND TRIM(T.XTENHV) = VARENHV
6196 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
6197 -- ER 03/03/09 : NON dobbiamo rimandare la roba che loro non sono riusciti a leggere
6198 -- Besana dice che e un problema suo, tengo sempre l'ultima data
6199 AND T.XTY6XPRST IN ('N', 'Y', '1', 'E', 'R', 'L');
6200
6201 IF INTCOUNT > 0 THEN
6202 --- c'e gia un processo. ricavo la data
6203 DECLARE
6204 CURSOR CUR_DATE IS
6205 SELECT TO_DATE(TO_CHAR(Z_PKG_XTEL_IMPORT.GIUL_TO_GREG(T.XTY6XCRDA),
6206 'YYYYMMDD') || ' ' ||
6207
6208 LPAD(TRIM(T.XTY6XCRTI), 6, '0')
6209
6210 ,
6211 'YYYYMMDD HH24MISS')
6212 -- a questa data sottraggo 3 minuti che sono
6213 -- l'intervallo di l'errore in tempo tra macchina e DB
6214 -- la dtemod delle tabelle e , a seconda della macchina,
6215 -- circa 3 inuti indierto rispetto al db
6216 -( 3 /60 / 24 ) -- 3 min
6217 FROM F6X0001 T
6218 WHERE TRIM(T.XTY6XTYPR) = VARPROCESSNAME
6219 AND TRIM(T.XTENHV) = VARENHV
6220 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW
6221 -- ER 03/03/09 : NON dobbiamo rimandare la roba che loro non sono riusciti a leggere
6222 -- Besana dice che e un problema suo, tengo sempre l'ultima data
6223 AND T.XTY6XPRST IN ('N', 'Y', '1', 'E', 'R', 'L')
6224 ORDER BY T.XTUKID DESC;
6225
6226 BEGIN
6227 OPEN CUR_DATE;
6228 FETCH CUR_DATE
6229 INTO DTELASTWRITE;
6230 -- prendo l'ultima data soltanto
6231 CLOSE CUR_DATE;
6232 END;
6233
6234 ELSE
6235 DTELASTWRITE := DEFAULT_START_DATE;
6236
6237 END IF;
6238
6239 SELECT COUNT(*)
6240 INTO INTCOUNT
6241 FROM F6X0001 T
6242 WHERE TRIM(T.XTY6XTYPR) = VARPROCESSNAME
6243 AND TRIM(T.XTENHV) = VARENHV
6244 AND TRIM(T.XTY6XPTDR) = XTEL_TO_OW;
6245
6246 --- vedo se eventualmente ci sono degli errori. Li devo contare per id univoco..
6247
6248 SELECT SEQ_UKID.NEXTVAL INTO UKID FROM DUAL;
6249
6250 ----
6251 SELECT MAX(T.EXPPROCNAME)
6252 INTO VAREXPPROCEDURE
6253 FROM TB_INT_PROCESSI T
6254 WHERE T.PROCESSNAME = VARPROCESSNAME
6255 AND T.DIROUTPUT = 1;
6256
6257 IDLOG := pkg_utils.log_start('USE',
6258 'BATCH',
6259 'RUNNING',
6260 VARPROCESSNAME || ' EXPORT ' ||
6261 VARENHV || ' ukid ' || UKID);
6262
6263 -- se bisogna loccare qualche tabella e da fare dentro alla prepocedura
6264 -- Qui deve essere settato l'idsessionlck su una certa tabella
6265 -- queste due informazioni sono poi ritornate al ciclo principale in modo
6266 -- che se va tutto bene o accade qualcosa di stano questi lock vengano
6267 -- comunque cancellati in maniera automatica.
6268 Z_PKG_XTEL_IMPORT.EXEC_SQL(' BEGIN Z_PKG_XTEL_IMPORT.' || VAREXPPROCEDURE ||
6269 '(TO_DATE(''' ||
6270 TO_CHAR(DTELASTWRITE, 'YYYYMMDD HH24MISS') ||
6271 ''',''YYYYMMDD HH24MISS''),'||UKID||'); END;');
6272
6273 FOR ROW_CUR IN CUR_PROC LOOP
6274 --- nella tabella dei campi impostiamo il valore del
6275 --- cakpo ukid
6276 UPDATE TB_INT_TABFIELDS T
6277 SET T.FIELDFROM = UKID
6278 WHERE LOWER(TRIM(T.TABLENAME)) = LOWER(TRIM(ROW_CUR.TABFROM))
6279 AND LOWER(TRIM(T.FIELDNAME)) =
6280 LOWER(TRIM(ROW_CUR.TABFROMPREFIX)) || 'ukid';
6281
6282 COMMIT;
6283 UPDATE TB_INT_TABFIELDS T
6284 SET T.FIELDFROM = '''' || VARENHV || ''''
6285 WHERE LOWER(TRIM(T.TABLENAME)) = LOWER(TRIM(ROW_CUR.TABFROM))
6286 AND LOWER(TRIM(T.FIELDNAME)) =
6287 LOWER(TRIM(ROW_CUR.TABFROMPREFIX)) || 'enhv';
6288
6289 COMMIT;
6290 END LOOP;
6291
6292 RECTOT := 0;
6293 BEGIN
6294
6295 SET_WRITING_STATE(VARENHV, VARPROCESSNAME, UKID);
6296 FOR ROW_CUR IN CUR_PROC LOOP
6297
6298 IF (OLD_TABFROM = '@') THEN
6299 OLD_TABFROM := ROW_CUR.TABFROM;
6300 OLD_TABFROMPREFIX := ROW_CUR.TABFROMPREFIX;
6301 END IF;
6302
6303 INTPROCLOGDETT := pkg_utils.log_new_detail(IDLOG,
6304 SUBSTR(VARPROCESSNAME,
6305 1,
6306 15),
6307 ROW_CUR.CODOPEROUT,
6308 0,
6309 NULL);
6310 AUTOINSERT(ROW_CUR.CODOPEROUT);
6311 COMMIT;
6312
6313 -- ER: 18/08/09 SOLO SE IL RECORD TRATTATO
6314 -- HA INSERITO I DATI SU UNA TABLELLA DIVERSA DAL PRECEDENTE ALLORA
6315 -- VADO A CONTARE IL NUMERO DI RECORD CHE HO INSERITO SU QUELLA TABELLA
6316 -- CON QUELL'UKID ALTRIMENTI CONTEREI Pu VOLTE GLI STESSI RECORD
6317 -- (PRIMA INSERISCO 5 REC SULLA F6X0110 E CONTO 5 REC CON QUELL'UKID,
6318 -- POI INSERISCO ALTRI 3 RECORD E VADO A CONTARE QUANTI SONO CON QUELL'UKID
6319 -- QUINDI CONTO 8 CHE SOMMATI AI 5 DI PRIMA FANNO 13 CHE e ERRATO.
6320 -- DOVEVO CONTARLO 1 SOLA VOLTA, ALL'ULTIMO INSERIMENTO SU QUELLA TABELLA)
6321 IF (ROW_CUR.TABFROM <> OLD_TABFROM) THEN
6322
6323 RECNUMB := GET_ROW_COUNT(UKID,
6324 OLD_TABFROMPREFIX,
6325 OLD_TABFROM,
6326 VARENHV);
6327 RECTOT := RECTOT + RECNUMB;
6328
6329 pkg_utils.log_end_detail(IDLOG,
6330 INTPROCLOGDETT,
6331 0,
6332 RECTOT,
6333 RECTOT,
6334 0);
6335
6336 OLD_TABFROM := ROW_CUR.TABFROM;
6337 OLD_TABFROMPREFIX := ROW_CUR.TABFROMPREFIX;
6338 --
6339 END IF;
6340
6341 END LOOP;
6342 -- ER: 18/08/09 ALL'ULTIMO GIRO CONTO QUANTI SONO I
6343 -- RECORD INSERITI NELLA ULTIMA TABELLA CON QUELL'UKID
6344 RECNUMB := GET_ROW_COUNT(UKID,
6345 OLD_TABFROMPREFIX,
6346 OLD_TABFROM,
6347 VARENHV);
6348 RECTOT := RECTOT + RECNUMB;
6349
6350 pkg_utils.log_end_detail(IDLOG,
6351 INTPROCLOGDETT,
6352 0,
6353 RECTOT,
6354 RECTOT,
6355 0);
6356 --
6357
6358 SET_END_WRITING_STATE(VARENHV, VARPROCESSNAME, UKID, RECTOT);
6359
6360 -- SE HO LOCCATO QUALCOSA LO SLOCCO E TOLGO IL RECORD DALLA T035
6361 POST_XOUT_REMOVE_SESSION(UKID);
6362
6363 COMMIT;
6364 pkg_utils.log_end(IDLOG, 0);
6365 EXCEPTION
6366 WHEN OTHERS THEN
6367 STRERR := SQLERRM;
6368 LOG_SCRIPT(TO_CHAR(xSYSDATE, 'DD/MM/YYYY HH24:MI:SS') || '-->' ||
6369 STRERR);
6370
6371 SET_ERR_WRITING_STATE(VARENHV,
6372 VARPROCESSNAME,
6373 UKID,
6374 STRERR,
6375 RECTOT);
6376
6377 -- SE HO LOCCATO QUALCOSA LO SLOCCO E TOLGO IL RECORD DALLA T035
6378 POST_XOUT_REMOVE_SESSION(UKID);
6379
6380 COMMIT;
6381 pkg_utils.log_end(IDLOG, -1);
6382
6383 END;
6384
6385 END;
6386 /**************************************************************************************
6387 REMOVE_IMPORT rimuove da tutte le tabelle le righe con operazione passata per parametro
6388 ***************************************************************************************/
6389 PROCEDURE REMOVE_IMPORT(VARCODOPER VARCHAR2) IS
6390
6391 BEGIN
6392
6393 --------------------------- TAB JOIN ---------------------------------------------------------------------
6394 --tabella principale
6395 DELETE TB_INT_TABJOIN T
6396 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
6397
6398 --------------------------- TAB where ---------------------------------------------------------------------
6399 DELETE TB_INT_TABWHERE T
6400 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
6401
6402 --------------------------- TAB where param---------------------------------------------------------------------
6403 DELETE TB_INT_TABWHEREPARAM T
6404 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
6405
6406 ----------------------- TAB FIELDS -----------------------------------------
6407 DELETE TB_INT_TABFIELDS T
6408 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
6409
6410 -------------------------- processi ----------------------------------------------
6411
6412 DELETE TB_INT_PROCESSI P
6413 WHERE UPPER(TRIM(P.CODOPER)) = UPPER(TRIM(VARCODOPER));
6414
6415 END;
6416 /*============================================================================*/
6417 /* RIC_T062
6418 Esplode la T062 Mettendo tutti i legami */
6419 /*============================================================================*/
6420 PROCEDURE RIC_T062(PI_CODART IN VARCHAR2, -- ARTICOLO
6421 PI_CODDIV IN VARCHAR2, -- DIVISIONE
6422 PI_UMSOURCE IN VARCHAR2, -- UM SOURCE
6423 PI_UMFROM IN VARCHAR2, -- UMFROM
6424 PI_VALCONVFACT IN FLOAT,
6425 PI_PROGR_PROCESSO IN NUMBER,
6426 PI_PROGR_DETTAGLIO IN NUMBER) IS
6427
6428 CURSOR CL_T062UMCONV(CI_CODART VARCHAR2, CI_CODDIV VARCHAR2, CI_UMFROM VARCHAR2, CI_UMSOURCE VARCHAR2) IS
6429 SELECT UMFROM,
6430 UMTO,
6431 (CASE
6432 WHEN UMFROM = CI_UMFROM THEN
6433 'Y'
6434 ELSE
6435 'N'
6436 END) DRITTO,
6437 VALCONVFACT,
6438 VALCONVFACTREV
6439 FROM T062UMCONV
6440 WHERE CODART = CI_CODART
6441 AND CODDIV = CI_CODDIV
6442 /* ESISTE UN CASO IN CUI IL MIO CI_UMFROM e COLLEGATO AD UN'ALTRA UNITa DI CONVERSIONE CHE NON e LA CI_UMSOURCE */
6443
6444 AND ((UMFROM = CI_UMFROM AND UMTO <> CI_UMSOURCE) OR
6445 (UMTO = CI_UMFROM AND UMFROM <> CI_UMSOURCE))
6446 /* ESCLUDO IL CASO CHE HA GENERATO LA CHIAMATA A QUESTA RIC: A SEGUITO DELLA INSERT NELLA T062 DELLE CONVESRIONI DA CI_UMSOURCE A CI_UMFROM (O VICEVERSA) VERRa CHIAMATA UNA RIC CON I DUE PARAMETRI SOPRACITATI QUINDI DA ESCLUDERE */
6447
6448 AND ((UMFROM <> CI_UMSOURCE AND UMTO <> CI_UMFROM) OR
6449 (UMTO <> CI_UMSOURCE AND UMFROM <> CI_UMFROM));
6450
6451 VL_ESISTE VARCHAR2(30) := NULL;
6452 VL_MESSAGGIO VARCHAR2(300) := NULL;
6453
6454 BEGIN
6455
6456 FOR RL_T062 IN CL_T062UMCONV(PI_CODART,
6457 PI_CODDIV,
6458
6459 PI_UMFROM,
6460 PI_UMSOURCE) LOOP
6461
6462 BEGIN
6463
6464 /*
6465 SE ESISTE ANCHE SOLO UN CASO TRA I DUE POSSIBILI (from e to dritti o ribaltati) ALLORA NON DEVO INSERIRE
6466 */
6467
6468 SELECT CODART
6469 INTO VL_ESISTE
6470 FROM T062UMCONV
6471 WHERE CODART = PI_CODART
6472 AND CODDIV = PI_CODDIV
6473 AND (
6474 /* ESISTE UN CASO IN CUI L'UMFROM e IL MIO PI_UMSOURCE E L'UMTO e QUELLO CHE AVEVO TROVATO NEL CURSORE E CHE POSSO USARE COME CONVERTITORE INTREMEDIO */
6475
6476 (UMFROM = PI_UMSOURCE AND
6477 UMTO = (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.UMTO ELSE
6478 RL_T062.UMFROM END)) OR
6479 /* VICEVERSA L'UMTO e IL MIO PI_UMSOURCE E L'UMFROM e IL CONVERTITORE */
6480
6481 (UMTO = PI_UMSOURCE AND
6482 UMFROM = (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.UMTO ELSE
6483 RL_T062.UMFROM END)));
6484
6485 EXCEPTION
6486 WHEN OTHERS THEN
6487 -- la inserisce
6488
6489 INSERT INTO T062UMCONV
6490
6491 (CODART, CODDIV, UMFROM, UMTO, VALCONVFACT, VALCONVFACTREV)
6492 VALUES
6493 (PI_CODART,
6494 PI_CODDIV,
6495 PI_UMSOURCE,
6496 (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.UMTO ELSE
6497 RL_T062.UMFROM END),
6498 (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.VALCONVFACT ELSE
6499 RL_T062.VALCONVFACTREV END) * PI_VALCONVFACT,
6500 1 / ((CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.VALCONVFACT ELSE
6501 RL_T062.VALCONVFACTREV END) * PI_VALCONVFACT));
6502
6503 COMMIT;
6504
6505 RIC_T062(PI_CODART,
6506 PI_CODDIV,
6507 PI_UMSOURCE,
6508 (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.UMTO ELSE
6509 RL_T062.UMFROM END),
6510 (CASE WHEN RL_T062.DRITTO = 'Y' THEN RL_T062.VALCONVFACT ELSE
6511 RL_T062.VALCONVFACTREV END) * PI_VALCONVFACT,
6512 PI_PROGR_PROCESSO,
6513 PI_PROGR_DETTAGLIO);
6514
6515 END;
6516
6517 END LOOP;
6518
6519 EXCEPTION
6520 WHEN OTHERS THEN
6521 VL_MESSAGGIO := SQLERRM;
6522
6523 END RIC_T062;
6524 /*---SET_READING_STATE(varUKID number)---
6525 imposta lo stato di lettura del processo varUKID dell'ambiente varENV di
6526 tipo tipoProc nella tabella dei processi fsx00001
6527 ----------
6528 */
6529 PROCEDURE SET_READING_STATE(VARENV VARCHAR2,
6530 TIPOPROC VARCHAR2,
6531 VARUKID NUMBER) IS
6532
6533 BEGIN
6534
6535 UPDATE F6X0001
6536
6537 SET F6X0001.XTY6XPRST = 'R',
6538 F6X0001.XTY6XREUS = (SELECT SUBSTR(user,
6539 1,
6540 10)
6541 FROM DUAL), -- utente lettura
6542 F6X0001.XTY6XREPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6543 F6X0001.XTY6XREWS = GET_HOST, --macchina lettura
6544 F6X0001.XTY6XREVE = PROCESS_PROG_VER,
6545 F6X0001.XTY6XREDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6546 F6X0001.XTY6XRETI = TO_CHAR(SYSDATE, 'HH24MISS'), --ora lettura
6547 F6X0001.XTUSER = (SELECT SUBSTR(user,
6548 1,
6549 10)
6550 FROM DUAL),
6551 F6X0001.XTPID = PROCESS_PROG_NAME,
6552 F6X0001.XTJOBN = GET_HOST,
6553 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6554 F6X0001.XTUPMT = TO_CHAR(xSYSDATE, 'HH24MISS')
6555
6556 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6557 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6558 AND F6X0001.XTUKID = VARUKID
6559 AND TRIM(F6X0001.XTY6XPTDR) = OW_TO_XTEL;
6560
6561 LOG_PROCESS_OK('Process start:read ' || TIPOPROC,
6562 VARENV,
6563 TIPOPROC,
6564 VARUKID);
6565
6566 END;
6567 /*---SET_END_READING_STATE(varUKID number)---
6568 imposta lo stato di fine lettura del processo varUKID dell'ambiente varENV di
6569 tipo tipoProc nella tabella dei processi fsx00001
6570 ----------
6571 */
6572 PROCEDURE SET_END_READING_STATE(VARENV VARCHAR2,
6573 TIPOPROC VARCHAR2,
6574 VARUKID NUMBER) IS
6575
6576 BEGIN
6577
6578 UPDATE F6X0001
6579
6580 SET F6X0001.XTY6XPRST = 'Y',
6581 F6X0001.XTY6XREUS = (SELECT SUBSTR(user,
6582 1,
6583 10)
6584 FROM DUAL), -- utente lettura
6585 F6X0001.XTY6XREPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6586 F6X0001.XTY6XREWS = GET_HOST, --macchina lettura
6587 F6X0001.XTY6XREVE = PROCESS_PROG_VER, --versione programma lettura
6588 F6X0001.XTY6XREDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6589 F6X0001.XTY6XRETI = TO_CHAR(SYSDATE, 'HH24MISS'), --ora lettura
6590 F6X0001.XTUSER = (SELECT SUBSTR(user,
6591 1,
6592 10)
6593 FROM DUAL),
6594 F6X0001.XTPID = PROCESS_PROG_NAME,
6595 F6X0001.XTJOBN = GET_HOST,
6596 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6597 F6X0001.XTUPMT = TO_CHAR(xSYSDATE, 'HH24MISS')
6598
6599 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6600 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6601 AND F6X0001.XTUKID = VARUKID
6602 AND TRIM(F6X0001.XTY6XPTDR) = OW_TO_XTEL;
6603
6604 LOG_PROCESS_OK('Process end:read ' || TIPOPROC,
6605 VARENV,
6606 TIPOPROC,
6607 VARUKID);
6608
6609 END;
6610 /*---SET_END_WRITING_STATE(varEnv varchar2 ,tipoProc varchar2,varUKID number)---
6611 imposta lo stato di fine scrittura del processo varUKID dell'ambiente varENV di
6612 tipo tipoProc nella tabella dei processi f6x00001
6613 ----------
6614 */
6615 PROCEDURE SET_END_WRITING_STATE(VARENV VARCHAR2,
6616 TIPOPROC VARCHAR2,
6617 VARUKID NUMBER,
6618 RECTOT NUMBER) IS
6619 INTCOUNT INT;
6620
6621 BEGIN
6622
6623 SELECT COUNT(*)
6624 INTO INTCOUNT
6625 FROM F6X0001
6626 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6627 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6628 AND F6X0001.XTUKID = VARUKID
6629 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6630
6631 ---di solito deve essere creato il processo, per cui dovrebbe sempre essere intCount=0
6632 IF INTCOUNT > 0 THEN
6633 UPDATE F6X0001
6634 SET F6X0001.XTY6XPRST = 'N',
6635 F6X0001.XTY6XCRUS = (SELECT SUBSTR(user,
6636 1,
6637 10)
6638 FROM DUAL), -- utente lettura
6639 F6X0001.XTY6XCRPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6640 F6X0001.XTY6XCRWS = GET_HOST, --macchina lettura
6641 F6X0001.XTY6XCRDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6642 --- f6x0001.xty6xcrti=TO_CHAR(sysdate,'HH24MISS'),--ora lettura
6643 F6X0001.XTUSER = (SELECT SUBSTR(user,
6644 1,
6645 10)
6646 FROM DUAL),
6647 F6X0001.XTPID = PROCESS_PROG_NAME,
6648 F6X0001.XTJOBN = GET_HOST,
6649 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6650 ----- f6x0001.xtupmt=TO_CHAR(sysdate,'HH24MISS'),
6651 F6X0001.XTUKRECN = RECTOT
6652 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6653 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6654 AND F6X0001.XTUKID = VARUKID
6655 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6656
6657 END IF;
6658
6659 LOG_PROCESS_OK('Process end:write ' || TIPOPROC,
6660 VARENV,
6661 TIPOPROC,
6662 VARUKID);
6663 END;
6664 /*---SET_ERROR_READING_STATE(varUKID number)---
6665 imposta lo stato di errore in lettura del processo varUKID dell'ambiente varENV di
6666 tipo tipoProc nella tabella dei processi fsx00001
6667 ----------
6668 */
6669 PROCEDURE SET_ERROR_READING_STATE(VARENV VARCHAR2,
6670 TIPOPROC VARCHAR2,
6671 VARUKID NUMBER,
6672 VARERRDESC VARCHAR2) IS
6673
6674 BEGIN
6675 UPDATE F6X0001
6676
6677 SET F6X0001.XTY6XPRST = '1',
6678 F6X0001.XTY6XREUS = (SELECT SUBSTR(user,
6679 1,
6680 10)
6681 FROM DUAL), -- utente lettura
6682 F6X0001.XTY6XREPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6683 F6X0001.XTY6XREWS = GET_HOST, --macchina lettura
6684 F6X0001.XTY6XREDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6685 F6X0001.XTY6XRETI = TO_CHAR(SYSDATE, 'HH24MISS'), --ora lettura
6686 F6X0001.XTUSER = (SELECT SUBSTR(user,
6687 1,
6688 10)
6689 FROM DUAL),
6690 F6X0001.XTPID = PROCESS_PROG_NAME,
6691 F6X0001.XTJOBN = GET_HOST,
6692 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6693 F6X0001.XTUPMT = TO_CHAR(xSYSDATE, 'HH24MISS')
6694 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6695 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6696 AND F6X0001.XTUKID = VARUKID
6697 AND TRIM(F6X0001.XTY6XPTDR) = OW_TO_XTEL;
6698
6699 LOG_PROCESS_ERR('Error reading ' || TIPOPROC || ':' || VARERRDESC,
6700 VARENV,
6701 TIPOPROC,
6702 VARUKID);
6703 END;
6704 /*---SET_ERR_WRITING_STATE(varEnv varchar2 ,tipoProc varchar2,varUKID number)---
6705 imposta lo stato di fine scrittura con errore del processo varUKID dell'ambiente varENV di
6706 tipo tipoProc nella tabella dei processi f6x00001
6707 ----------
6708 */
6709 PROCEDURE SET_ERR_WRITING_STATE(VARENV VARCHAR2,
6710 TIPOPROC VARCHAR2,
6711
6712 VARUKID NUMBER,
6713 VARERRDESC VARCHAR2,
6714 RECTOT NUMBER) IS
6715 INTCOUNT INT;
6716
6717 BEGIN
6718
6719 SELECT COUNT(*)
6720 INTO INTCOUNT
6721 FROM F6X0001
6722 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6723 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6724 AND F6X0001.XTUKID = VARUKID
6725 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6726
6727 ---di solito deve essere creato il processo, per cui dovrebbe sempre essere intCount=0
6728 IF INTCOUNT > 0 THEN
6729 UPDATE F6X0001
6730 SET F6X0001.XTY6XPRST = '0',
6731 F6X0001.XTY6XCRUS = (SELECT SUBSTR(user,
6732 1,
6733 10)
6734 FROM DUAL), -- utente lettura
6735 F6X0001.XTY6XCRPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6736 F6X0001.XTY6XCRVE = PROCESS_PROG_VER,
6737 F6X0001.XTY6XCRWS = GET_HOST, --macchina lettura
6738 F6X0001.XTY6XCRDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6739 --- f6x0001.xty6xcrti=TO_CHAR(sysdate,'HH24MISS'),--ora lettura
6740 F6X0001.XTUSER = (SELECT SUBSTR(user,
6741 1,
6742 10)
6743 FROM DUAL),
6744 F6X0001.XTPID = PROCESS_PROG_NAME,
6745 F6X0001.XTJOBN = GET_HOST,
6746 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6747 --- f6x0001.xtupmt=TO_CHAR(sysdate,'HH24MISS'),
6748 F6X0001.XTUKRECN = RECTOT
6749 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6750 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6751 AND F6X0001.XTUKID = VARUKID
6752 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6753
6754 END IF;
6755
6756 LOG_PROCESS_ERR('Error writing ' || TIPOPROC || ':' || VARERRDESC,
6757 VARENV,
6758 TIPOPROC,
6759 VARUKID);
6760
6761 END;
6762 /*---SET_WRITING_STATE(varEnv varchar2 ,tipoProc varchar2,varUKID number)---
6763 imposta lo stato di scrittura del processo varUKID dell'ambiente varENV di
6764 tipo tipoProc nella tabella dei processi f6x00001
6765 ----------
6766 */
6767 PROCEDURE SET_WRITING_STATE(VARENV VARCHAR2,
6768 TIPOPROC VARCHAR2,
6769 VARUKID NUMBER) IS
6770 INTCOUNT INT;
6771
6772 BEGIN
6773
6774 SELECT COUNT(*)
6775 INTO INTCOUNT
6776 FROM F6X0001
6777 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6778 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6779 AND F6X0001.XTUKID = VARUKID
6780 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6781
6782 ---di solito deve essere creato il processo, per cui dovrebbe sempre essere intCount=0
6783 IF INTCOUNT = 0 THEN
6784 INSERT INTO F6X0001
6785 (XTENHV,
6786 XTUKID,
6787 XTY6XTYPR,
6788 XTY6XPRST,
6789 XTY6XPTDR,
6790 XTY6XCRUS,
6791 XTY6XCRPR,
6792 XTY6XCRVE,
6793 XTY6XCRWS,
6794 XTY6XCRDA,
6795 XTY6XCRTI,
6796 XTUSER,
6797 XTPID,
6798 XTJOBN,
6799 XTUPMJ,
6800 XTUPMT)
6801 VALUES
6802 (VARENV,
6803 VARUKID,
6804 TIPOPROC,
6805 'W',
6806 XTEL_TO_OW,
6807 (SELECT SUBSTR(user, 1, 10)
6808 FROM DUAL),
6809 PROCESS_PROG_NAME,
6810 PROCESS_PROG_VER,
6811 GET_HOST,
6812 GREG_TO_GIUL(SYSDATE),
6813 TO_CHAR(SYSDATE, 'HH24MISS'),
6814 (SELECT SUBSTR(user, 1, 10)
6815 FROM DUAL),
6816 PROCESS_PROG_NAME,
6817 GET_HOST,
6818 GREG_TO_GIUL(xSYSDATE),
6819 TO_CHAR(xSYSDATE, 'HH24MISS'));
6820
6821 ELSE
6822 UPDATE F6X0001
6823 SET F6X0001.XTY6XPRST = 'W',
6824 F6X0001.XTY6XCRUS = (SELECT SUBSTR(user,
6825 1,
6826 10)
6827 FROM DUAL), -- utente lettura
6828 F6X0001.XTY6XCRPR = PROCESS_PROG_NAME, ---program name, definito a livello di package body
6829 F6X0001.XTY6XCRVE = PROCESS_PROG_VER,
6830 F6X0001.XTY6XCRWS = GET_HOST, --macchina lettura
6831 F6X0001.XTY6XCRDA = GREG_TO_GIUL(SYSDATE), --- data lettura in formato juliano
6832 F6X0001.XTY6XCRTI = TO_CHAR(xSYSDATE, 'HH24MISS'), --ora lettura
6833 F6X0001.XTUSER = (SELECT SUBSTR(user,
6834 1,
6835 10)
6836 FROM DUAL),
6837 F6X0001.XTPID = PROCESS_PROG_NAME,
6838 F6X0001.XTJOBN = GET_HOST,
6839 F6X0001.XTUPMJ = GREG_TO_GIUL(xSYSDATE),
6840 F6X0001.XTUPMT = TO_CHAR(xSYSDATE, 'HH24MISS')
6841 WHERE TRIM(UPPER(F6X0001.XTENHV)) = TRIM(UPPER(VARENV))
6842 AND TRIM(UPPER(F6X0001.XTY6XTYPR)) = TRIM(UPPER(TIPOPROC))
6843 AND F6X0001.XTUKID = VARUKID
6844 AND TRIM(F6X0001.XTY6XPTDR) = XTEL_TO_OW;
6845
6846 END IF;
6847
6848 LOG_PROCESS_OK('Process start:write ' || TIPOPROC,
6849 VARENV,
6850 TIPOPROC,
6851 VARUKID);
6852 END;
6853 /*SETUP_ROVA_IMPORT
6854 crea automaticamente tutte le righe nella tabelle INT necessarie
6855 per impostare una operazione di import export
6856 */
6857 PROCEDURE SETUP_ROVA_IMPORT(VARTABLENAME VARCHAR2,
6858 VARCODOPER VARCHAR2,
6859 VARTABFROM VARCHAR2,
6860 VARPROCESSNAME VARCHAR2 := '',
6861 BLNIMPORT NUMBER := 1,
6862 BLNEXPORT NUMBER := 1) IS
6863 CURSOR CUR_FIELDS(VARTABLECOL VARCHAR2) IS
6864 SELECT *
6865 FROM USER_TAB_COLUMNS T
6866 WHERE T.TABLE_NAME = UPPER(TRIM(VARTABLECOL));
6867
6868 I INT;
6869 VARPREFIX VARCHAR2(30);
6870 VARTIPO VARCHAR2(255);
6871 VARSTR VARCHAR2(255);
6872 VARTABLETO VARCHAR2(30);
6873 VARTABLEFROMSYN VARCHAR2(30);
6874
6875 BEGIN
6876 --- se varTableProcess e nulla allora la REALE tabella SM1 a meno di XIN e comunque
6877 ---- uguale a varTableName, altrimenti, se abbiamo una tabella di frontiera bisogna specificarlo
6878 --- e deve necessariamente essere uguale a XIN_[varTableName]
6879 VARTABLETO := 'xin_' || VARTABLENAME; ---TODOVARXINTABLE
6880 SELECT OBJECT_TYPE
6881 INTO VARTIPO
6882 FROM USER_OBJECTS T
6883 WHERE UPPER(TRIM(T.OBJECT_NAME)) = UPPER(TRIM(VARTABFROM));
6884
6885 IF VARTIPO = 'SYNONYM' THEN
6886 EXECUTE IMMEDIATE 'CREATE TABLE ' || VARTABFROM ||
6887 'SYNTMP AS SELECT * FROM ' || VARTABFROM ||
6888 ' WHERE 1=2';
6889 COMMIT;
6890 VARSTR := VARTABFROM || 'SYNTMP';
6891 VARTABLEFROMSYN := VARSTR;
6892 SELECT TRIM(REPLACE(COLUMN_NAME, 'UKID', ''))
6893 INTO VARPREFIX
6894 FROM USER_TAB_COLUMNS T
6895 WHERE T.COLUMN_NAME LIKE '%UKID'
6896 AND T.TABLE_NAME = VARSTR;
6897
6898 DROP_TAB_IFEXISTS(VARTABFROM || 'SYNTMP');
6899 ELSE
6900 VARSTR := VARTABFROM;
6901 VARTABLEFROMSYN := VARSTR;
6902 SELECT TRIM(REPLACE(COLUMN_NAME, 'UKID', ''))
6903 INTO VARPREFIX
6904 FROM USER_TAB_COLUMNS T
6905 WHERE T.COLUMN_NAME LIKE '%UKID'
6906 AND T.TABLE_NAME = VARSTR;
6907
6908 END IF;
6909
6910 IF BLNIMPORT = 1 THEN
6911 --------------------------- TAB JOIN ---------------------------------------------------------------------
6912 --tabella principale
6913 INSERT INTO TB_INT_TABJOIN
6914 (TABLENAME, TABFROM, TABORDER, ENABLE, CODOPER, TABALIAS)
6915 VALUES
6916 (VARTABLETO, VARTABFROM, 1, 1, VARCODOPER, VARTABLETO);
6917
6918 -- semaforo
6919 INSERT INTO TB_INT_TABJOIN
6920 (TABLENAME,
6921 TABFROM,
6922 TABORDER,
6923 ENABLE,
6924 CODOPER,
6925 FIELDJOIN1,
6926 FIELDJOIN2,
6927 TABJOIN,
6928 TIPOJOIN)
6929 VALUES
6930 (VARTABLETO,
6931 'f6x0001',
6932 2,
6933 1,
6934 VARCODOPER,
6935 VARPREFIX || 'enhv',
6936 'xtenhv',
6937 VARTABFROM,
6938 'inner join');
6939
6940 INSERT INTO TB_INT_TABJOIN
6941 (TABLENAME,
6942 TABFROM,
6943 TABORDER,
6944 ENABLE,
6945 CODOPER,
6946 FIELDJOIN1,
6947 FIELDJOIN2,
6948 TABJOIN,
6949 TIPOJOIN)
6950 VALUES
6951 (VARTABLETO,
6952 'f6x0001',
6953 2,
6954 1,
6955 VARCODOPER,
6956 VARPREFIX || 'ukid',
6957 'xtukid',
6958 VARTABFROM,
6959 'inner join');
6960
6961 --------------------------- TAB where ---------------------------------------------------------------------
6962 INSERT INTO TB_INT_TABWHERE
6963 (TABLENAME, TABWHERE, CODOPER)
6964 VALUES
6965 (VARTABLETO,
6966 'f6x0001.xtenhv=@XTENHV and f6x0001.xtukid=@XTUKID',
6967 VARCODOPER);
6968
6969 --------------------------- TAB where param---------------------------------------------------------------------
6970 INSERT INTO TB_INT_TABWHEREPARAM
6971 (TABLENAME, TABPARNAME, CODOPER)
6972 VALUES
6973 (VARTABLETO, '@XTUKID', VARCODOPER);
6974
6975 INSERT INTO TB_INT_TABWHEREPARAM
6976 (TABLENAME, TABPARNAME, TABPARVALUE, CODOPER)
6977 VALUES
6978 (VARTABLETO, '@XTENHV', '''PD''', VARCODOPER);
6979
6980 ----------------------- TAB FIELDS -----------------------------------------
6981
6982 I := 1;
6983 FOR ROW_CUR IN CUR_FIELDS(VARTABLETO) LOOP
6984 I := I + 1;
6985 INSERT INTO TB_INT_TABFIELDS
6986 (TABLENAME, FIELDNAME, TABFROM, FIELDORDER, ENABLE, CODOPER)
6987 VALUES
6988 (VARTABLETO, ROW_CUR.COLUMN_NAME, VARTABFROM, I, 1, VARCODOPER);
6989
6990 END LOOP;
6991
6992 END IF;
6993
6994 -------------------------- EXPORT ----------------------------------------------
6995 IF BLNEXPORT = 1 THEN
6996 -- tabjoin
6997 INSERT INTO TB_INT_TABJOIN
6998 (TABLENAME, TABFROM, TABORDER, ENABLE, CODOPER)
6999 VALUES
7000 (VARTABFROM, 'xout_' || VARTABLENAME, 1, 1, VARTABFROM); --- una riga per l'export
7001
7002 --- tabfields
7003 INSERT INTO TB_INT_TABFIELDS
7004 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7005 VALUES
7006 (VARTABFROM, VARPREFIX || 'enhv', '''PD''', 1, VARTABFROM, '');
7007
7008 INSERT INTO TB_INT_TABFIELDS
7009 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7010 VALUES
7011 (VARTABFROM,
7012 VARPREFIX || 'jobn',
7013 '',
7014 1,
7015 VARTABFROM,
7016 'SELECT Z_PKG_XTEL_IMPORT.GET_HOST FROM dual');
7017
7018 INSERT INTO TB_INT_TABFIELDS
7019 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7020 VALUES
7021 (VARTABFROM,
7022 VARPREFIX || 'pid',
7023 '',
7024 1,
7025 VARTABFROM,
7026 'Z_PKG_XTEL_IMPORT.GET_PROG_NAME');
7027
7028 INSERT INTO TB_INT_TABFIELDS
7029 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7030 VALUES
7031 (VARTABFROM, VARPREFIX || 'ukid', '', 1, VARTABFROM, '');
7032
7033 INSERT INTO TB_INT_TABFIELDS
7034 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7035 VALUES
7036 (VARTABFROM,
7037 VARPREFIX || 'upmj',
7038 '',
7039 1,
7040 VARTABFROM,
7041 'Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(sysdate)');
7042
7043 INSERT INTO TB_INT_TABFIELDS
7044 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7045 VALUES
7046 (VARTABFROM,
7047 VARPREFIX || 'upmt',
7048 '',
7049 1,
7050 VARTABFROM,
7051 'TO_CHAR(sysdate,''HH24MISS'')');
7052
7053 INSERT INTO TB_INT_TABFIELDS
7054 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7055 VALUES
7056 (VARTABFROM, VARPREFIX || 'urab', '0', 1, VARTABFROM, '');
7057
7058 INSERT INTO TB_INT_TABFIELDS
7059 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7060 VALUES
7061 (VARTABFROM, VARPREFIX || 'urat', '0', 1, VARTABFROM, '');
7062
7063 INSERT INTO TB_INT_TABFIELDS
7064 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7065 VALUES
7066 (VARTABFROM, VARPREFIX || 'urc1', '0', 1, VARTABFROM, '');
7067
7068 INSERT INTO TB_INT_TABFIELDS
7069 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7070 VALUES
7071 (VARTABFROM,
7072 VARPREFIX || 'urdt',
7073 '',
7074 1,
7075 VARTABFROM,
7076 'Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(sysdate)');
7077
7078 INSERT INTO TB_INT_TABFIELDS
7079 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7080 VALUES
7081 (VARTABFROM,
7082 VARPREFIX || 'user',
7083 '',
7084 1,
7085 VARTABFROM,
7086 'SELECT substr(user,1,10) FROM dual');
7087
7088 INSERT INTO TB_INT_TABFIELDS
7089 (TABLENAME, FIELDNAME, FIELDFROM, ENABLE, CODOPER, TRANSFORM)
7090 VALUES
7091 (VARTABFROM, VARPREFIX || 'urrf', ' ', 1, VARTABFROM, '');
7092
7093 I := 1;
7094 FOR ROW_CUR IN CUR_FIELDS(VARTABLEFROMSYN) LOOP
7095 I := I + 1;
7096 IF ROW_CUR.COLUMN_NAME NOT IN
7097 (VARPREFIX || 'jobn', VARPREFIX || 'pid', VARPREFIX || 'ukid',
7098 VARPREFIX || 'upmj', VARPREFIX || 'upmt', VARPREFIX || 'urab',
7099 VARPREFIX || 'urat', VARPREFIX || 'urc1', VARPREFIX || 'urdt',
7100 VARPREFIX || 'user', VARPREFIX || 'urrf') THEN
7101 INSERT INTO TB_INT_TABFIELDS
7102 (TABLENAME, FIELDNAME, TABFROM, FIELDORDER, ENABLE, CODOPER)
7103 VALUES
7104 (VARTABFROM,
7105 ROW_CUR.COLUMN_NAME,
7106 'xout_' || VARTABLENAME,
7107 1,
7108 VARTABFROM,
7109 '');
7110
7111 END IF;
7112
7113 END LOOP;
7114
7115 END IF;
7116
7117 IF TRIM(VARPROCESSNAME) IS NOT NULL THEN
7118
7119 INSERT INTO TB_INT_PROCESSI
7120 (PROCESSNAME, TABLENAME, TABFROM, CODOPER, DIRINPUT, DIROUTPUT)
7121 VALUES
7122 (VARPROCESSNAME,
7123 VARTABLETO,
7124 VARTABFROM,
7125 VARCODOPER,
7126 BLNIMPORT,
7127 BLNEXPORT);
7128
7129 END IF;
7130
7131 COMMIT;
7132 IF VARTIPO <> 'SYNONYM' THEN
7133 EXECUTE IMMEDIATE 'DROP TABLE ' || VARTABFROM || 'SYNTMP';
7134 COMMIT;
7135 END IF;
7136
7137 END;
7138
7139 --
7140 PROCEDURE XOUT_ECCEZIONI_TIPI_ORD_JDE(DTELASTWRITE DATE, UKID NUMBER) IS
7141 --
7142 BEGIN
7143 --
7144 EXEC_SQL('TRUNCATE TABLE XOUT_zF6X0122');
7145 --
7146 INSERT INTO XOUT_zF6X0122
7147 (XTUKID,
7148 XTKCOO,
7149 XTMCU,
7150 XTDL01,
7151 XTDL02)
7152 SELECT UKID,
7153 Z_PKG_XTEL_IMPORT.DIV_XT_TO_OW(CODDIV),--> CODDIV
7154 ROWNUM,
7155 TRIM(CODTABROW),--> CLIENTE TOTALE
7156 TRIM(ATTR1)--> TIPO ORDINE SM1
7157 FROM T914USRTABROWS t914
7158 WHERE CODTAB = 'SPECORDTYP';
7159
7160 COMMIT;
7161
7162 INSERT INTO XOUT_zF6X0122_STORY
7163 (XTUKID,
7164 XTKCOO,
7165 XTMCU,
7166 XTDL01,
7167 XTDL02)
7168 SELECT XTUKID,
7169 XTKCOO,
7170 XTMCU,
7171 XTDL01,
7172 XTDL02
7173 FROM XOUT_zF6X0122;
7174
7175 COMMIT;
7176
7177 --
7178 END XOUT_ECCEZIONI_TIPI_ORD_JDE;
7179 --
7180 PROCEDURE XOUT_LISTINI_PVP(DTELASTWRITE DATE, UKID NUMBER) IS
7181 STRFILTERDATE VARCHAR2(2048);
7182 RETNUMBER NUMBER;
7183
7184 BEGIN
7185
7186 STRFILTERDATE := ' AND t074.dtemod>=TO_DATE(''' ||
7187 TO_CHAR(DTELASTWRITE, 'YYYYMMDD HH24MISS') ||
7188 ''' , ''YYYYMMDD HH24MISS'') ';
7189
7190 EXEC_SQL('TRUNCATE TABLE XOUT_zF6X0309');
7191
7192 -- CASO 1 : EXPORT RECORD LITINI PVP PER DM E CF
7193
7194 EXEC_SQL('INSERT INTO XOUT_zF6X0309 (XTAN8, XTLITM, XTUPRC, XTCRCD, XTUOM, XTEFTJ, XTEXDJ)
7195 SELECT T073.ATTRVAL1,
7196 T074.CODART, T074.PRZVAL * 1000,
7197 T070.CODCUR, T074.UMPRZ,
7198 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTEFROMDETAIL),
7199 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTETODETAIL)
7200 FROM T070LIST T070
7201 JOIN T073DISCLISTCUST T073 ON T073.CODLIST = T070.CODLIST
7202 AND T073.DTEFROM = T070.DTEFROMMASTER
7203 JOIN T074LISTDETT T074 ON T074.CODLIST = T070.CODLIST
7204 AND T074.DTEFROMMASTER = T070.DTEFROMMASTER
7205 AND T074.CODDIV = T073.CODDIV
7206 JOIN T041PARTYDIV T041 ON T041.CODDIV = T073.CODDIV
7207 AND T041.CODPARTY = T073.ATTRVAL1
7208 AND T041.CODSTATUS = 0
7209 WHERE T070.FLGPRICINGLIST <> 0
7210 AND xSYSDATE BETWEEN T074.DTEFROMDETAIL AND T074.DTETODETAIL
7211 AND T073.ATTRNAME1 IN (''CODCUSTINV'',''CODCUST'')
7212 ');
7213 -- TOLTO FILTRO SULLE DATE, EXPORT MASSIVO ' || STRFILTERDATE
7214
7215 -- CASO 2 : EXPORT RECORD LITINI PVP PER CC
7216
7217 EXEC_SQL('INSERT INTO XOUT_zF6X0309 (XTAN8, XTLITM, XTUPRC, XTCRCD, XTUOM, XTEFTJ, XTEXDJ)
7218 SELECT T052.CODNODE, T074.CODART, T074.PRZVAL * 1000,
7219 T070.CODCUR, T074.UMPRZ,
7220 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTEFROMDETAIL),
7221 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTETODETAIL)
7222 FROM T070LIST T070
7223 JOIN T073DISCLISTCUST T073 ON T073.CODLIST = T070.CODLIST
7224 AND T073.DTEFROM = T070.DTEFROMMASTER
7225 JOIN T074LISTDETT T074 ON T074.CODLIST = T070.CODLIST
7226 AND T074.DTEFROMMASTER = T070.DTEFROMMASTER
7227 AND T074.CODDIV = T073.CODDIV
7228 JOIN T052GER_FLAT T052 ON T052.LEV = 0
7229 AND T052.CODLEV1 = T073.ATTRVAL1
7230 AND xSYSDATE BETWEEN T052.DTESTART AND T052.DTEEND
7231 JOIN T041PARTYDIV T041 ON T041.CODDIV = T073.CODDIV
7232 AND T041.CODPARTY = T052.CODNODE
7233 AND T041.CODSTATUS = 0
7234 WHERE T070.FLGPRICINGLIST <> 0
7235 AND xSYSDATE BETWEEN T074.DTEFROMDETAIL AND T074.DTETODETAIL
7236 AND T073.ATTRNAME1 IN (''CODCATDIV1'')
7237 AND NOT EXISTS (SELECT NULL FROM XOUT_zF6X0309 WHERE XTAN8 = T052.CODNODE)
7238 ');
7239 -- TOLTO FILTRO SULLE DATE, EXPORT MASSIVO ' || STRFILTERDATE
7240
7241 -- CASO 3 : EXPORT RECORD LITINI PVP PER CT
7242
7243 EXEC_SQL('INSERT INTO XOUT_zF6X0309 (XTAN8, XTLITM, XTUPRC, XTCRCD, XTUOM, XTEFTJ, XTEXDJ)
7244 SELECT T052.CODNODE, T074.CODART, T074.PRZVAL * 1000,
7245 T070.CODCUR, T074.UMPRZ,
7246 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTEFROMDETAIL),
7247 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTETODETAIL)
7248 FROM T070LIST T070
7249 JOIN T073DISCLISTCUST T073 ON T073.CODLIST = T070.CODLIST
7250 AND T073.DTEFROM = T070.DTEFROMMASTER
7251 JOIN T074LISTDETT T074 ON T074.CODLIST = T070.CODLIST
7252 AND T074.DTEFROMMASTER = T070.DTEFROMMASTER
7253 AND T074.CODDIV = T073.CODDIV
7254 JOIN T052GER_FLAT T052 ON T052.LEV = 0
7255 AND T052.CODLEV2 = T073.ATTRVAL1
7256 AND xSYSDATE BETWEEN T052.DTESTART AND T052.DTEEND
7257 JOIN T041PARTYDIV T041 ON T041.CODDIV = T073.CODDIV
7258 AND T041.CODPARTY = T052.CODNODE
7259 AND T041.CODSTATUS = 0
7260 WHERE T070.FLGPRICINGLIST <> 0
7261 AND xSYSDATE BETWEEN T074.DTEFROMDETAIL AND T074.DTETODETAIL
7262 AND T073.ATTRNAME1 IN (''CODCATDIV2'')
7263 AND NOT EXISTS (SELECT NULL FROM XOUT_zF6X0309 WHERE XTAN8 = T052.CODNODE)
7264 ');
7265 -- TOLTO FILTRO SULLE DATE, EXPORT MASSIVO ' || STRFILTERDATE
7266
7267 -- CASO 4 : EXPORT RECORD LITINI PVP PER SG
7268
7269 EXEC_SQL('INSERT INTO XOUT_zF6X0309 (XTAN8, XTLITM, XTUPRC, XTCRCD, XTUOM, XTEFTJ, XTEXDJ)
7270 SELECT T052.CODNODE, T074.CODART, T074.PRZVAL * 1000,
7271 T070.CODCUR, T074.UMPRZ,
7272 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTEFROMDETAIL),
7273 Z_PKG_XTEL_IMPORT.GREG_TO_GIUL(T074.DTETODETAIL)
7274 FROM T070LIST T070
7275 JOIN T073DISCLISTCUST T073 ON T073.CODLIST = T070.CODLIST
7276 AND T073.DTEFROM = T070.DTEFROMMASTER
7277 JOIN T074LISTDETT T074 ON T074.CODLIST = T070.CODLIST
7278 AND T074.DTEFROMMASTER = T070.DTEFROMMASTER
7279 AND T074.CODDIV = T073.CODDIV
7280 JOIN T052GER_FLAT T052 ON T052.LEV = 0
7281 AND T052.CODLEV3 = T073.ATTRVAL1
7282 AND xSYSDATE BETWEEN T052.DTESTART AND T052.DTEEND
7283 JOIN T041PARTYDIV T041 ON T041.CODDIV = T073.CODDIV
7284 AND T041.CODPARTY = T052.CODNODE
7285 AND T041.CODSTATUS = 0
7286 WHERE T070.FLGPRICINGLIST <> 0
7287 AND xSYSDATE BETWEEN T074.DTEFROMDETAIL AND T074.DTETODETAIL
7288 AND T073.ATTRNAME1 IN (''CODCATDIV3'')
7289 AND NOT EXISTS (SELECT NULL FROM XOUT_zF6X0309 WHERE XTAN8 = T052.CODNODE)
7290 ');
7291 -- TOLTO FILTRO SULLE DATE, EXPORT MASSIVO ' || STRFILTERDATE
7292
7293 END XOUT_LISTINI_PVP;
7294
7295 /************* PROCEDURE XOUT_GERARCHIA(dteLastWrite date)
7296 Costruisce la tabelle di XOUT della gerarchia t053 che non sono altro che un filtro delle
7297 tabelle di sm1 sui dati TUTTI.
7298 dteLastWrite: data di filtraggio oltre la quale prendo i dati modificati/creati
7299 non e usata qui,ma essendo chiamata in automatico , deve avere questo formato.
7300
7301 **************************************/
7302 PROCEDURE XOUT_GERARCHIA(DTELASTWRITE DATE, UKID NUMBER) IS
7303 STRFILTERDATE VARCHAR2(2048);
7304 RETNUMBER NUMBER;
7305
7306 BEGIN
7307
7308 EXEC_SQL('TRUNCATE TABLE xout_zt053partyrelation');
7309
7310 --- INSERISCO PRIMA I CLIENTI REALI, NON CREATI PER RIEMPIRE LIVELLI MANCANTI
7311 EXEC_SQL('INSERT INTO xout_zt053partyrelation SELECT t.codparentnode,t.codnode,t.dtestart,t.dteend,
7312 t.codlevelparent,t.codlevel,t.dtemod,0 FROM
7313 TB0042RELATIONS_STATIC t WHERE xsysdate between dtestart and dteend
7314 and codnode not in(''CCNEW'',''CTNEW'',''SGNEW'',''GRNEW'',''ASNEW'',
7315 ''CGNEW'',''CNNEW'') and codlevel<6
7316 and codparentnode not in(''CCNEW'',''CTNEW'',''SGNEW'',''GRNEW'',''ASNEW'',
7317 ''CGNEW'',''CNNEW'', ''0'') and codparentnode is not null
7318 ');
7319
7320 /* 't.levelson in
7321 ( select MIN(t053.levelson) from
7322 t053partyrelation t053 where Z_PKG_XTEL_IMPORT.EXP_CODPARTY(t053.codfather)=Z_PKG_XTEL_IMPORT.EXP_CODPARTY(t.codfather) and
7323 Z_PKG_XTEL_IMPORT.EXP_CODPARTY(t053.codson)=Z_PKG_XTEL_IMPORT.EXP_CODPARTY(t.codson) and t053.dtemod>=TO_DATE(''' || TO_CHAR(dteLastWrite,'YYYYMMDD') || ''' , ''YYYYMMDD'')
7324 )' );
7325 */
7326
7327 COMMIT;
7328 ---non usata per ora:
7329 SELECT COUNT(*) INTO RETNUMBER FROM XOUT_zT053PARTYRELATION; ---numero di record scritti per i clienti
7330
7331 END;
7332 /************* PROCEDURE XOUT_GERARCHIA_VAR(dteLastWrite date)
7333 Costruisce la tabelle di XOUT della gerarchia t053 che non sono altro che un filtro delle
7334 tabelle di sm1 sui dati creati o modificati DOPO una certa data, ovvero
7335 l'ultima data di esportazione, usualmente.
7336 dteLastWrite: data di filtraggio oltre la quale prendo i dati modificati/creati
7337
7338 **************************************/
7339 PROCEDURE XOUT_GERARCHIA_VAR(DTELASTWRITE DATE, UKID NUMBER) IS
7340 STRFILTERDATE VARCHAR2(2048);
7341 RETNUMBER NUMBER;
7342
7343 BEGIN
7344
7345 STRFILTERDATE := '';
7346
7347 EXEC_SQL('TRUNCATE TABLE xout_zt053partyrelation');
7348
7349 --- esporto tutti i record modificati dopo la data passata
7350 --- che siano di livello 0,3,4 oppure
7351 --- i DM (cioe lev -1) che non abbiano flgcustdeliv=-1 e flgcustinv=-1
7352 --- ovvero i DM non DM + CF
7353 EXEC_SQL('INSERT INTO xout_zt053partyrelation SELECT t.codparentnode,t.codnode,t.dtestart,t.dteend,
7354 t.codlevelparent,t.codlevel,t.dtemod,0 FROM
7355 TB0042RELATIONS_STATIC t inner join t040party t040 on t.codnode=t040.codparty
7356 WHERE
7357 (xsysdate between t.dtestart AND t.dteend )
7358 AND
7359 (
7360 ( codlevel >=0 and codlevel<6 )
7361 or
7362 ( codlevel=-1 and t040.flgcustdeliv * t040.flgcustinv=0)
7363 )
7364 and codparentnode not in(''CCNEW'',''CTNEW'',''SGNEW'',''GRNEW'',''ASNEW'',
7365 ''CGNEW'',''CNNEW'', ''0'') and codparentnode is not null
7366 AND ( t.dtemod>=TO_DATE(''' ||
7367 TO_CHAR(DTELASTWRITE, 'YYYYMMDD HH24MISS') ||
7368 ''' , ''YYYYMMDD HH24MISS'')
7369 ) ');
7370 BEGIN
7371 ---- questa tabella temporanea la ricreo tutte le volte.
7372 ---- mi serve per avere il codice in formato JDE (expson, expfather)
7373 ----- ovvero il codparty senza gli eventuali prefissi CT,CG...
7374 EXEC_SQL('create table T053_TEMP
7375 (
7376 CODFATHER VARCHAR2(15),
7377 CODSON VARCHAR2(15) not null,
7378 DTEFROM DATE not null,
7379 DTETO DATE,
7380 LEVELFATHER VARCHAR2(15) not null,
7381 LEVELSON VARCHAR2(15) not null,
7382 DTEMOD DATE,
7383 FLGANN NUMBER(1),
7384 EXPSON VARCHAR2(255),
7385 EXPFATHER VARCHAR2(255)
7386 ) ',
7387 0);
7388 EXCEPTION
7389 WHEN OTHERS THEN
7390 NULL;
7391
7392 END;
7393
7394 EXEC_SQL('TRUNCATE TABLE t053_TEMP');
7395 EXEC_SQL('INSERT /*+ APPEND NOLOGGING*/ INTO t053_TEMP (codfather,codson,dtefrom,dteto,levelfather,levelson,dtemod,flgann,expson,expfather)
7396 SELECT codparentnode,codnode,dtestart,dteend,codlevelparent,codlevel,dtemod,0,Z_PKG_XTEL_IMPORT.EXP_CODPARTY(codnode) as EXPSON,
7397 Z_PKG_XTEL_IMPORT.EXP_CODPARTY(codparentnode) as EXPFATHER from TB0042RELATIONS_STATIC t ',
7398 'CREATE TABLE t053_TEMP');
7399
7400 XOUT_POST_GER_VAR;
7401
7402 END;
7403
7404 /* PostProcedura che togle i Lock */
7405 PROCEDURE POST_XOUT_REMOVE_SESSION(PI_UKID NUMBER) IS
7406
7407 VL_SESSION NUMBER := NULL;
7408 VL_SESSION_ST NUMBER := NULL;
7409 VL_LOKED_TABLE VARCHAR2(200) := NULL;
7410
7411 BEGIN
7412
7413 BEGIN
7414
7415 SELECT IDSESSIONLCK, TABLELCK
7416 INTO VL_SESSION, VL_LOKED_TABLE
7417 FROM TB_INT_LOCK_TABLE
7418 WHERE XTUKID = PI_UKID;
7419
7420 EXEC_SQL('UPDATE '||VL_LOKED_TABLE||'
7421 SET CODUSRLCK=NULL, IDSESSIONLCK = NULL, DTELCK=NULL,
7422 dtetohost = xsysdate
7423 WHERE IDSESSIONLCK ='|| VL_SESSION);
7424
7425 COMMIT;
7426
7427 REMOVE_SESSION(VL_SESSION, 'SYSH', VL_SESSION_ST);
7428
7429 DELETE FROM TB_INT_LOCK_TABLE
7430 WHERE XTUKID= PI_UKID;
7431
7432 COMMIT;
7433
7434 EXCEPTION
7435 WHEN OTHERS THEN
7436 RETURN;
7437 -- NESSUN LOCK DA RIMUOVE ESCO SENZA FARE NULLA
7438 END;
7439
7440 END POST_XOUT_REMOVE_SESSION;
7441 /********************************************
7442 **********************************/
7443 PROCEDURE XOUT_POST_GER_VAR IS
7444 VARFATHER VARCHAR2(255);
7445 VARLEVFATHER INT;
7446 CURSOR CUR_XOUT IS
7447 SELECT * FROM XOUT_zT053PARTYRELATION FOR UPDATE;
7448
7449 ISDUM INT;
7450
7451 BEGIN
7452
7453 FOR ROW_CUR IN CUR_XOUT LOOP
7454 VARFATHER := GET_FIRST_UPPER(ROW_CUR.CODFATHER,
7455 TO_NUMBER(ROW_CUR.LEVELFATHER));
7456 SELECT MAX(TO_NUMBER(codlevel))
7457 INTO VARLEVFATHER
7458 FROM tb0042relations_STATIC T
7459 WHERE T.CODnode = VARFATHER
7460 AND xSYSDATE BETWEEN T.DTEstart AND T.DTEend;
7461
7462 ISDUM := IS_DUMMY_REC(ROW_CUR.CODSON, TO_NUMBER(ROW_CUR.LEVELSON));
7463 IF VARFATHER <> ROW_CUR.CODFATHER THEN
7464
7465 IF ISDUM = 0 THEN
7466 ---- se il padre e dummy ma il figlio no,
7467 ------ aggiorno solo il padre.
7468 UPDATE XOUT_zT053PARTYRELATION T
7469 SET T.CODFATHER = VARFATHER,
7470 T.LEVELFATHER = TO_NUMBER(VARLEVFATHER)
7471 WHERE T.CODSON = ROW_CUR.CODSON
7472 AND T.LEVELSON = ROW_CUR.LEVELSON;
7473
7474 END IF;
7475
7476 END IF;
7477
7478 ----- altrimenti se il figlio e dummy
7479 ---rimuovo il dummy son ed aggiungo tutti i buoni
7480 IF ISDUM = 1 THEN
7481 DELETE XOUT_zT053PARTYRELATION T
7482 WHERE T.CODSON = ROW_CUR.CODSON
7483 AND T.LEVELSON = ROW_CUR.LEVELSON;
7484
7485 ADD_ALL_CHILDS(ROW_CUR.CODSON,
7486 TO_NUMBER(ROW_CUR.LEVELSON),
7487 VARFATHER,
7488 TO_NUMBER(VARLEVFATHER),
7489 ROW_CUR.DTEFROM,
7490 ROW_CUR.DTETO,
7491 ROW_CUR.DTEMOD);
7492 END IF;
7493
7494 END LOOP;
7495
7496 ----se custinv=-1 + custdeliv=0 + son=father ==>> delete from xout
7497 DELETE FROM XOUT_zT053PARTYRELATION T
7498 WHERE T.CODSON = T.CODFATHER
7499 AND EXISTS (SELECT *
7500 FROM T040PARTY T040
7501 WHERE T040.FLGCUSTINV = -1
7502 AND T040.FLGCUSTDELIV = 0
7503 AND T040.CODPARTY = T.CODSON);
7504
7505 COMMIT;
7506 -- elimino le relazioni verso i nodi fittizi poiche provocano l'esplosione di listini/sconti
7507 -- non coerenti e il collegamento dei clienti stessi ad un canale errato
7508 DELETE FROM XOUT_zT053PARTYRELATION T
7509 WHERE T.CODFATHER IN
7510 ('CT8614', 'SG213', 'GR212', 'AS211', 'CG211', 'CNNEW');
7511
7512 COMMIT;
7513 END;
7514 /*
7515 ADD_ALL_CHILDS varParty
7516 Aggiunge alla xout_t053party tutti i figli i figli "BUONI"
7517 */
7518 PROCEDURE ADD_ALL_CHILDS(VARPARTY VARCHAR2,
7519 INTLEV INT,
7520 VARFATHER VARCHAR2,
7521 VARLEVFATHER INT,
7522 VARFROM DATE,
7523 VARTO DATE,
7524 VARMOD DATE) IS
7525
7526 VARCODSON VARCHAR(255);
7527 ISDUMM INT;
7528 CURSOR CUR_SON IS
7529 SELECT *
7530 FROM TB0042RELATIONS_STATIC Tb0042
7531 WHERE Tb0042.CODparentnode = VARPARTY
7532 AND Tb0042.CODdim = 'CUST' and tb0042.codhier = 'COMM' and tb0042.coddiv = '001'
7533 AND xSYSDATE BETWEEN Tb0042.DTEstart AND Tb0042.DTEend;
7534
7535 INTCOUNT INT;
7536
7537 BEGIN
7538
7539 FOR ROW_SON IN CUR_SON LOOP
7540 ISDUMM := IS_DUMMY_REC(ROW_SON.CODnode, TO_NUMBER(ROW_SON.idLEVEL));
7541 IF ISDUMM = 0 THEN
7542 SELECT COUNT(*)
7543 INTO INTCOUNT
7544 FROM XOUT_zT053PARTYRELATION T
7545 WHERE T.CODSON = ROW_SON.CODnode
7546 AND T.LEVELSON = ROW_SON.idLEVEL;
7547
7548 IF INTCOUNT = 0 THEN
7549 INSERT INTO XOUT_zT053PARTYRELATION
7550 (CODFATHER,
7551 CODSON,
7552 DTEFROM,
7553 DTETO,
7554 LEVELFATHER,
7555 LEVELSON,
7556 DTEMOD,
7557 FLGANN)
7558 VALUES
7559 (VARFATHER,
7560 ROW_SON.CODnode,
7561 VARFROM, ---ROW_SON.DTEFROM,
7562 VARTO, -------- ROW_SON.DTETO,
7563 VARLEVFATHER,
7564 ROW_SON.idLEVEL,
7565 VARMOD, ----ROW_SON.DTEMOD,
7566 0); --ROW_SON.FLGANN);
7567
7568 END IF;
7569
7570 ELSE
7571 IF ISDUMM = 1 THEN
7572 ADD_ALL_CHILDS(ROW_SON.CODnode,
7573 ROW_SON.idLEVEL,
7574 VARFATHER,
7575 VARLEVFATHER,
7576
7577 VARFROM,
7578 VARTO,
7579 VARMOD);
7580
7581 END IF;
7582
7583 END IF;
7584
7585 END LOOP;
7586
7587 END;
7588 /************* PROCEDURE XOUT_INCASSI(dteLastWrite date)
7589 Costruisce le tabelle di XOUT che non sono altro che un filtro delle
7590 tabelle di sm1 sui dati creati o modificati DOPO una certa data, ovvero
7591 l'ultima data di esportazione, usualmente.
7592 dteLastWrite: data di filtraggio oltre la quale prendo i dati modificati/creati
7593 **************************************/
7594 PROCEDURE XOUT_INCASSI(DTELASTWRITE DATE) IS
7595 STRFILTERDATE VARCHAR2(2048);
7596 SQL_STRING VARCHAR2(8000);
7597
7598 BEGIN
7599 STRFILTERDATE := ' WHERE ( dtemod>=TO_DATE(''' ||
7600 TO_CHAR(DTELASTWRITE, 'YYYYMMDD') ||
7601 ''' , ''YYYYMMDD'')
7602 OR
7603 dtecre>=TO_DATE(''' ||
7604 TO_CHAR(DTELASTWRITE, 'YYYYMMDD') || ''' , ''YYYYMMDD'')
7605 )
7606 ';
7607
7608 DROP_TAB_IFEXISTS('XOUT_V_INCASSI');
7609 SQL_STRING := 'CREATE TABLE XOUT_V_INCASSI AS SELECT /*+ INDEX(t) */
7610 t090.dtedep,t090.codcur,t090.dtecre,t090.dtemod,t090.valdep,t090.codaccountsrc,
7611 t090.desban,t.* from t094encbal t inner join t090deposit t090
7612 on t090.numdep=t.numdep and t.codusr=t090.codusr ' ||
7613 STRFILTERDATE;
7614
7615 --- INSERISCO PRIMA I CLIENTI REALI, NON CREATI PER RIEMPIRE LIVELLI MANCANTI
7616 EXEC_SQL(SQL_STRING);
7617 COMMIT;
7618 END;
7619 /*********************************************** */
7620 /*
7621
7622 UPDATE_CODUSR: aggiorna il campo CODUSER nella party DIV
7623 Necessita delle tabelle tb_tmp_local,tb_tmp_national,tb_tmp_regional
7624 e tb_tmp_utprovvig
7625
7626
7627 PROCEDURE UPDATE_CODUSR IS
7628 BEGIN
7629 --------------local
7630 UPDATE T041PARTYDIV T2
7631 SET T2.CODUSR2 = (SELECT MAX(T.LOCAL_ID)
7632 FROM TB_TMP_LOCAL T
7633 WHERE T2.CODPARTY = T.CLIENTEP_ID)
7634 WHERE EXISTS
7635 (SELECT T.* FROM TB_TMP_LOCAL T WHERE T2.CODPARTY = T.CLIENTEP_ID);
7636
7637 ---------- national
7638 UPDATE T041PARTYDIV T2
7639 SET T2.CODUSR2 = (SELECT MAX(T.RESP_RUOLO1)
7640 FROM TB_TMP_NATIONAL T
7641 WHERE T2.CODPARTY = 'GR' || T.GRUPPO)
7642 WHERE EXISTS (SELECT T.*
7643 FROM TB_TMP_NATIONAL T
7644 WHERE T2.CODPARTY = 'GR' || T.GRUPPO);
7645
7646 ------------ regional
7647 UPDATE T041PARTYDIV T2
7648 SET T2.CODUSR2 = (SELECT MAX(T.RESP_RUOLO3)
7649 FROM TB_TMP_REGIONAL T
7650 WHERE T2.CODPARTY = 'CT' || T.CLIENTE_ID)
7651 WHERE EXISTS (SELECT T.*
7652 FROM TB_TMP_REGIONAL T
7653 WHERE T2.CODPARTY = 'CT' || T.CLIENTE_ID);
7654
7655 ------------ utprovvig
7656 UPDATE T041PARTYDIV T2
7657 SET T2.CODUSR6 = (SELECT MAX(T.RESP_RUOLO6)
7658 FROM TB_TMP_UTPROVVIG T
7659 WHERE T2.CODPARTY = T.CODICECF)
7660 WHERE (SELECT COUNT(*)
7661 FROM TB_TMP_UTPROVVIG T
7662 WHERE T2.CODPARTY = T.CODICECF) = 1;
7663
7664 UPDATE T041PARTYDIV T2
7665 SET T2.CODUSR7 = (SELECT MAX(T.RESP_RUOLO6)
7666 FROM TB_TMP_UTPROVVIG T
7667 WHERE T2.CODPARTY = T.CODICECF)
7668 WHERE (SELECT COUNT(*)
7669 FROM TB_TMP_UTPROVVIG T
7670 WHERE T2.CODPARTY = T.CODICECF) = 2;
7671
7672 END UPDATE_CODUSR;
7673 */
7674 /****************************************************************
7675 UPDATE_DATATYPES: aggiorna i campi tipi di dato nella INT_TABFIELDS
7676 ******************************************************************/
7677 PROCEDURE UPDATE_DATATYPES IS
7678
7679 CURSOR CUR_FIELDS(VARCODOPER VARCHAR2) IS
7680 SELECT *
7681
7682 FROM TB_INT_TABFIELDS T
7683 WHERE UPPER(TRIM(T.CODOPER)) = UPPER(TRIM(VARCODOPER));
7684
7685 CURSOR CUR_CODOPER IS
7686 SELECT * FROM TB_INT_PROCESSI;
7687
7688 ICOUNT INT;
7689
7690 BEGIN
7691
7692 UPDATE TB_INT_TABFIELDS T
7693
7694 SET T.FLDTOTYPE = (SELECT C.DATA_TYPE
7695 FROM USER_TAB_COLUMNS C
7696 WHERE UPPER(TRIM(T.TABLENAME)) = C.TABLE_NAME
7697 AND UPPER(TRIM(T.FIELDNAME)) = C.COLUMN_NAME)
7698
7699 ,
7700 T.FLDFRTYPE = (SELECT C.DATA_TYPE
7701 FROM USER_TAB_COLUMNS C
7702 WHERE UPPER(TRIM(T.TABFROM)) = C.TABLE_NAME
7703 AND UPPER(TRIM(T.FIELDFROM)) = C.COLUMN_NAME),
7704 T.FLDTOLENGTH = (SELECT C.DATA_LENGTH
7705 FROM USER_TAB_COLUMNS C
7706 WHERE UPPER(TRIM(T.TABLENAME)) = C.TABLE_NAME
7707 AND UPPER(TRIM(T.FIELDNAME)) = C.COLUMN_NAME),
7708
7709 T.FLDFRLENGTH = (SELECT C.DATA_LENGTH
7710 FROM USER_TAB_COLUMNS C
7711 WHERE UPPER(TRIM(T.TABFROM)) = C.TABLE_NAME
7712 AND UPPER(TRIM(T.FIELDFROM)) = C.COLUMN_NAME) /*,
7713
7714 t.iskey = (SELECT POSITION/POSITION FROM USER_CONS_COLUMNS C WHERE
7715 upper(trim(c.TABLE_NAME))=upper(trim(t.tablename)) and
7716 upper(trim(c.COLUMN_NAME))=upper(trim(t.fieldname))
7717 AND POSITION IS NOT NULL AND POSITION >0
7718 ) */
7719 ;
7720
7721 FOR ROW_CUR IN CUR_CODOPER LOOP
7722 FOR ROW_FIELDS IN CUR_FIELDS(ROW_CUR.CODOPER) LOOP
7723 SELECT COUNT(*)
7724 INTO ICOUNT
7725 FROM USER_CONS_COLUMNS C
7726 WHERE C.TABLE_NAME = UPPER(TRIM(ROW_CUR.TABLENAME))
7727 AND C.COLUMN_NAME = UPPER(TRIM(ROW_FIELDS.FIELDNAME))
7728 AND C.POSITION IS NOT NULL
7729 AND C.POSITION > 0;
7730
7731 IF ICOUNT > 0 THEN
7732 UPDATE TB_INT_TABFIELDS T
7733 SET T.ISKEY = 1
7734 WHERE UPPER(TRIM(ROW_CUR.TABLENAME)) = UPPER(TRIM(T.TABLENAME))
7735 AND UPPER(TRIM(ROW_FIELDS.FIELDNAME)) =
7736 UPPER(TRIM(T.FIELDNAME));
7737
7738 COMMIT;
7739 END IF;
7740
7741 END LOOP;
7742
7743 END LOOP;
7744
7745 END;
7746 /****************************
7747 Aggiorna il campo DTELINK della t041 con la data del piu vecchio l
7748 ****************************/
7749 PROCEDURE UPDATE_DTELINK(VARCODPARTY VARCHAR2 := '') IS
7750 BEGIN
7751 IF TRIM(VARCODPARTY) IS NULL THEN
7752 UPDATE T041PARTYDIV T
7753 SET T.z_DTELINK = (SELECT MIN(Tb0042.DTEstart)
7754 FROM Tb0042relations_STATIC Tb0042
7755 WHERE Tb0042.CODnode = T.CODPARTY);
7756
7757 ELSE
7758 UPDATE T041PARTYDIV T
7759 SET T.z_DTELINK = (SELECT MIN(Tb0042.DTEstart)
7760 FROM Tb0042relations_STATIC Tb0042
7761 WHERE Tb0042.CODnode = T.CODPARTY)
7762 WHERE T.CODPARTY = VARCODPARTY;
7763
7764 END IF;
7765
7766 END;
7767 /*----------------------- UPDATE_ROW_READ ----------------------------
7768 procedura di aggiornamento riga letta
7769 ------------------------------------------------------------------*/
7770 PROCEDURE UPDATE_ROW_READ(UKID NUMBER,
7771 TABPREFIX VARCHAR2,
7772 TABLENAME VARCHAR2,
7773 VARENHV VARCHAR2 := 'PD') IS
7774 STRSQL VARCHAR2(4000);
7775 STRHOST VARCHAR2(50);
7776 STRPROG VARCHAR2(50);
7777 STRDATE VARCHAR2(50);
7778 STRTIME VARCHAR2(50);
7779 STRENV VARCHAR2(50);
7780 STRUSER VARCHAR2(50);
7781
7782 BEGIN
7783 --strLink:='';
7784 SELECT SUBSTR(user, 1, 10)
7785 INTO STRUSER
7786 FROM DUAL;
7787
7788 STRPROG := GET_PROG_NAME;
7789 STRDATE := GREG_TO_GIUL(SYSDATE);
7790 STRTIME := TO_CHAR(SYSDATE, 'HH24MISS');
7791 STRENV := TRIM(VARENHV);
7792 STRHOST := GET_HOST;
7793 ---- impostando il paramentro XTUKID al valore del processo
7794 STRSQL := ' UPDATE /*+ index(t) */ ' || TABLENAME || ' t
7795 set t.' || TABPREFIX || 'user=''' || STRUSER || ''',
7796 t.' || TABPREFIX || 'pid=''' || STRPROG || ''',
7797 t.' || TABPREFIX || 'jobn= ''' || STRHOST || ''',
7798 t.' || TABPREFIX || 'upmj= ''' || STRDATE ||
7799 ''' ,
7800 t.' || TABPREFIX || 'upmt=''' || STRTIME || ''',
7801 t.' || TABPREFIX || 'prfl=''Y''
7802 where TRIM(UPPER(t.' || TABPREFIX || 'enhv))= ''' ||
7803 STRENV || '''
7804 and t.' || TABPREFIX || 'ukid=' || TO_CHAR(UKID) || ' ';
7805
7806 EXEC_SQL(STRSQL);
7807
7808 EXCEPTION
7809 WHEN OTHERS THEN
7810 NULL;
7811
7812 END;
7813 END Z_PKG_XTEL_IMPORT;
7814
7815
7816/*EOS*/