[Home] [Help]
PACKAGE BODY: APPS.CSF_SPATIAL_DATALOAD_PVT
Source
1 PACKAGE BODY CSF_SPATIAL_DATALOAD_PVT AS
2 /* $Header: CSFVSDLB.pls 120.6 2011/06/21 08:56:11 srguntur noship $ */
3
4 /*
5 The following procedure is used to print the log messages.
6 */
7 PROCEDURE dbgl (p_msg_data VARCHAR2)
8 IS
9 i PLS_INTEGER;
10 l_msg VARCHAR2 (300);
11 BEGIN
12 i := 1;
13 LOOP
14 l_msg := SUBSTR (p_msg_data, i, 255);
15 EXIT WHEN l_msg IS NULL;
16 EXECUTE IMMEDIATE g_debug_p
17 USING l_msg;
18 i := i + 255;
19 END LOOP;
20 END dbgl;
21 /*
22 The following procedure is used to print the log messages.
23 */
24 PROCEDURE put_stream (p_handle IN NUMBER, p_msg_data IN VARCHAR2)
25 IS
26 BEGIN
27 IF p_handle = 0
28 THEN
29 dbgl (p_msg_data);
30 ELSIF p_handle = -1
31 THEN
32 IF g_debug
33 THEN
34 dbgl (p_msg_data);
35 END IF;
36 ELSE
37 fnd_file.put_line (p_handle, p_msg_data);
38 END IF;
39 END put_stream;
40
41 /*
42 The following procedure is used to print the log messages.
43 */
44 /*PROCEDURE CSF_LOG( l_log IN VARCHAR2 )
45 IS
46 BEGIN
47 dbms_output.put_line( l_log );
48 EXCEPTION
49 WHEN OTHERS THEN
50 RETURN;
51 END CSF_LOG; */
52 /*
53 The following procedure drops the index with the help of ad_ddl.do_ddl.
54 */
55 PROCEDURE DROP_INDEX (
56 p_applsys_schema in VARCHAR2 ,
57 p_app_short_name in VARCHAR2 ,
58 p_table in VARCHAR2 ,
59 p_index in VARCHAR2 ,
60 errbuf OUT NOCOPY VARCHAR2,
61 retcode OUT NOCOPY VARCHAR2
62 )
63 IS
64 BEGIN
65
66 ad_ddl.do_ddl(
67 applsys_schema => p_applsys_schema,
68 application_short_name => p_app_short_name,
69 statement_type => AD_DDL.DROP_INDEX,
70 statement => 'DROP INDEX ' || p_index ,
71 object_name => p_table
72 );
73
74 --put_stream(g_output, 'Index '|| p_index || ' dropped successfully');
75 put_stream(g_log,'Index '|| p_index || ' dropped successfully');
76 --dbms_output.put_line('Index '|| p_index || ' dropped successfully');
77 --dbms_output.put_line('Index '|| p_index || ' dropped successfully');
78
79
80 EXCEPTION
81 WHEN OTHERS THEN
82 IF SQLCODE = -01418 THEN
83 retcode := 1;
84 put_stream(g_log, 'Index ' || p_index || ' on table ' || p_table || ' does not exist');
85 put_stream(g_output, 'Index ' || p_index || ' on table ' || p_table || ' does not exist');
86 --dbms_output.put_line('Index ' || p_index || ' on table ' || p_table || ' does not exist');
87 ELSE
88 retcode := 1;
89 errbuf := SQLERRM;
90 put_stream(g_output, 'Dropping Index ' || p_index || ' failed : ' || SQLCODE||'-'||SQLERRM );
91 put_stream(g_log, 'Dropping Index ' || p_index || ' failed : ' ||SQLCODE||'-'|| SQLERRM );
92 END IF ;
93 END DROP_INDEX;
94
95 PROCEDURE CREATE_INDEX (
96 p_applsys_schema in VARCHAR2 ,
97 p_app_short_name in VARCHAR2 ,
98 p_table in VARCHAR2 ,
99 p_index in VARCHAR2 ,
100 p_columns in char30_arr ,
101 p_create_sql in VARCHAR2,
102 errbuf OUT NOCOPY VARCHAR2,
103 retcode OUT NOCOPY VARCHAR2
104 )
105 IS
106 l_create_index BOOLEAN ;
107 l_column_name VARCHAR2(30);
108
109 CURSOR index_col_cur
110 IS
111 SELECT column_name
112 FROM user_ind_columns
113 WHERE table_name = p_table
114 AND index_name = p_index
115 ORDER BY column_position ;
116
117 BEGIN
118 open index_col_cur ;
119 FOR i IN p_columns.FIRST..p_columns.COUNT
120 LOOP
121 FETCH index_col_cur INTO l_column_name ;
122 EXIT WHEN index_col_cur%NOTFOUND ;
123 IF l_column_name <> UPPER( p_columns(i) ) THEN
124 l_create_index := TRUE ;
125 exit ;
126 END IF;
127 END LOOP;
128
129 IF index_col_cur%ROWCOUNT = 0 THEN
130 l_create_index := TRUE ;
131 END IF;
132
133 CLOSE index_col_cur ;
134
135 IF l_create_index THEN
136 DROP_INDEX ( p_applsys_schema, p_app_short_name, p_table, p_index, errbuf, retcode );
137 ad_ddl.do_ddl(
138 applsys_schema => p_applsys_schema,
139 application_short_name => p_app_short_name,
140 statement_type => AD_DDL.CREATE_INDEX,
141 statement => p_create_sql,
142 object_name => p_table
143 );
144
145 --put_stream(g_output, 'Index '|| p_index || ' created successfully' );
146 put_stream(g_log, 'Index '|| p_index || ' created successfully' );
147 --dbms_output.put_line('Index '|| p_index || ' created successfully' );
148
149 ELSE
150 put_stream(g_log, 'Index ' || p_index || ' on table ' || p_table || ' exists' );
151 --dbms_output.put_line('Index ' || p_index || ' on table ' || p_table || ' exists' );
152 END IF;
153
154 EXCEPTION
155 WHEN OTHERS THEN
156 IF SQLCODE = -01408 THEN
157 put_stream(g_log, 'Index ' || p_index || ' on table ' || p_table || ' already exists' );
158 --dbms_output.put_line( 'Index ' || p_index || ' on table ' || p_table || ' already exists' );
159 ELSIF SQLCODE = -00955 THEN
160 put_stream(g_log, 'Index ' || p_index || ' on table ' || p_table || ' already exists');
161 --dbms_output.put_line('Index ' || p_index || ' on table ' || p_table || ' already exists');
162 ELSE
163 retcode := 1;
164 errbuf := SQLERRM;
165 put_stream(g_log, 'Index Creation for ' || p_index || ' failed : ' ||SQLCODE||'-'|| SQLERRM );
166 put_stream(g_output, 'Index Creation for ' || p_index || ' failed : ' ||SQLCODE||'-'|| SQLERRM );
167 RAISE FND_API.G_EXC_ERROR;
168 --dbms_output.put_line( 'Index Creation for ' || p_index || ' failed : ' || SQLERRM );
169 END IF ;
170
171 END CREATE_INDEX;
172
173
174
175 PROCEDURE DROP_INDEXES(
176 p_data_set_name IN VARCHAR2,
177 p_index_type IN VARCHAR2,
178 errbuf OUT NOCOPY VARCHAR2,
179 retcode OUT NOCOPY VARCHAR2 )
180 IS
181 CURSOR CSF_GET_SPATIAL_INDEXES (p_index_type in VARCHAR2)
182 IS
183 SELECT INDEX_NAME,
184 table_name
185 FROM CSF_SPATIAL_INDEX_STAT_M
186 WHERE index_type = p_index_type AND index_type<>'MAT';
187
188 l_index_name VARCHAR2(100);
189 l_applsys_schema VARCHAR2(10);
190 l_app_short_name VARCHAR2(20);
191 l_table VARCHAR2(60);
192 l_data_set_name VARCHAR2(40);
193
194 BEGIN
195
196 l_applsys_schema := upper( 'APPS' ) ;
197 l_data_set_name := p_data_set_name;
198
199 OPEN CSF_GET_SPATIAL_INDEXES (p_index_type);
200 LOOP
201 FETCH CSF_GET_SPATIAL_INDEXES
202 INTO l_index_name,
203 l_table;
204 EXIT WHEN CSF_GET_SPATIAL_INDEXES%NOTFOUND;
205 -- Materialized view indexes are created in APPS schema.
206 -- All other indexes are created in CSF schema
207 IF p_index_type = 'MAT' THEN
208 l_app_short_name := upper( 'APPS' ) ;
209 ELSE
210 l_app_short_name := upper( 'CSF' ) ;
211 END IF;
212
213 IF p_index_type <> 'WOM' THEN
214 IF ( p_index_type = 'MAT' AND l_table NOT LIKE 'CSF_WOM%' ) THEN
215 l_index_name := l_index_name || l_data_set_name;
216 l_table := l_table || l_data_set_name ||'_V';
217 ELSIF l_table NOT LIKE 'CSF_WOM%' THEN
218 l_index_name := l_index_name || l_data_set_name;
219 l_table := l_table || l_data_set_name;
220 END IF;
221 END IF;
222
223 DROP_INDEX ( l_applsys_schema, l_app_short_name, l_table , l_index_name, errbuf, retcode );
224
225 END LOOP;
226
227 CLOSE CSF_GET_SPATIAL_INDEXES;
228
229 EXCEPTION
230 WHEN NO_DATA_FOUND
231 THEN
232 CLOSE CSF_GET_SPATIAL_INDEXES;
233 retcode := 1;
234 errbuf := SQLERRM;
235 put_stream(g_log,'DROP_INDEXES PROCEDURE HAS FAILED FOR '|| p_index_type || 'TYPE INDEXES' || SQLERRM);
236 put_stream(g_output,'DROP_INDEXES PROCEDURE HAS FAILED FOR '|| p_index_type || 'TYPE INDEXES' || SQLERRM);
237 RAISE FND_API.G_EXC_ERROR;
238
239 WHEN OTHERS
240 THEN
241 retcode := 1;
242 errbuf := SQLERRM;
243 put_stream(g_log,'DROP_INDEXES PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
244 CLOSE CSF_GET_SPATIAL_INDEXES;
245 RAISE FND_API.G_EXC_ERROR;
246
247 END DROP_INDEXES;
248
249
250 PROCEDURE REFRESH_MAT_VIEW (
251 p_mv_name in VARCHAR2 ,
252 errbuf OUT NOCOPY VARCHAR2 ,
253 retcode OUT NOCOPY VARCHAR2 )
254 IS
255 BEGIN
256 DBMS_MVIEW.REFRESH(p_mv_name);
257 put_stream(g_output, 'Refresh of ' || p_mv_name || ' is successfull ');
258 put_stream(g_log, 'Refresh of ' || p_mv_name || ' is successfull ');
259
260 EXCEPTION
261 WHEN OTHERS THEN
262 retcode := 1;
263 errbuf := SQLERRM;
264 put_stream(g_output, 'Refresh of ' || p_mv_name || ' failed : ' ||SQLCODE||'-'|| SQLERRM );
265 put_stream(g_log, 'Refresh of ' || p_mv_name || ' failed : ' || SQLCODE||'-'||SQLERRM );
266 RAISE FND_API.G_EXC_ERROR;
267 END REFRESH_MAT_VIEW;
268
269 PROCEDURE REFRESH_MAT_VIEWS(
270 p_data_set_name IN VARCHAR2,
271 errbuf OUT NOCOPY VARCHAR2,
272 retcode OUT NOCOPY VARCHAR2 )
273 IS
274 l_data_set_name VARCHAR2(40);
275 BEGIN
276
277 put_stream(g_log, ' ' );
278 put_stream(g_log, 'Start of Procedure REFRESH_MAT_VIEWS ' );
279 put_stream(g_log, '================================================ ' );
280
281 l_data_set_name := p_data_set_name;
282
283 REFRESH_MAT_VIEW('CSF_MD_ADM_BOUNDS_MAT' ||l_data_set_name || '_V' , errbuf, retcode);
284 REFRESH_MAT_VIEW('CSF_MD_HYDROS_MAT' ||l_data_set_name || '_V' , errbuf, retcode);
285 REFRESH_MAT_VIEW('CSF_MD_LAND_USES_MAT' ||l_data_set_name || '_V' , errbuf, retcode);
286 REFRESH_MAT_VIEW('CSF_MD_POIS_MAT' ||l_data_set_name || '_V' , errbuf, retcode);
287 REFRESH_MAT_VIEW('CSF_MD_RAIL_SEGS_MAT' ||l_data_set_name || '_V' , errbuf, retcode);
288 REFRESH_MAT_VIEW('CSF_MD_RD_SEGS_FUN0' ||l_data_set_name || '_V' , errbuf, retcode);
289 REFRESH_MAT_VIEW('CSF_MD_RD_SEGS_FUN1' ||l_data_set_name || '_V' , errbuf, retcode);
290 REFRESH_MAT_VIEW('CSF_MD_RD_SEGS_FUN2' ||l_data_set_name || '_V' , errbuf, retcode);
291 REFRESH_MAT_VIEW('CSF_MD_RD_SEGS_FUN3' ||l_data_set_name || '_V' , errbuf, retcode);
292 REFRESH_MAT_VIEW('CSF_MD_RD_SEGS_FUN4' ||l_data_set_name || '_V' , errbuf, retcode);
293 -- WOM mat view is common for all the datasets.
294 REFRESH_MAT_VIEW('CSF_WOM_ROAD_HIWAY_MAT_V' , errbuf, retcode);
295
296 put_stream(g_log, 'The procedure REFRESH_MAT_VIEWS has completed successfully');
297 put_stream(g_log, 'Materialized view refresh is successful');
298
299 EXCEPTION
300 WHEN OTHERS THEN
301 put_stream(g_output,'REFRESH_MAT_VIEW PROCEDURE HAS FAILED' ||SQLCODE||'-'|| SQLERRM );
302 put_stream(g_log, 'REFRESH_MAT_VIEW PROCEDURE HAS FAILED' || SQLCODE||'-'||SQLERRM);
303 retcode := 1;
304 errbuf := SQLERRM;
305 RAISE FND_API.G_EXC_ERROR;
306 --RETURN ;
307 END REFRESH_MAT_VIEWS;
308
309 PROCEDURE COMPUTE_STATISTICS(
310 p_data_set_name IN VARCHAR2,
311 errbuf OUT NOCOPY VARCHAR2,
312 retcode OUT NOCOPY VARCHAR2 )
313 IS
314 l_data_set_name VARCHAR2(40);
315 BEGIN
316
317 put_stream(g_log, ' ' );
318 put_stream(g_log, 'Start of Procedure COMPUTE_STATISTICS ' );
319 put_stream(g_log, '================================================ ' );
320
321 l_data_set_name := p_data_set_name;
322
323 -- Delete the statistics on Map tables.
324 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_BLOCKS' ||l_data_set_name, 'DELETE');
325 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_NAMES' ||l_data_set_name, 'DELETE');
326 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACES' ||l_data_set_name, 'DELETE');
327 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACE_NAMES' ||l_data_set_name, 'DELETE');
328 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACE_POSTCS' ||l_data_set_name, 'DELETE');
329 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POIS' ||l_data_set_name, 'DELETE');
330 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POI_NAMES' ||l_data_set_name, 'DELETE');
331 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POSTCODES' ||l_data_set_name, 'DELETE');
332 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGMENTS' ||l_data_set_name, 'DELETE');
333 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_NAMES' ||l_data_set_name, 'DELETE');
334 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_PLACES' ||l_data_set_name, 'DELETE');
335 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_POSTS' ||l_data_set_name, 'DELETE');
336
337 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_ADM_BOUNDS' ||l_data_set_name, 'DELETE');
338 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_HYDROS' ||l_data_set_name, 'DELETE');
339 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_LAND_USES' ||l_data_set_name, 'DELETE');
340 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_NAMES' ||l_data_set_name, 'DELETE');
341 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_POIS' ||l_data_set_name, 'DELETE');
342 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_POI_NM_ASGNS' ||l_data_set_name, 'DELETE');
343 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RAIL_SEGS' ||l_data_set_name, 'DELETE');
344 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RDSEG_NM_ASGNS' ||l_data_set_name, 'DELETE');
345 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RD_SEGS' ||l_data_set_name, 'DELETE');
346 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SDM_CTRY_PROFILES' ||l_data_set_name, 'DELETE');
347 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STAT_M' ||l_data_set_name, 'DELETE');
348 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STAT_TILES_M' ||l_data_set_name, 'DELETE');
349 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STREET_TYPES_M' ||l_data_set_name, 'DELETE');
350 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_VER_M' ||l_data_set_name, 'DELETE');
351
352 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_BINARY_MAPS' ||l_data_set_name, 'DELETE');
353 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_BINARY_TILES' ||l_data_set_name, 'DELETE');
354 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_CONDITIONS' ||l_data_set_name, 'DELETE');
355 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_COND_SEGS' ||l_data_set_name, 'DELETE');
356 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_INTERVALS' ||l_data_set_name, 'DELETE');
357 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_NODES' ||l_data_set_name, 'DELETE');
358 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_RDBLCK_INTVLS' ||l_data_set_name, 'DELETE');
359 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_RDBLCK_SGMNTS' ||l_data_set_name, 'DELETE');
360 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_ROADBLOCKS' ||l_data_set_name, 'DELETE');
364
361 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_SEGMENTS' ||l_data_set_name, 'DELETE');
362 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_SEGM_NODES' ||l_data_set_name, 'DELETE');
363 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_TILES' ||l_data_set_name, 'DELETE');
365 put_stream(g_log, 'Deleted the statistics on all spatial tables');
366
367 -- Re-compute the statistics on Map tables.
368 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_BLOCKS' ||l_data_set_name, 'COMPUTE');
369 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_NAMES' ||l_data_set_name, 'COMPUTE');
370 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACES' ||l_data_set_name, 'COMPUTE');
371 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACE_NAMES' ||l_data_set_name, 'COMPUTE');
372 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_PLACE_POSTCS' ||l_data_set_name, 'COMPUTE');
373 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POIS' ||l_data_set_name, 'COMPUTE');
374 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POI_NAMES' ||l_data_set_name, 'COMPUTE');
375 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_POSTCODES' ||l_data_set_name, 'COMPUTE');
376 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGMENTS' ||l_data_set_name, 'COMPUTE');
377 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_NAMES' ||l_data_set_name, 'COMPUTE');
378 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_PLACES' ||l_data_set_name, 'COMPUTE');
379 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_LF_ROADSEGM_POSTS' ||l_data_set_name, 'COMPUTE');
380
381 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_ADM_BOUNDS' ||l_data_set_name, 'COMPUTE');
382 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_HYDROS' ||l_data_set_name, 'COMPUTE');
383 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_LAND_USES' ||l_data_set_name, 'COMPUTE');
384 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_NAMES' ||l_data_set_name, 'COMPUTE');
385 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_POIS' ||l_data_set_name, 'COMPUTE');
386 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_POI_NM_ASGNS' ||l_data_set_name, 'COMPUTE');
387 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RAIL_SEGS' ||l_data_set_name, 'COMPUTE');
388 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RDSEG_NM_ASGNS' ||l_data_set_name, 'COMPUTE');
389 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_MD_RD_SEGS' ||l_data_set_name, 'COMPUTE');
390 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SDM_CTRY_PROFILES' ||l_data_set_name, 'COMPUTE');
391 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STAT_M' ||l_data_set_name, 'COMPUTE');
392 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STAT_TILES_M' ||l_data_set_name, 'COMPUTE');
393 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_STREET_TYPES_M' ||l_data_set_name, 'COMPUTE');
394 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_SPATIAL_VER_M' ||l_data_set_name, 'COMPUTE');
395
396 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_BINARY_MAPS' ||l_data_set_name, 'COMPUTE');
397 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_BINARY_TILES' ||l_data_set_name, 'COMPUTE');
398 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_CONDITIONS' ||l_data_set_name, 'COMPUTE');
399 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_COND_SEGS' ||l_data_set_name, 'COMPUTE');
400 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_INTERVALS' ||l_data_set_name, 'COMPUTE');
401 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_NODES' ||l_data_set_name, 'COMPUTE');
402 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_RDBLCK_INTVLS' ||l_data_set_name, 'COMPUTE');
403 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_RDBLCK_SGMNTS' ||l_data_set_name, 'COMPUTE');
404 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_ROADBLOCKS' ||l_data_set_name, 'COMPUTE');
405 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_SEGMENTS' ||l_data_set_name, 'COMPUTE');
406 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_SEGM_NODES' ||l_data_set_name, 'COMPUTE');
407 DBMS_DDL.analyze_object('TABLE', 'CSF', 'CSF_TDS_TILES' ||l_data_set_name, 'COMPUTE');
408
409 put_stream(g_log, 'Re-computed the statistics on spatial tables');
410 put_stream(g_output, 'Re-computed the statistics on spatial tables');
411 put_stream(g_log, 'The procedure COMPUTE_STATISTICS has completed successfully');
412
413 EXCEPTION
414 WHEN OTHERS THEN
415 retcode := 1;
416 errbuf := SQLERRM;
417 put_stream(g_output, 'COMPUTE_STATISTICS PROCEDURE HAS FAILED' ||SQLCODE||'-'|| SQLERRM);
418 put_stream(g_log, 'COMPUTE_STATISTICS PROCEDURE HAS FAILED' || SQLCODE||'-'||SQLERRM);
419 RAISE FND_API.G_EXC_ERROR;
420
421 END COMPUTE_STATISTICS;
422
423 PROCEDURE CHECK_TABLE_ROW_COUNT(
424 p_data_set_name IN VARCHAR2,
425 errbuf OUT NOCOPY VARCHAR2,
426 retcode OUT NOCOPY VARCHAR2 )
427 IS
428
429 /* CURSOR csf_spatial_stat_m_cur
430 IS
431 SELECT table_name, num_records
432 FROM csf_spatial_stat_m; */
433
434 TYPE csf_spatial_stat_ref_cur IS REF CURSOR;
435 csf_spatial_stat_m_cur csf_spatial_stat_ref_cur;
436
437 CURSOR TAB_Cur (p_table_name TAB.TNAME%TYPE)
438 IS
439 SELECT COUNT(1)
440 FROM TAB
441 WHERE TNAME = p_table_name;
442
443 TYPE row_count_refcur IS REF CURSOR;
444 row_count_cur row_count_refcur;
445 v_table_name VARCHAR2 (100);
446 v_record_count NUMBER (10);
447 v_actual_record_count NUMBER (10);
448 v_query VARCHAR2 (2000);
449 v_table_exists NUMBER(10);
450 flagCount NUMBER (10) DEFAULT 0;
451 l_data_set_name VARCHAR2(40);
452
453 BEGIN
454
455 put_stream(g_log, ' ' );
459 l_data_set_name := p_data_set_name;
456 put_stream(g_log, 'Start of Procedure CHECK_TABLE_ROW_COUNT ' );
457 put_stream(g_log, '================================================ ' );
458
460
461 v_query := 'SELECT table_name, num_records FROM csf_spatial_stat_m' || l_data_set_name ;
462 OPEN csf_spatial_stat_m_cur for v_query;
463 LOOP
464 FETCH csf_spatial_stat_m_cur
465 INTO v_table_name, v_record_count;
466 EXIT WHEN csf_spatial_stat_m_cur%NOTFOUND;
467
468 v_table_name := v_table_name || l_data_set_name;
469
470 OPEN TAB_Cur(v_table_name);
471 FETCH TAB_Cur INTO v_table_exists;
472 CLOSE TAB_Cur;
473
474 IF v_table_exists = 0 THEN
475 put_stream(g_log, 'TABLE ' || v_table_name || ' DOES NOT EXIST');
476 ELSE
477 v_query := 'SELECT COUNT(1) FROM ' || v_table_name;
478
479 OPEN row_count_cur for v_query;
480 FETCH row_count_cur INTO v_actual_record_count;
481 CLOSE row_count_cur;
482 --dbms_output.put_line(v_table_name || ' Actual Count: '|| v_actual_record_count|| 'Table Count: '|| v_record_count );
483 IF v_actual_record_count <> v_record_count THEN
484 put_stream(g_log, v_table_name || ' is not having correct count. Actual Count: '|| v_actual_record_count|| 'Table Count: '|| v_record_count );
485 --dbms_output.put_line(v_table_name || ' is not having correct count. Actual Count: '|| v_actual_record_count|| 'Table Count: '|| v_record_count );
486 flagCount := flagCount + 1;
487 END IF;
488 END IF;
489 END LOOP;
490 CLOSE csf_spatial_stat_m_cur;
491
492 IF flagCount = 0 THEN
493 put_stream(g_log, 'NO MISMATCH IN TABLE ROW COUNT -- ALL THE TABLES HAVE BEEN LOADED PROPERLY ');
494 put_stream(g_output, 'NO MISMATCH IN TABLE ROW COUNT -- ALL THE TABLES HAVE BEEN LOADED PROPERLY ');
495 --dbms_output.put_line('NO MISMATCH IN TABLE ROW COUNT -- ALL THE TABLES HAVE BEEN LOADED PROPERLY ');
496 ELSE
497 put_stream(g_log, 'FOUND MISMATCH IN TABLE ROW COUNT');
498 put_stream(g_output, 'FOUND MISMATCH IN TABLE ROW COUNT');
499 RAISE FND_API.G_EXC_ERROR;
500 END IF;
501
502 put_stream(g_log, 'The procedure CHECK_TABLE_ROW_COUNT has completed successfully');
503 --dbms_output.put_line('The procedure CHECK_TABLE_ROW_COUNT has completed successfully');
504 EXCEPTION
505 WHEN NO_DATA_FOUND
506 THEN
507 CLOSE csf_spatial_stat_m_cur;
508 retcode := 1;
509 errbuf := SQLERRM;
510 put_stream(g_log,'CHECK_TABLE_ROW_COUNT PROCEDURE HAS FAILED '|| SQLCODE||'-'||SQLERRM);
511 put_stream(g_output,'CHECK_TABLE_ROW_COUNT PROCEDURE HAS FAILED '|| SQLCODE||'-'||SQLERRM);
512 RAISE FND_API.G_EXC_ERROR;
513
514 WHEN OTHERS
515 THEN
516 CLOSE csf_spatial_stat_m_cur;
517 retcode := 1;
518 errbuf := SQLERRM;
519 put_stream(g_log,'CHECK_TABLE_ROW_COUNT PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
520 put_stream(g_output,'CHECK_TABLE_ROW_COUNT PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
521 RAISE FND_API.G_EXC_ERROR;
522
523 END CHECK_TABLE_ROW_COUNT;
524
525 PROCEDURE VALIDATE_BLOB_SIZE(
526 p_data_set_name IN VARCHAR2,
527 errbuf OUT NOCOPY VARCHAR2,
528 retcode OUT NOCOPY VARCHAR2 )
529 IS
530 TYPE VALIDATE_BLOB_SIZE_CUR_REF IS REF CURSOR;
531 VALIDATE_BLOB_SIZE_CUR VALIDATE_BLOB_SIZE_CUR_REF;
532
533 TYPE CSF_SPATIAL_STAT_LENGTH_REF IS REF CURSOR;
534 CSF_SPATIAL_STAT_LENGTH_CHECK CSF_SPATIAL_STAT_LENGTH_REF;
535
536 v_query1 VARCHAR2 (2000);
537 v_query2 VARCHAR2 (2000);
538
539 v_binary_tile_id NUMBER(10);
540 v_segment_lob_size NUMBER(10);
541 v_node_lob_size NUMBER(10);
542 v_actual_segment_lob_size NUMBER(10);
543 v_actual_node_lob_size NUMBER(10);
544 flagSegment NUMBER(10) DEFAULT 0;
545 flagNode NUMBER(10) DEFAULT 0;
546
547 l_data_set_name VARCHAR2(40);
548 BEGIN
549
550 put_stream(g_log, ' ' );
551 put_stream(g_log, 'Start of Procedure VALIDATE_BLOB_SIZE ' );
552 put_stream(g_log, '================================================ ' );
553
554 l_data_set_name := p_data_set_name;
555
556 v_query1 := 'SELECT BINARY_TILE_ID, SEGMENT_LOB_SIZE, NODE_LOB_SIZE
557 FROM CSF_SPATIAL_STAT_TILES_M' || l_data_set_name;
558
559 OPEN CSF_SPATIAL_STAT_LENGTH_CHECK FOR v_query1;
560 LOOP
561 FETCH CSF_SPATIAL_STAT_LENGTH_CHECK INTO v_binary_tile_id, v_segment_lob_size, v_node_lob_size;
562 EXIT
563 WHEN CSF_SPATIAL_STAT_LENGTH_CHECK%NOTFOUND;
564
565 v_query2 := 'SELECT dbms_lob.getlength(SEGMENTS), dbms_lob.getlength(NODES)
566 FROM CSF_TDS_BINARY_TILES'|| l_data_set_name ||
567 ' WHERE BINARY_TILE_ID = ' || v_binary_tile_id ;
568
569 OPEN VALIDATE_BLOB_SIZE_CUR FOR v_query2;
570 FETCH VALIDATE_BLOB_SIZE_CUR INTO v_actual_segment_lob_size, v_actual_node_lob_size;
571 CLOSE VALIDATE_BLOB_SIZE_CUR;
572
573 IF v_actual_segment_lob_size <> v_segment_lob_size THEN
574 put_stream(g_log,' SEGMENT SIZE DOESNOT MATCH FOR BINARY TILE ID ' || v_binary_tile_id );
575 put_stream(g_log,'Truncate CSF_TDS_BINARY_TILES table and reload it with Navteq import software using BLOBImport group');
576 put_stream(g_output,' SEGMENT SIZE DOESNOT MATCH FOR BINARY TILE ID ' || v_binary_tile_id );
577 put_stream(g_output,'Truncate CSF_TDS_BINARY_TILES table and reload it with Navteq import software using BLOBImport group');
578 flagSegment := flagSegment + 1;
579 END IF;
580
581 IF v_actual_node_lob_size <> v_node_lob_size THEN
585 put_stream(g_output,'Truncate CSF_TDS_BINARY_TILES table and reload it with Navteq import software using BLOBImport group');
582 put_stream(g_log,' NODE SIZE DOESNOT MATCH FOR BINARY TILE ID ' || v_binary_tile_id );
583 put_stream(g_log,'Truncate CSF_TDS_BINARY_TILES table and reload it with Navteq import software using BLOBImport group');
584 put_stream(g_output,' NODE SIZE DOESNOT MATCH FOR BINARY TILE ID ' || v_binary_tile_id );
586 flagNode := flagNode + 1;
587 END IF;
588
589 END LOOP;
590
591 IF flagSegment = 0 THEN
592 put_stream(g_log, ' NO MISMATCH FOR SEGMENT ');
593 put_stream(g_output, ' NO MISMATCH FOR SEGMENT ');
594 --dbms_output.put_line(' NO MISMATCH FOR SEGMENT ');
595 ELSE
596 put_stream(g_log, 'FOUND MISMATCH FOR SEGMENT ');
597 put_stream(g_log, 'FOUND MISMATCH FOR SEGMENT ');
598 RAISE FND_API.G_EXC_ERROR;
599 END IF;
600
601 IF flagNode = 0 THEN
602 put_stream(g_log, ' NO MISMATCH FOR NODE ');
603 put_stream(g_output, ' NO MISMATCH FOR NODE ');
604 --dbms_output.put_line(' NO MISMATCH FOR NODE ');
605 ELSE
606 put_stream(g_log, 'FOUND MISMATCH FOR NODE ');
607 put_stream(g_log, 'FOUND MISMATCH FOR NODE ');
608 RAISE FND_API.G_EXC_ERROR;
609 END IF;
610
611 CLOSE CSF_SPATIAL_STAT_LENGTH_CHECK;
612
613 put_stream(g_log, 'The procedure VALIDATE_BLOB_SIZE has completed successfully');
614
615 EXCEPTION
616 WHEN NO_DATA_FOUND
617 THEN
618 CLOSE CSF_SPATIAL_STAT_LENGTH_CHECK;
619 CLOSE VALIDATE_BLOB_SIZE_CUR;
620 retcode := 1;
621 errbuf := SQLERRM;
622 put_stream(g_log,'VALIDATE_BLOB_SIZE PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
623 put_stream(g_output,'VALIDATE_BLOB_SIZE PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
624 RAISE FND_API.G_EXC_ERROR;
625
626 WHEN OTHERS
627 THEN
628 CLOSE CSF_SPATIAL_STAT_LENGTH_CHECK;
629 CLOSE VALIDATE_BLOB_SIZE_CUR;
630 retcode := 1;
631 errbuf := SQLERRM;
632 put_stream(g_log,'VALIDATE_BLOB_SIZE PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
633 put_stream(g_output,'VALIDATE_BLOB_SIZE PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
634 RAISE FND_API.G_EXC_ERROR;
635
636 END VALIDATE_BLOB_SIZE;
637
638 PROCEDURE CHECK_INDEX_VALIDITY(
639 p_data_set_name IN VARCHAR2,
640 p_index_type IN VARCHAR2,
641 p_status OUT NOCOPY VARCHAR2,
642 errbuf OUT NOCOPY VARCHAR2,
643 retcode OUT NOCOPY VARCHAR2 )
644 IS
645 CURSOR csf_index_stat_validity_check (p_owner in VARCHAR2,
646 p_index_name in VARCHAR2)
647 IS
648 SELECT status, domidx_opstatus
649 FROM all_indexes
650 WHERE owner = p_owner
651 AND (index_name LIKE 'CSF_MD%' OR index_name LIKE 'CSF_LF%' OR index_name LIKE 'CSF_TDS%' OR INDEX_NAME like 'CSF_WOM%')
652 AND index_name = p_index_name;
653
654 CURSOR CSF_GET_SPATIAL_INDEXES (p_index_type in VARCHAR2)
655 IS
656 SELECT INDEX_NAME
657 FROM CSF_SPATIAL_INDEX_STAT_M
658 WHERE index_type = p_index_type AND index_type<>'MAT';
659
660 l_index_name VARCHAR2(100);
661 l_status VARCHAR2(20);
662 l_domidx_opstatus VARCHAR2(20);
663 l_app_short_name VARCHAR2(20);
664 l_flagInvalidCount REAL DEFAULT 0;
665
666 l_data_set_name VARCHAR2(40);
667
668 BEGIN
669
670 OPEN CSF_GET_SPATIAL_INDEXES (p_index_type);
671 LOOP
672 FETCH CSF_GET_SPATIAL_INDEXES INTO l_index_name;
673 EXIT WHEN CSF_GET_SPATIAL_INDEXES%NOTFOUND;
674
675 l_data_set_name := p_data_set_name;
676
677 IF l_index_name NOT LIKE 'CSF_WOM%' THEN
678 l_index_name := l_index_name || l_data_set_name;
679 END IF;
680
681
682 IF l_index_name IS NOT NULL THEN
683
684 -- Materialized view indexes are part of APPS schema and all other indexes are part of CSF schema.
685 IF p_index_type = 'MAT' THEN
686 l_app_short_name := upper( 'APPS' ) ;
687 ELSE
688 l_app_short_name := upper( 'CSF' ) ;
689 END IF;
690
691 OPEN csf_index_stat_validity_check(l_app_short_name,l_index_name);
692 FETCH csf_index_stat_validity_check INTO l_status, l_domidx_opstatus ;
693 IF csf_index_stat_validity_check%NOTFOUND THEN
694 l_flagInvalidCount := l_flagInvalidCount + 1;
695 put_stream(g_log,' INDEX ' || l_index_name || ' NOT FOUND' );
696 END IF;--IF csf_index_stat_validity_check%NOTFOUND
697
698 -- IF l_status IS NOT NULL AND l_domidx_opstatus IS NOT NULL THEN
699 IF l_index_name LIKE 'CSF_MD_%' THEN
700 IF NOT(l_domidx_opstatus = NULL OR l_domidx_opstatus = 'VALID') THEN
701 l_flagInvalidCount := l_flagInvalidCount + 1;
702 put_stream(g_log,' DOMIDX_OPSTATUS: INVALID FOR INDEX: ' || l_index_name);
703 END IF;
704 END IF;
705
706 IF NOT(l_status = 'VALID') THEN
707 put_stream(g_log,' STATUS: INVALID FOR INDEX: ' || l_index_name);
708 l_flagInvalidCount := l_flagInvalidCount + 1;
709 END IF;
710 -- END IF; -- l_status IS NOT NULL AND l_domidx_opstatus IS NOT NULL
711 END IF; -- l_index_name IS NOT NULL AND l_index_type IS NOT NULL
712 CLOSE csf_index_stat_validity_check;
713 END LOOP;
714 IF l_flagInvalidCount = 0 THEN
718 END IF;
715 put_stream(g_log,' ALL '|| p_index_type || ' INDEXES ARE VALID ');
716 put_stream(g_output,' ALL '|| p_index_type || ' INDEXES ARE VALID ');
717 p_status := 0;
719 CLOSE CSF_GET_SPATIAL_INDEXES;
720
721 EXCEPTION
722 WHEN NO_DATA_FOUND
723 THEN
724 CLOSE CSF_INDEX_STAT_VALIDITY_CHECK;
725 CLOSE CSF_GET_SPATIAL_INDEXES;
726 retcode := 1;
727 errbuf := SQLERRM;
728 put_stream(g_log,'CHECK_INDEX_VALIDIDTY PROCEDURE HAS FAILED FOR ' || p_index_type || ' INDEXES' ||SQLCODE||'-'|| SQLERRM);
729 RAISE FND_API.G_EXC_ERROR;
730
731 WHEN OTHERS
732 THEN
733 retcode := 1;
734 errbuf := SQLERRM;
735 put_stream(g_log,'CHECK_INDEX_VALIDIDTY PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
736 CLOSE CSF_INDEX_STAT_VALIDITY_CHECK;
737 CLOSE CSF_GET_SPATIAL_INDEXES;
738 RAISE FND_API.G_EXC_ERROR;
739
740 END CHECK_INDEX_VALIDITY;
741
742 PROCEDURE RECREATE_INVALID_INDEXES(
743 p_data_set_name IN VARCHAR2,
744 p_tablespace IN VARCHAR2,
745 p_index_type IN VARCHAR2,
746 errbuf OUT NOCOPY VARCHAR2,
747 retcode OUT NOCOPY VARCHAR2 )
748 IS
749 CURSOR csf_index_stat_validity_check (p_owner in VARCHAR2,
750 p_index_name in VARCHAR2)
751 IS
752 SELECT status, domidx_opstatus
753 FROM all_indexes
754 WHERE owner = p_owner
755 AND (index_name LIKE 'CSF_MD%' OR index_name LIKE 'CSF_LF%' OR index_name LIKE 'CSF_TDS%' OR INDEX_NAME like 'CSF_WOM%')
756 AND index_name = p_index_name;
757
758 CURSOR CSF_GET_SPATIAL_INDEXES (p_index_type in VARCHAR2)
759 IS
760 SELECT INDEX_NAME
761 FROM CSF_SPATIAL_INDEX_STAT_M
762 WHERE index_type = p_index_type AND index_type<>'MAT';
763
764 l_index_name VARCHAR2(100);
765 l_index_name_temp VARCHAR2(100);
766 l_status VARCHAR2(20);
767 l_domidx_opstatus VARCHAR2(20);
768 l_app_short_name VARCHAR2(20);
769 l_flagInvalidCount REAL DEFAULT 0;
770 l_data_set_name VARCHAR2(40);
771 BEGIN
772
773 OPEN CSF_GET_SPATIAL_INDEXES (p_index_type);
774 LOOP
775 FETCH CSF_GET_SPATIAL_INDEXES INTO l_index_name;
776 EXIT WHEN CSF_GET_SPATIAL_INDEXES%NOTFOUND;
777
778 l_data_set_name := p_data_set_name;
779
780 IF l_index_name NOT LIKE 'CSF_WOM%' THEN
781 l_index_name_temp := l_index_name || l_data_set_name;
782 END IF;
783
784 IF l_index_name IS NOT NULL THEN
785
786 -- Materialized view indexes are part of APPS schema and all other indexes are part of CSF schema.
787 IF p_index_type = 'MAT' THEN
788 l_app_short_name := upper( 'APPS' ) ;
789 ELSE
790 l_app_short_name := upper( 'CSF' ) ;
791 END IF;
792
793 OPEN csf_index_stat_validity_check(l_app_short_name,l_index_name_temp);
794 FETCH csf_index_stat_validity_check INTO l_status, l_domidx_opstatus ;
795 IF csf_index_stat_validity_check%NOTFOUND THEN
796 l_flagInvalidCount := l_flagInvalidCount + 1;
797 put_stream(g_log,' INDEX ' || l_index_name_temp || ' NOT FOUND' );
798 put_stream(g_log,'Recreating the INDEX ' || l_index_name_temp );
799 RECREATE_INDEX(l_data_set_name,l_index_name,p_tablespace,p_index_type, errbuf,retcode);
800 END IF;--IF csf_index_stat_validity_check%NOTFOUND
801
802 IF l_status IS NOT NULL AND l_domidx_opstatus IS NOT NULL THEN
803 IF l_index_name_temp LIKE 'CSF_MD_%' THEN
804 IF NOT(l_domidx_opstatus = NULL OR l_domidx_opstatus = 'VALID') THEN
805 l_flagInvalidCount := l_flagInvalidCount + 1;
806 put_stream(g_log,' DOMIDX_OPSTATUS: INVALID FOR INDEX: ' || l_index_name_temp);
807 put_stream(g_log,' Recreating the index : ' || l_index_name_temp);
808 RECREATE_INDEX(l_data_set_name,l_index_name,p_tablespace,p_index_type,errbuf,retcode);
809 END IF;
810 END IF;
811
812 IF NOT(l_status = 'VALID') THEN
813 put_stream(g_log,' STATUS: INVALID FOR INDEX: ' || l_index_name_temp);
814 l_flagInvalidCount := l_flagInvalidCount + 1;
815 put_stream(g_log,' Recreating the index : ' || l_index_name_temp);
816 RECREATE_INDEX(l_data_set_name,l_index_name,p_tablespace,p_index_type,errbuf,retcode);
817 END IF;
818 END IF; -- l_status IS NOT NULL AND l_domidx_opstatus IS NOT NULL
819 END IF; -- l_index_name IS NOT NULL AND l_index_type IS NOT NULL
820 CLOSE csf_index_stat_validity_check;
821 END LOOP;
822 IF l_flagInvalidCount = 0 THEN
823 put_stream(g_log,' ALL '|| p_index_type || ' INDEXES ARE VALID ');
824 END IF;
825 CLOSE CSF_GET_SPATIAL_INDEXES;
826
827 EXCEPTION
828 WHEN NO_DATA_FOUND
829 THEN
830 CLOSE CSF_INDEX_STAT_VALIDITY_CHECK;
831 CLOSE CSF_GET_SPATIAL_INDEXES;
832 retcode := 1;
833 errbuf := SQLERRM;
834 put_stream(g_log,'RECREATE_INVALID_INDEXES PROCEDURE HAS FAILED FOR ' || p_index_type || ' INDEXES' ||SQLCODE||'-'|| SQLERRM);
835 put_stream(g_output,'RECREATE_INVALID_INDEXES PROCEDURE HAS FAILED FOR ' || p_index_type || ' INDEXES' ||SQLCODE||'-'|| SQLERRM);
836 RAISE FND_API.G_EXC_ERROR;
837
838 WHEN OTHERS
839 THEN
840 retcode := 1;
841 errbuf := SQLERRM;
845 CLOSE CSF_GET_SPATIAL_INDEXES;
842 put_stream(g_log,'RECREATE_INVALID_INDEXES PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
843 put_stream(g_output,'RECREATE_INVALID_INDEXES PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
844 CLOSE CSF_INDEX_STAT_VALIDITY_CHECK;
846 RAISE FND_API.G_EXC_ERROR;
847
848 END RECREATE_INVALID_INDEXES;
849
850
851 PROCEDURE CREATE_INDEXES(
852 p_data_set_name IN VARCHAR2,
853 p_tablespace in VARCHAR2,
854 p_index_type in VARCHAR2,
855 errbuf OUT NOCOPY VARCHAR2,
856 retcode OUT NOCOPY VARCHAR2 )
857 IS
858
859 CURSOR CSF_GET_SPATIAL_INDEXES (p_index_type in VARCHAR2)
860 IS
861 SELECT INDEX_NAME,
862 table_name ,
863 index_columns,
864 index_create_sql
865 FROM CSF_SPATIAL_INDEX_STAT_M
866 WHERE index_type = p_index_type AND index_type<>'MAT';
867
868 l_index_name VARCHAR2(100);
869 l_applsys_schema VARCHAR2(10);
870 l_app_short_name VARCHAR2(20);
871 l_table VARCHAR2(60);
872 l_index VARCHAR2(60);
873 l_columns_arr CHAR30_ARR;
874 l_columns_str VARCHAR2(200);
875 l_column VARCHAR2(60);
876 l_tablespace VARCHAR2(60);
877 l_create_sql VARCHAR2(4000);
878 l_data_set_name VARCHAR2(40);
879 i NUMBER;
880
881 BEGIN
882
883 l_applsys_schema := upper( 'APPS' ) ;
884
885 -- Creating indexes in APPS schema as the Materialized views
886 -- are created as part of APPS schema.
887 IF p_index_type = 'MAT' THEN
888 l_app_short_name := upper( 'APPS' ) ;
889 ELSE
890 l_app_short_name := upper( 'CSF' ) ;
891 END IF;
892
893 l_tablespace := upper ( p_tablespace );
894
895 l_data_set_name := p_data_set_name;
896
897 OPEN CSF_GET_SPATIAL_INDEXES(p_index_type);
898 LOOP
899 FETCH CSF_GET_SPATIAL_INDEXES
900 INTO l_index_name,
901 l_table,
902 l_columns_str,
903 l_create_sql;
904 EXIT WHEN CSF_GET_SPATIAL_INDEXES%NOTFOUND;
905
906 IF p_index_type <> 'WOM' THEN
907 IF ( p_index_type = 'MAT' AND l_table NOT LIKE 'CSF_WOM%' ) THEN
908 l_index_name := l_index_name || l_data_set_name;
909 l_table := l_table || l_data_set_name ||'_V';
910 ELSIF l_table NOT LIKE 'CSF_WOM%' THEN
911 l_index_name := l_index_name || l_data_set_name;
912 l_table := l_table || l_data_set_name;
913 END IF;
914 END IF;
915
916 IF l_index_name IS NOT NULL THEN
917 IF l_create_sql IS NOT NULL THEN
918 select replace(l_create_sql,'l_tablespace',l_tablespace) into l_create_sql from dual;
919 select replace(l_create_sql,'l_index',l_index_name) into l_create_sql from dual;
920 select replace(l_create_sql,'l_table',l_table) into l_create_sql from dual;
921 END IF;
922 /* The following block converts the string of comma seperated
923 index names to table of varchars.
924 */
925 BEGIN
926 l_columns_arr := CHAR30_ARR();
927 i := 1;
928 LOOP
929 EXIT WHEN INSTR(l_columns_str , ',') = 0 OR INSTR(l_columns_str , ',') is null;
930 SELECT SUBSTR(l_columns_str, 1, INSTR(l_columns_str , ',')-1) INTO l_column FROM dual;
931 SELECT SUBSTR(l_columns_str, INSTR(l_columns_str , ',')+1) INTO l_columns_str FROM dual;
932 l_columns_arr.extend(1);
933 l_columns_arr(i) := l_column;
934 i := i + 1 ;
935 END LOOP;
936 l_columns_arr.extend(1);
937 l_columns_arr(i) := l_columns_str;
938 END;
939
940 CREATE_INDEX ( l_applsys_schema, l_app_short_name, l_table, l_index_name, l_columns_arr, l_create_sql, errbuf, retcode );
941
942 END IF; -- l_index_name IS NOT NULL
943 END LOOP;
944
945 CLOSE CSF_GET_SPATIAL_INDEXES;
946
947 EXCEPTION
948 WHEN NO_DATA_FOUND
949 THEN
950 CLOSE CSF_GET_SPATIAL_INDEXES;
951 retcode := 1;
952 errbuf := SQLERRM;
953 put_stream(g_log,'CREATE_INDEX PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
954 put_stream(g_output,'CREATE_INDEX PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
955 RAISE FND_API.G_EXC_ERROR;
956
957 WHEN OTHERS
958 THEN
959 retcode := 1;
960 errbuf := SQLERRM;
961 put_stream(g_log,'CREATE_INDEX PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
962 put_stream(g_output,'CREATE_INDEX PROCEDURE HAS FAILED '||SQLCODE||'-'|| SQLERRM);
963 CLOSE CSF_GET_SPATIAL_INDEXES;
964 RAISE FND_API.G_EXC_ERROR;
965
966 END CREATE_INDEXES;
967
968 PROCEDURE RECREATE_INDEX (
969 p_data_set_name IN VARCHAR2,
970 p_index_name IN VARCHAR2,
971 p_tablespace IN VARCHAR2,
972 p_index_type IN VARCHAR2,
973 errbuf OUT NOCOPY VARCHAR2,
974 retcode OUT NOCOPY VARCHAR2 )
975 IS
976 l_index_type VARCHAR2(10);
977 l_applsys_schema VARCHAR2(10);
978 l_app_short_name VARCHAR2(20);
979 l_table VARCHAR2(60);
980 l_index_name VARCHAR2(100);
981 l_columns_arr CHAR30_ARR;
982 l_columns_str VARCHAR2(200);
986 i NUMBER;
983 l_column VARCHAR2(60);
984 l_tablespace VARCHAR2(60) ;
985 l_create_sql VARCHAR2(4000);
987 l_data_set_name VARCHAR2(40);
988
989 BEGIN
990
991 l_applsys_schema := upper( 'APPS' ) ;
992 l_tablespace := UPPER ( p_tablespace );
993
994 l_data_set_name := p_data_set_name;
995
996 IF p_index_name IS NOT NULL THEN
997
998 SELECT table_name,
999 index_columns,
1000 index_create_sql,
1001 index_type
1002 INTO l_table,
1003 l_columns_str,
1004 l_create_sql,
1005 l_index_type
1006 FROM CSF_SPATIAL_INDEX_STAT_M where INDEX_NAME = p_index_name;
1007
1008 -- Checking indexes in APPS schema as the Materialized views
1009 -- are created as part of APPS schema.
1010 IF l_index_type = 'MAT' THEN
1011 l_app_short_name := upper( 'APPS' ) ;
1012 ELSE
1013 l_app_short_name := upper( 'CSF' ) ;
1014 END IF;
1015
1016 IF p_index_type <> 'WOM' THEN
1017 IF ( p_index_type = 'MAT' AND l_table NOT LIKE 'CSF_WOM%' ) THEN
1018 l_index_name := l_index_name || l_data_set_name;
1019 l_table := l_table || l_data_set_name ||'_V';
1020 ELSIF l_table NOT LIKE 'CSF_WOM%' THEN
1021 l_index_name := l_index_name || l_data_set_name;
1022 l_table := l_table || l_data_set_name;
1023 END IF;
1024 END IF;
1025
1026 IF l_create_sql IS NOT NULL THEN
1027 SELECT replace(l_create_sql,'l_tablespace',l_tablespace) INTO l_create_sql FROM dual;
1028 SELECT replace(l_create_sql,'l_index',p_index_name) INTO l_create_sql FROM dual;
1029 SELECT replace(l_create_sql,'l_table',l_table) INTO l_create_sql FROM dual;
1030 END IF;
1031
1032 /* The following block converts the string of comma seperated
1033 index names to table of varchars.
1034 */
1035 BEGIN
1036 l_columns_arr := CHAR30_ARR();
1037 i := 1;
1038 LOOP
1039 EXIT WHEN INSTR(l_columns_str , ',') = 0 OR INSTR(l_columns_str , ',') is null;
1040 SELECT SUBSTR(l_columns_str, 1, INSTR(l_columns_str , ',')-1) INTO l_column FROM dual;
1041 SELECT SUBSTR(l_columns_str, INSTR(l_columns_str , ',')+1) INTO l_columns_str FROM dual;
1042 l_columns_arr.extend(1);
1043 l_columns_arr(i) := l_column;
1044 i := i + 1 ;
1045 END LOOP;
1046 l_columns_arr.extend(1);
1047 l_columns_arr(i) := l_columns_str;
1048 END;
1049
1050 CREATE_INDEX ( l_applsys_schema, l_app_short_name, l_table, l_index_name, l_columns_arr, l_create_sql, errbuf, retcode );
1051
1052 END IF; --IF v_index_name IS NOT NULL
1053
1054 EXCEPTION
1055 WHEN OTHERS THEN
1056 retcode := 1;
1057 errbuf := SQLERRM;
1058 put_stream(g_output, 'RECREATE_INDEX PROCEDURE HAS FAILED' ||SQLCODE ||'-'|| SQLERRM);
1059 put_stream(g_log, 'RECREATE_INDEX PROCEDURE HAS FAILED' ||SQLCODE ||'-'|| SQLERRM);
1060 RAISE FND_API.G_EXC_ERROR;
1061
1062 END RECREATE_INDEX;
1063
1064 /* Procedure to drop route cache table. Fix for bug : 9019583
1065
1066 When a route is calculated by Time Distance Server (TDS), the route information is stored in CSF_TDS_ROUTE_CACHE table.
1067 When the same route details are requested by Scheduler for the second time, TDS doesn't calculate the route again and
1068 it provides the route by referring the CSF_TDS_ROUTE_CACHE table. The route details are dataset specific and cannotbe
1069 used across the datasets. When a new dataset is loaded, this table data need to be cleared.
1070 */
1071
1072 PROCEDURE TRUNC_ROUTE_CAHCE_TABLE(
1073 p_data_set_name IN VARCHAR2,
1074 errbuf OUT NOCOPY VARCHAR2,
1075 retcode OUT NOCOPY VARCHAR2 )
1076 IS
1077 l_data_set_name VARCHAR2(40);
1078 l_sch VARCHAR2(10);
1079 BEGIN
1080
1081 put_stream(g_log, ' ' );
1082 put_stream(g_log, 'Start of Procedure TRUNC_ROUTE_CAHCE_TABLE ' );
1083 put_stream(g_log, '================================================ ' );
1084
1085 l_data_set_name := p_data_set_name;
1086 l_sch := 'CSF';
1087
1088 EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| l_sch || '.CSF_TDS_ROUTE_CACHE' || p_data_set_name;
1089
1090 put_stream(g_log, 'The procedure TRUNC_ROUTE_CAHCE_TABLE has completed successfully');
1091 put_stream(g_log, 'Truncating table CSF_TDS_ROUTE_CACHE' || p_data_set_name||' is successful');
1092
1093 EXCEPTION
1094 WHEN OTHERS THEN
1095 put_stream(g_output,'TRUNC_ROUTE_CAHCE_TABLE PROCEDURE HAS FAILED' ||SQLCODE||'-'|| SQLERRM );
1096 put_stream(g_log, 'TRUNC_ROUTE_CAHCE_TABLE PROCEDURE HAS FAILED' || SQLCODE||'-'||SQLERRM);
1097 retcode := 1;
1098 errbuf := SQLERRM;
1099 RAISE FND_API.G_EXC_ERROR;
1100 --RETURN ;
1101 END TRUNC_ROUTE_CAHCE_TABLE;
1102
1103 END CSF_SPATIAL_DATALOAD_PVT;