[Home] [Help]
PACKAGE BODY: APPS.BSC_DBGEN_UTILS
Source
1 Package Body BSC_DBGEN_UTILS AS
2 /* $Header: BSCDBUTB.pls 120.10 2007/04/25 12:52:55 ashankar ship $ */
3
4
5 FUNCTION Is_Simulation_Report
6 (
7 p_short_name IN BSC_KPIS_VL.short_name%TYPE
8 ) RETURN VARCHAR2 IS
9
10 l_return VARCHAR2(10);
11
12
13 CURSOR c_sim IS
14 SELECT config_type
15 FROM bsc_kpis_b
16 WHERE short_name =p_short_name;
17 BEGIN
18 l_return := FND_API.G_FALSE;
19
20 FOR cd IN c_sim LOOP
21 IF(cd.config_type =7) THEN
22 l_return :=FND_API.G_TRUE;
23 END IF;
24 END LOOP;
25
26 RETURN l_return;
27
28 EXCEPTION
29 WHEN OTHERS THEN
30 l_return := FND_API.G_FALSE;
31
32 END Is_Simulation_Report;
33
34
35
36 FUNCTION get_bsc_schema return varchar2 is
37 dummy1 VARCHAR2(32) := null;
38 dummy2 VARCHAR2(32) := null;
39 l_bsc_schema VARCHAR2(32) := null;
40 begin
41 IF (g_bsc_schema IS NOT NULL) THEN
42 return g_bsc_schema;
43 END IF;
44 IF (FND_INSTALLATION.GET_APP_INFO('BSC', dummy1, dummy2, l_bsc_schema)) THEN
45 NULL;
46 END IF;
47 g_bsc_schema := l_bsc_schema;
48 return l_bsc_schema;
49 EXCEPTION when others then
50 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_bsc_schema:'||sqlerrm);
51 raise;
52 end;
53
54 /*---------------------------------------------------------------------
55 Get the actual schema name for the 'APPS' schema as it could be different
56 in different implementations.
57
58 ---------------------------------------------------------------------*/
59 Function get_apps_schema RETURN VARCHAR2 IS
60 l_schema varchar2(100);
61 CURSOR cApps IS
62 SELECT ORACLE_USERNAME
63 FROM fnd_oracle_userid
64 WHERE oracle_id=900;
65 BEGIN
66 OPEN cApps;
67 FETCH cApps INTO l_schema;
68 CLOSE cApps;
69 return l_schema;
70 EXCEPTION when others then
71 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_apps_schema:'||sqlerrm);
72 raise;
73 END;
74
75 PROCEDURE init IS
76 BEGIN
77 IF (g_initialized ) THEN
78 return;
79 END IF;
80 bsc_apps.init_bsc_apps;
81 g_bsc_schema := get_bsc_schema;
82 g_apps_schema := get_apps_schema;
83 g_initialized := true;
84 EXCEPTION when others then
85 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.init:'||sqlerrm);
86 raise;
87
88 END;
89
90 FUNCTION get_datatype(p_table_name in varchar2, p_column_name in varchar2) return VARCHAR2 IS
91 CURSOR cType IS
92 SELECT data_type, data_length
93 FROM all_tab_columns
94 where
95 (owner = g_bsc_schema or owner = g_apps_schema) and
96 table_name=p_table_name and
97 column_name=p_column_name;
98 l_type varchar2(100);
99 l_length number;
100 BEGIN
101 IF (g_initialized=false) THEN
102 init;
103 END IF;
104 OPEN cType;
105 FETCH cType INTO l_type, l_length;
106 CLOSE cType;
107 IF (l_length IS NOT NULL) THEN
108 l_type := l_type ||'('||l_length||')';
109 END IF;
110 return l_type;
111 EXCEPTION when others then
112 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_datatype:'||sqlerrm);
113 raise;
114
115 END;
116
117 --===========================================================================+
118 --
119 -- Name: Get_New_Big_In_Cond_Number
120 -- Description: Clean values for the given variable_id and return a 'IN'
121 -- condition string.
122 -- Parameters: x_variable_id variable id.
123 -- x_column_name column name (left part of the condition)
124 --============================================================================
125
126 Function Get_New_Big_In_Cond_Number( x_variable_id IN NUMBER, x_column_name IN VARCHAR2)
127 return VARCHAR2 IS
128 l_cond varchar2(1000);
129 BEGIN
130 IF (g_initialized=false) THEN
131 init;
132 END IF;
133 DELETE FROM BSC_TMP_BIG_IN_COND WHERE SESSION_ID = USERENV('SESSIONID') AND VARIABLE_ID = x_variable_id;
134 l_cond := x_column_name || ' IN (' ||
135 ' SELECT VALUE_N FROM BSC_TMP_BIG_IN_COND WHERE SESSION_ID = USERENV(''SESSIONID'')'||
136 ' AND VARIABLE_ID = ' || x_variable_id || ')';
137 return l_cond;
138 EXCEPTION when others then
139 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.Get_New_Big_In_Cond_Number:'||sqlerrm);
140 raise;
141 End;
142
143 --===========================================================================+
144 -- Name: Add_Value_Big_In_Cond_Number
145 -- Description: Insert the given value into the temporary table of big
146 -- 'in' conditions for the given variable_id.
147 -- Parameters: x_variable_id variable id.
148 -- x_value value
149 --============================================================================
150 PROCEDURE Add_Value_Big_In_Cond_Number(x_variable_id IN NUMBER, x_value IN NUMBER) IS
151 BEGIN
152 IF (g_initialized=false) THEN
153 init;
154 END IF;
155 bsc_apps.Add_Value_Big_In_Cond(x_variable_id , x_value);
156 EXCEPTION when others then
157 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.Add_Value_Big_In_Cond_Number:'||sqlerrm);
158 raise;
159 End;
160
161 --===========================================================================+
162 -- Name: Get_New_Big_In_Cond_Varchar2
163 -- Description: Clean values for the given variable_id and return a 'IN'
164 -- condition string.
165 -- Parameters: x_variable_id variable id.
166 -- x_column_name column name (left part of the condition)
167 --============================================================================
168 Function Get_New_Big_In_Cond_Varchar2( x_variable_id in number, x_column_name in varchar2)
169 return VARCHAR2 IS
170 cond varchar2(1000);
171 BEGIN
172 IF (g_initialized=false) THEN
173 init;
174 END IF;
175 DELETE FROM BSC_TMP_BIG_IN_COND WHERE SESSION_ID = USERENV('SESSIONID') AND VARIABLE_ID = x_variable_id;
176 cond := 'UPPER('|| x_column_name || ') IN ('||
177 ' SELECT UPPER(VALUE_V) FROM BSC_TMP_BIG_IN_COND WHERE SESSION_ID = USERENV(''SESSIONID'') AND VARIABLE_ID = '||x_variable_id||')';
178 return cond;
179 EXCEPTION when others then
180 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.Get_New_Big_In_Cond_Varchar2:'||sqlerrm);
181 raise;
182 End;
183 --===========================================================================+
184 -- Name: Add_Value_Big_In_Cond_Varchar2
185 -- Description: Insert the given value into the temporary table of big
186 -- --in' conditions for the given variable_id.
187 -- Parameters: x_variable_id variable id.
188 -- x_value value
189 --============================================================================*/
190 PROCEDURE Add_Value_Big_In_Cond_Varchar2(x_variable_id IN NUMBER, x_value IN VARCHAR2) IS
191 BEGIN
192 IF (g_initialized=false) THEN
193 init;
194 END IF;
195 bsc_apps.Add_Value_Big_In_Cond(x_variable_id , x_value);
196
197 EXCEPTION when others then
198 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.Add_Value_Big_In_Cond_Varchar2:'||sqlerrm);
199 raise;
200 End;
201
202 FUNCTION get_dbgen_fact_id(p_fact_name IN VARCHAR2, p_application_short_name IN VARCHAR2) RETURN NUMBER IS
203 /*CURSOR cFactID IS
204 SELECT indicator FROM BSC_DBGEN_FACTS
205 WHERE source = p_application_source
206 AND fact_name = p_fact_name;*/
207
208 l_fact_id NUMBER;
209 BEGIN
210 /*OPEN cFactID;
211 FETCH cFactID INTO l_fact_id;
212 CLOSE cFactID;
213 return l_fact_id;*/
214 return to_number(p_fact_name);
215 EXCEPTION when others then
216 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_dbgen_fact_id:'||sqlerrm);
217 raise;
218 END;
219
220 --****************************************************************************
221 -- GetCamposExpresion
222 --
223 -- DESCRIPTION:
224 -- Get in an array the list of fields in the given expression.
225 -- Return the number of fields.
226 -- Example. Expresion = 'IIF(Not IsNull(SUM(A)), C, B)'
227 -- CamposExpresion() = |A|C|B|, GetCamposExpresion = 3
228 -- PARAMETERS:
229 -- CamposExpresion(): array to be populated
230 -- Expresion: expression
231 -- AUTHOR/DATE - MODIFICATIONS (AUTHOR/DATE/DESCRIPTION):
232 --****************************************************************************
233 FUNCTION get_measure_list(p_expression IN VARCHAR2) RETURN dbms_sql.varchar2_table IS
234 i NUMBER;
235 l_measure_list_tmp dbms_sql.varchar2_table;
236 l_expression VARCHAR2(1000);
237 l_measure_list dbms_sql.varchar2_table ;
238 BEGIN
239 IF (g_initialized=false) THEN
240 init;
241 END IF;
242 l_expression := p_expression;
243 BSC_METADATA_OPTIMIZER_PKG.InitReservedFunctions;
244 --Replace the operators by ' '
245 i := BSC_METADATA_OPTIMIZER_PKG.gReservedOperators.first;
246
247 LOOP
248 l_expression := Replace(l_expression, BSC_METADATA_OPTIMIZER_PKG.gReservedOperators(i), ' ');
249 EXIT WHEN i = BSC_METADATA_OPTIMIZER_PKG.gReservedOperators.last;
250 i := BSC_METADATA_OPTIMIZER_PKG.gReservedOperators.next(i);
251 END LOOP;
252 --Break down the expression which is separated by ' '
253 i := BSC_MO_HELPER_PKG.DecomposeString(l_expression, ' ', l_measure_list_tmp );
254 i:= l_measure_list_tmp .first;
255 LOOP
256 EXIT WHEN l_measure_list_tmp .count = 0;
257 If l_measure_list_tmp (i) IS NOT NULL Then
258 If BSC_MO_HELPER_PKG.FindIndexVARCHAR2(BSC_METADATA_OPTIMIZER_PKG.gReservedFunctions, l_measure_list_tmp (i)) = -1 Then
259 --The word campos(i) is not a reserved function
260 If UPPER(l_measure_list_tmp (i)) <> 'NULL' Then
261 --the word is not 'NULL'
262 If Not BSC_MO_HELPER_PKG.IsNumber(l_measure_list_tmp (i)) Then
263 --the word is not a constant
264 l_measure_list(l_measure_list.count+1) := l_measure_list_tmp (i);
265 END IF;
266 END IF;
267 END IF;
268 END IF;
269 EXIT WHEN i = l_measure_list_tmp.last;
270 i := l_measure_list_tmp.next(i);
271 END LOOP;
272 return l_measure_list;
273 EXCEPTION when others then
274 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_measure_list:'||sqlerrm||', expression='||p_expression);
275 raise;
276 End;
277
278 --***************************************************************************
279 -- getKPIPropertyValue : LeerMatrixINfo
280 -- DESCRIPTION:
281 -- Return the value oif the given variable of the given indicator from
282 -- table BSC_KPI_PROPERTIES.
283 --
284 -- PARAMETERS:
285 -- Indic: indicator code
286 -- Variable: variable name
287 -- Default: default value
288 -- db_obj: database
289 --
290 -- AUTHOR/DATE - MODIFICATIONS (AUTHOR/DATE/DESCRIPTION):
291 --***************************************************************************
292 Function get_kpi_property_value(
293 p_kpi IN NUMBER,
294 p_property IN VARCHAR2,
295 p_default IN NUMBER)
296 return NUMBER IS
297 l_value number := null;
298 CURSOR cProperty IS
299 SELECT PROPERTY_VALUE
300 FROM BSC_KPI_PROPERTIES
301 WHERE INDICATOR = p_kpi
302 AND PROPERTY_CODE = p_property;
303
304 BEGIN
305 IF (g_initialized=false) THEN
306 init;
307 END IF;
308 OPEN cProperty;
309 FETCH cProperty INTO l_value;
310 CLOSE cProperty;
311 IF l_value is not null THEN
312 return l_value;
313 END IF;
314 return p_default;
315 EXCEPTION when others then
316 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_kpi_property_value:'||sqlerrm||', p_kpi='||p_kpi||', p_property='||p_property||', p_default='||p_default);
317 raise;
318 End;
319
320 PROCEDURE add_property(
321 p_properties in out nocopy BSC_DBGEN_STD_METADATA.tab_ClsProperties,
322 p_name in varchar2,
323 p_value in number)
324 IS
325 BEGIN
326 add_property(p_properties, p_name, to_char(p_value));
327 END;
328 PROCEDURE add_property(
329 p_properties in out nocopy BSC_DBGEN_STD_METADATA.tab_ClsProperties,
330 p_name in varchar2,
331 p_value in varchar2)
332 IS
333 l_property BSC_DBGEN_STD_METADATA.ClsProperties;
334 BEGIN
335 IF (g_initialized=false) THEN
336 init;
337 END IF;
338 IF (p_properties.count=0) THEN
339 p_properties(1).name := p_name;
340 p_properties(1).value := p_value;
341 return;
342 END IF;
343
344 FOR i IN p_properties.first..p_properties.last LOOP
345 IF (p_properties(i).name = p_name) THEN
346 p_properties(i).value := p_value;
347 return;
348 END IF;
349 END LOOP;
350
351 l_property.name := p_name;
352 l_property.value := p_value;
353 p_properties(p_properties.last+1) := l_property;
354 EXCEPTION when others then
355 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.add_property:'||sqlerrm||', p_name='||p_name||', p_Value='||p_value);
356 raise;
357 END;
358
359 FUNCTION get_property_value(p_properties IN BSC_DBGEN_STD_METADATA.tab_ClsProperties, p_name in varchar2) return VARCHAR2
360 IS
361 BEGIN
362 IF (g_initialized=false) THEN
363 init;
364 END IF;
365 IF (p_properties.count=0) THEN
366 return BSC_DBGEN_STD_METADATA.BSC_PROPERTY_NOT_FOUND ;
367 END IF;
368 FOR i IN p_properties.first..p_properties.last LOOP
369 IF (p_properties(i).name = p_name) THEN
370 return p_properties(i).value;
371 END IF;
372 END LOOP;
373 return BSC_DBGEN_STD_METADATA.BSC_PROPERTY_NOT_FOUND ;
374
375 EXCEPTION when others then
376 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_property_value:'||sqlerrm||', p_name='||p_name);
377 raise;
378 END;
379
380 FUNCTION get_source_table_names(p_table_name IN VARCHAR2) RETURN DBMS_SQL.VARCHAR2_TABLE IS
381 CURSOR cList IS
382 select source_table_name from bsc_db_tables_rels
383 connect by table_name = prior source_table_name
384 start with table_name = p_table_name;
385 l_list DBMS_SQL.VARCHAR2_TABLE;
386 BEGIN
387 IF (g_initialized=false) THEN
388 init;
389 END IF;
390 FOR i IN cList LOOP
391 l_list(l_list.count) := i.source_table_name;
392 END LOOP;
393 return l_list;
394 EXCEPTION when others then
395 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_source_table_names:'||sqlerrm||', p_table_name='||p_table_name);
396 raise;
397 END;
398
399 FUNCTION get_table_type(p_table_name IN VARCHAR2) RETURN VARCHAR2
400 IS
401 l_table_type VARCHAR2(10);
402 CURSOR cTableType IS
403 select count(1)
404 from bsc_db_tables tbl,
405 bsc_db_tables_rels rels
406 where
407 rels.table_name = p_table_name
408 and rels.source_table_name = tbl.table_name
409 and tbl.table_type = 0;
410
411 BEGIN
412 IF (g_initialized=false) THEN
413 init;
414 END IF;
415 BEGIN
416 SELECT table_type INTO l_table_type FROM BSC_DB_TABLES where table_name = p_table_name;
417 EXCEPTION WHEN OTHERS THEN
418 SELECT count(1) INTO l_table_type FROM BSC_SYS_DIM_LEVELS_B where level_table_name = p_table_name;
419 IF l_table_type <>0 THEN
420 return 'D';
421 ELSE
422 return null;
423 END IF;
424 END;
425 --B = 1, S = 1, T = 1, I = 0, DI = 2
426 IF l_table_type = 0 THEN
427 return 'I';
428 ELSIF l_table_type = 2 THEN
429 return 'DI';
430 ELSIF l_table_type <> 1 THEN
431 return null;
432 END IF;
433
434 -- Table type is 1 : Can be B, S or T table
435 l_table_type := 0;
436 OPEN cTableType;
437 FETCH cTableType INTO l_table_type ;
438 CLOSE cTableType;
439 IF (l_table_type<>0) THEN
440 return 'B';
441 ELSIF p_table_name like 'BSC_T%' THEN
442 return 'T';
443 ELSIF p_table_name like 'BSC_S%' THEN
444 return 'S';
445 END IF;
446 return null;
447 EXCEPTION when others then
448 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_table_type:'||sqlerrm||', p_table_name='||p_table_name);
449 raise;
450 END;
451
452 FUNCTION get_mvlog_for_table(p_table_name IN VARCHAR2) RETURN VARCHAR2
453 IS
454 CURSOR cMVLog(p_owner VARCHAR2) IS
455 select log_table from all_snapshot_logs where log_owner=p_owner and master = p_table_name;
456 l_mvlog_name VARCHAR2(100);
457 BEGIN
458 IF (g_initialized=false) THEN
459 init;
460 END IF;
461 l_mvlog_name := null;
462 OPEN cMVLog(g_bsc_schema);
463 FETCH cMVLog INTO l_mvlog_name;
464 CLOSE cMVLog;
465 RETURN l_mvlog_name;
466 EXCEPTION when others then
467 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_mvlog_for_table:'||sqlerrm||', p_table_name='||p_table_name);
468 raise;
469 END;
470
471
472 -- given the objective short_name, tells us if the
473 -- the Objective is a BSC Objective or a BSC Sourced Report or a non-BSC Sourced report
474 FUNCTION get_Objective_Type (
475 p_Short_Name IN VARCHAR2
476 ) RETURN VARCHAR2
477 IS
478 l_Count NUMBER;
479 BEGIN
480 IF (g_initialized=false) THEN
481 init;
482 END IF;
483 IF (p_short_name is NULL) THEN
484 return 'OBJECTIVE';
485 END IF;
486
487 IF BSC_BIS_CUSTOM_KPI_UTIL_PUB.IS_OBJECTIVE_REPORT_TYPE(p_SHORT_NAME) = FND_API.G_TRUE THEN
488 -- Removed call to API BSC_BIS_CUSTOM_KPI_UTIL_PUB.Is_Objective_AutoGen_Type to fix Bug#4602405
489 RETURN 'BSCREPORT';
490 ELSIF(Is_Simulation_Report(p_SHORT_NAME)= FND_API.G_TRUE)THEN
491 RETURN 'SIMULATION';
492 ELSE
493 RETURN 'OBJECTIVE';
494 END IF;
495 EXCEPTION
496 WHEN OTHERS THEN
497 RETURN 'OBJECTIVE';
498 END get_Objective_Type;
499
500 -- Given a varchar2 string, chop it into chunks and return
501 FUNCTION get_char_chunks(p_msg IN VARCHAR2, p_chunk_size IN NUMBER default 256) return DBMS_SQL.VARCHAR2_TABLE IS
502 l_varchar2_Table DBMS_SQL.VARCHAR2_TABLE;
503 l_chunk VARCHAR2(2000);
504 l_msg VARCHAR2(32767);
505 l_chunk_size NUMBER;
506 BEGIN
507 IF (p_msg IS NULL or p_chunk_size <= 0) THEN
508 return l_varchar2_table;
509 END IF;
510 l_msg := p_msg;
511 l_chunk_size := p_chunk_size;
512 IF (l_chunk_size > 2000) THEN
513 l_chunk_size := 2000;
514 END IF;
515 LOOP
516 l_chunk := substr(l_msg, 1, l_chunk_size);
517 l_varchar2_table(l_varchar2_table.count) := l_chunk;
518 EXIT WHEN length(l_msg) <= l_chunk_size;
519 l_msg := substr(l_msg, l_chunk_size+1, length(l_msg));
520 END LOOP;
521 return l_varchar2_table;
522 EXCEPTION when others then
523 fnd_file.put_line(FND_FILE.LOG, 'Exception in BSC_DBGEN_UTILS.get_char_chunks:'||sqlerrm||', p_msg='||p_msg||', p_chunk_size='||p_chunk_size);
524 raise;
525 END;
526
527 /****************************************************************************
528 get_objective_type_for_base_table
529
530 DESCRIPTION:
531 Returns the type of objective using this B table: AW or MV
532 PARAMETERS:
533 p_b_table_Name: Base table name
534 AUTHOR/DATE - MODIFICATIONS (AUTHOR/DATE/DESCRIPTION):
535 Arun.Santhanam
536 ****************************************************************************/
537 Function get_objective_type_for_b_table(
538 p_b_table_name IN VARCHAR2
539 ) return VARCHAR2 IS
540 l_indicator NUMBER;
541 CURSOR cTables IS
542 select distinct indicator from bsc_kpi_data_tables where
543 table_name in (
544 select distinct rels.table_name
545 from bsc_db_Tables_rels rels
546 connect by prior table_name=source_table_name
547 start with rels.source_table_name = p_b_table_name);
548
549 BEGIN
550 open cTables;
551 FETCH cTables into l_indicator;
552 IF (cTables%NOTFOUND) THEN
553 CLOSE cTables;
554 return null;
555 ELSE
556 CLOSE cTables;
557 IF get_kpi_property_value(l_indicator, 'IMPLEMENTATION_TYPE', 1)=2 THEN
558 return 'AW';
559 ELSE
560 return 'MV';
561 END IF;
562 END IF;
563 End;
564
565
566 FUNCTION table_exists(p_table_name IN VARCHAR2) return BOOLEAN IS
567 l_count NUMBER;
568
569 CURSOR cTables(pTableName IN VARCHAR2, pOwner IN VARCHAR2) IS
570 SELECT 1 FROM ALL_TABLES
571 WHERE TABLE_NAME = pTableName
572 AND OWNER = pOwner;
573 BEGIN
574 IF (g_initialized=false) THEN
575 init;
576 END IF;
577 l_count := 0;
578 open cTables(p_table_name, g_bsc_schema);
579 FETCH cTables into l_count;
580 IF (cTables%NOTFOUND) THEN
581 CLOSE cTables;
582 return false;
583 ELSE
584 CLOSE cTables;
585 return true;
586 END IF;
587 End;
588
589 /****************************************************************************
590 IS_TMP_TABLE_EXISTS
591
592 DESCRIPTION:
593 Returns TRUE if the given tmp table exists in the database.
594 PARAMETERS:
595 Table_Name: tmp table name
596 AUTHOR/DATE - MODIFICATIONS (AUTHOR/DATE/DESCRIPTION):
597 CALAW
598 ****************************************************************************/
599 Function IS_TMP_TABLE_EXISTED(
600 Table_Name IN VARCHAR2
601 ) return Boolean IS
602
603 l_count NUMBER;
604
605 CURSOR cTables(pTableName IN VARCHAR2, pOwner IN VARCHAR2) IS
606 SELECT 1 FROM ALL_TABLES
607 WHERE TABLE_NAME = pTableName
608 AND OWNER = pOwner
609 AND TEMPORARY = 'Y';
610
611 BEGIN
612 IF (g_initialized=false) THEN
613 init;
614 END IF;
615 l_count := 0;
616
617 open cTables(table_name, g_bsc_schema);
618 FETCH cTables into l_count;
619 IF (cTables%NOTFOUND) THEN
620 CLOSE cTables;
621 return false;
622 ELSE
623 CLOSE cTables;
624 return true;
625 END IF;
626 End;
627
628
629 FUNCTION parse_value(p_string IN VARCHAR2, p_property_name IN VARCHAR2, p_assignment_operator IN VARCHAR2, p_pre_separator IN VARCHAR2, p_post_separator IN VARCHAR2) return varchar2 IS
630 l_pos number;
631 l_part_string varchar2(32000);
632 l_pattern VARCHAR2(1000);
633 l_value VARCHAR2(1000);
634 BEGIN
635
636 if (p_pre_separator is null and p_post_separator is null) then -- single value, just return RHS of assignment operator
637 l_pos := instr(p_string, p_assignment_operator);
638 return substr(p_string, l_pos+1);
639 end if;
640
641
642 l_pattern := p_pre_separator||p_property_name||p_assignment_operator;
643 l_pos := instr(p_string, l_pattern);
644 if l_pos = 0 then -- check if its the first entry
645 l_pos := instr(p_string, p_property_name||p_assignment_operator);
646 if (l_pos=0) then
647 return null;
648 end if;
649 if (l_pos<>1) then
650 return null;
651 end if;
652 -- this is the first entry and is without pre separator though specified
653 l_part_string := substr(p_string, length(p_property_name||p_assignment_operator)+1);
654 else
655 l_part_string := substr(p_string, l_pos+length(l_pattern));
656 end if;
657
658
659 -- so we've reached the point in the string where the value starts
660 if (p_post_separator is not null) then -- post separator specified
661 l_pos := instr(l_part_string, p_post_separator);
662
663 if l_pos =0 then -- possibly last value without post separator though its specified
664 if (instr(l_part_string, p_assignment_operator)=0) then -- really last value
665 l_pos := length(l_part_string)+1;
666 end if;
667 end if;
668 else
669 l_pos := instr(l_part_string, p_pre_separator);
670 if l_pos=0 then -- end of string
671 return l_part_string;
672 end if;
673 end if;
674
675 l_value := substr(l_part_string, 1, l_pos-1);
676 return l_value;
677 END;
678
679 -- assumes object is valid and exists
680 -- returns apps if this does not exist
681 FUNCTION get_table_owner(p_table_name VARCHAR2) RETURN VARCHAR2 IS
682 cursor cOwner is
683 select table_owner from user_synonyms
684 where synonym_name=p_table_name;
685 l_owner varchar2(100);
686 BEGIN
687 IF NOT g_initialized THEN
688 init;
689 END IF;
690 open cOwner;
691 fetch cOwner into l_owner;
692 close cOwner;
693 IF l_owner is NOT NULL THEN
694 return l_owner;
695 ELSE
696 return g_apps_schema;
697 END IF;
698
699 END;
700
701
702 PROCEDURE drop_table(p_table_name IN VARCHAR2) IS
703 BEGIN
704 bsc_apps.init_bsc_apps;
705 bsc_apps.do_ddl(x_statement=>'drop table '||p_table_name,
706 x_statement_type=>ad_ddl.drop_table,
707 x_object_name=>p_table_name);
708 END;
709
710
711 --New API for Bug 4902308
712 PROCEDURE add_string(p_varchar2_table IN OUT NOCOPY DBMS_SQL.VARCHAR2A, p_string IN VARCHAR2) IS
713 l_index number;
714 l_current_length number;
715 l_val varchar2(32767);
716 BEGIN
717 if p_varchar2_table.count=0 then
718 p_varchar2_table(1) := p_string;
719 return;
720 end if;
721 l_index := p_varchar2_table.last;
722 if length(p_varchar2_table(l_index)) + length(p_string) > 32767 then --
723 l_index := l_index +1;
724 p_varchar2_table(l_index) := p_string;
725 return;
726 end if;
727 p_varchar2_table(l_index) := p_varchar2_table(l_index)||p_string;
728 exception when others then
729 fnd_file.put_line(FND_FILE.log, 'Error in add_string:string='||p_string||', error='||sqlerrm);
730 raise;
731 END;
732
733
734 PROCEDURE execute_immediate(p_varchar2_table IN DBMS_SQL.VARCHAR2A) IS
735 l_dummy dbms_sql.varchar2_table;
736 BEGIN
737 execute_immediate(p_varchar2_table, l_dummy, 0);
738 END;
739
740 ---------------------------------------------------------------
741 --One way to make this proc. generic is to ensure loader populates
742 --the bind variables sequentially
743 --ie assume is that all parameters are bound as :1, :2, :3 etc
744 --currently this is not the case. this requires change in bsc_update_base_v2
745 ---------------------------------------------------------------
746 PROCEDURE execute_immediate(p_varchar2_table IN DBMS_SQL.VARCHAR2A,
747 p_bind_vars_values dbms_sql.varchar2_table,
748 p_num_bind_vars number) IS
749 e_max_bind_vars_exceeded exception;
750
751 l_sql dbms_sql.varchar2a;
752
753 l_cur number;
754 dummy NUMBER;
755 BEGIN
756 fnd_file.put_line(FND_FILE.LOG, 'Chk 0, bind#='||p_num_bind_vars);
757 for i in 1..p_varchar2_table.count loop
758 l_sql(i) := p_varchar2_table(i);
759 end loop;
760 fnd_file.put_line(FND_FILE.LOG, 'Chk 1');
761
762 for i in p_varchar2_table.count+1..50 loop
763 l_sql(i) := null;
764 end loop;
765 if nvl(p_num_bind_vars,0) = 0 then
766 l_cur := dbms_sql.open_cursor;
767 dbms_sql.parse(
768 c => l_cur,
769 statement => l_sql,
770 lb => l_sql.first,
771 ub => l_sql.last,
772 lfflg => TRUE,
773 language_flag => dbms_sql.native );
774
775 dummy := dbms_sql.execute(l_cur);
776 dbms_sql.close_cursor(l_cur);
777 fnd_file.put_line(FND_FILE.LOG, 'Chk 4');
778 elsif p_num_bind_vars = 1 then
779 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
780 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
781 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
782 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
783 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
784 using p_bind_vars_values(1);
785 elsif p_num_bind_vars = 2 then
786 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
787 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
788 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
789 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
790 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
791 using p_bind_vars_values(1), p_bind_vars_values(2);
792 elsif p_num_bind_vars = 3 then
793 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
794 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
795 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
796 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
797 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
798 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3);
799 elsif p_num_bind_vars = 4 then
800 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
801 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
802 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
803 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
804 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
805 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4);
806 elsif p_num_bind_vars = 5 then
807 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
808 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
809 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
810 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
811 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
812 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5);
813 elsif p_num_bind_vars = 6 then
814 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
815 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
816 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
817 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
818 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
819 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
820 p_bind_vars_values(6);
821 elsif p_num_bind_vars = 7 then
822 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
823 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
824 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
825 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
826 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
827 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
828 p_bind_vars_values(6), p_bind_vars_values(7);
829 elsif p_num_bind_vars = 8 then
830 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
831 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
832 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
833 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
834 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
835 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
836 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8);
837 elsif p_num_bind_vars = 9 then
838 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
839 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
840 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
841 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
842 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
843 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
844 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9);
845 elsif p_num_bind_vars = 10 then
846 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
847 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
848 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
849 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
850 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
851 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
852 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10);
853 elsif p_num_bind_vars = 11 then
854 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
855 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
856 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
857 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
858 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
859 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
860 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
861 p_bind_vars_values(11);
862 elsif p_num_bind_vars = 12 then
863 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
864 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
865 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
866 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
867 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
868 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
869 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
870 p_bind_vars_values(11), p_bind_vars_values(12);
871 elsif p_num_bind_vars = 13 then
872 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
873 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
874 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
875 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
876 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
877 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
878 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
879 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13);
880 elsif p_num_bind_vars = 14 then
881 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
882 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
883 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
884 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
885 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
886 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
887 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
888 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14);
889 elsif p_num_bind_vars = 15 then
890 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
891 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
892 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
893 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
894 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
895 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
896 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
897 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15);
898 elsif p_num_bind_vars = 16 then
899 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
900 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
901 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
902 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
903 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
904 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
905 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
906 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15),
907 p_bind_vars_values(16);
908 elsif p_num_bind_vars = 17 then
909 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
910 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
911 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
912 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
913 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
914 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
915 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
916 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15),
917 p_bind_vars_values(16), p_bind_vars_values(17);
918 elsif p_num_bind_vars = 18 then
919 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
920 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
921 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
922 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
923 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
924 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
925 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
926 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15),
927 p_bind_vars_values(16), p_bind_vars_values(17), p_bind_vars_values(18);
928 elsif p_num_bind_vars = 19 then
929 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
930 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
931 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
932 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
933 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
934 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
935 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
936 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15),
937 p_bind_vars_values(16), p_bind_vars_values(17), p_bind_vars_values(18), p_bind_vars_values(19);
938 elsif p_num_bind_vars = 20 then
939 execute immediate l_sql(1) ||l_sql(2) ||l_sql(3) ||l_sql(4) ||l_sql(5) ||l_sql(6) ||l_sql(7) ||l_sql(8) ||l_sql(9) ||l_sql(10)||
940 l_sql(11)||l_sql(12)||l_sql(13)||l_sql(14)||l_sql(15)||l_sql(16)||l_sql(17)||l_sql(18)||l_sql(19)||l_sql(20)||
941 l_sql(21)||l_sql(22)||l_sql(23)||l_sql(24)||l_sql(25)||l_sql(26)||l_sql(27)||l_sql(28)||l_sql(29)||l_sql(30)||
942 l_sql(31)||l_sql(32)||l_sql(33)||l_sql(34)||l_sql(35)||l_sql(36)||l_sql(37)||l_sql(38)||l_sql(39)||l_sql(40)||
943 l_sql(41)||l_sql(42)||l_sql(43)||l_sql(44)||l_sql(45)||l_sql(46)||l_sql(47)||l_sql(48)||l_sql(49)||l_sql(50)
944 using p_bind_vars_values(1), p_bind_vars_values(2), p_bind_vars_values(3), p_bind_vars_values(4), p_bind_vars_values(5),
945 p_bind_vars_values(6), p_bind_vars_values(7), p_bind_vars_values(8), p_bind_vars_values(9), p_bind_vars_values(10),
946 p_bind_vars_values(11), p_bind_vars_values(12), p_bind_vars_values(13), p_bind_vars_values(14), p_bind_vars_values(15),
947 p_bind_vars_values(16), p_bind_vars_values(17), p_bind_vars_values(18), p_bind_vars_values(20);
948 else
949 raise e_max_bind_vars_exceeded;
950 end if;
951 exception
952 when e_max_bind_vars_exceeded then
953 fnd_file.put_line(FND_FILE.LOG,'Maximun bind variables supported by this api was exceeded');
954 raise;
955 when others then
956 fnd_file.put_line(FND_FILE.LOG,'Error in execute_immediate: error='||sqlerrm||', count = '||p_varchar2_table.count||', bind#='||p_num_bind_vars);
957 for i in 1..p_varchar2_table.count loop
958 for j in 1..128 loop
959 fnd_file.put_line(FND_FILE.LOG, substr(p_varchar2_table(i), (j-1)*256+1, 256));
960 end loop;
961 end loop;
962 raise;
963 END;
964
965
966
967
968 END BSC_DBGEN_UTILS;