[Home] [Help]
PACKAGE BODY: APPS.PV_CATEGORY_MIGRATION
Source
1 PACKAGE BODY PV_CATEGORY_MIGRATION AS
2 /* $Header: pvsphmib.pls 120.0 2005/05/27 15:25:11 appldev noship $ */
3
4 /*************************************************************************************/
5 /* */
6 /* */
7 /* */
8 /* Global Variable Declaration */
9 /* */
10 /* */
11 /* */
12 /*************************************************************************************/
13 g_log_to_file VARCHAR2(5) := 'Y';
14 g_pkg_name VARCHAR2(30) := 'PV_CATEGORY_MIGRATION';
15 g_api_name VARCHAR2(30);
16
17
18
19 /*************************************************************************************/
20 /* */
21 /* */
22 /* */
23 /* private procedure declaration */
24 /* */
25 /* */
26 /* */
27 /*************************************************************************************/
28 PROCEDURE Debug(
29 p_msg_string IN VARCHAR2,
30 p_msg_type IN VARCHAR2 := 'PV_DEBUG_MESSAGE',
31 p_token_type IN VARCHAR2 := 'TEXT',
32 p_statement_level IN NUMBER := FND_LOG.LEVEL_PROCEDURE
33 );
34
35 PROCEDURE Set_Message(
36 p_msg_name IN VARCHAR2,
37 p_token1 IN VARCHAR2 := NULL,
38 p_token1_value IN VARCHAR2 := NULL,
39 p_token2 IN VARCHAR2 := NULL,
40 p_token2_value IN VARCHAR2 := NULL,
41 p_token3 IN VARCHAR2 := NULL,
42 p_token3_value IN VARCHAR2 := NULL,
43 p_statement_level IN NUMBER := FND_LOG.LEVEL_PROCEDURE
44 );
45
46
47 --=============================================================================+
48 --| Public Procedure |
49 --| Category_Migration |
50 --| |
51 --| Purpose |
52 --| This script is used to migrate pv_enty_attr_values and |
53 --| pv_selected_attr_values to single product hierarchy. |
54 --| |
55 --| |
56 --| NOTES |
57 --| |
58 --| HISTORY |
59 --| |
60 --==============================================================================
61
62 PROCEDURE Category_Migration (
63 ERRBUF OUT NOCOPY VARCHAR2,
64 RETCODE OUT NOCOPY VARCHAR2,
65 p_trace_mode IN VARCHAR2,
66 p_log_to_file IN VARCHAR2 := 'Y')
67 IS
68 l_status BOOLEAN;
69 l_no_data_found BOOLEAN := TRUE;
70 l_string VARCHAR2(300);
71 l_update_ddl VARCHAR2(4000);
72 l_pv_schema VARCHAR2(30);
73 l_index_tablespace VARCHAR2(30);
74 l_rows_inserted NUMBER;
75 l_revert_entity_attr BOOLEAN := FALSE;
76 l_revert_selected_attr BOOLEAN := FALSE;
77
78
79 CURSOR c_enty_attr_values IS
80 SELECT DISTINCT
81 b.code old_value, b.product_category_id
82 FROM pv_enty_attr_values a,
83 (
84 select interest_type code,
85 TO_CHAR(interest_type_id) id,
86 product_category_id
87 from as_interest_types_vl
88 union
89 select i.interest_type ||'/'||p.code code,
90 i.interest_type_id ||'/'||p.interest_code_id id,
91 p.product_category_id
92 from as_interest_types_vl i, as_interest_codes_vl p
93 where i.interest_type_id*1 = p.interest_type_id and
94 p.parent_interest_code_id is null
95 union
96 select i.interest_type ||'/'||p.code ||'/'||s.code code,
97 i.interest_type_id ||'/'||p.interest_code_id ||'/'||s.interest_code_id id,
98 s.product_category_id
99 from as_interest_types_vl i, as_interest_codes_vl p,
100 as_interest_codes_vl s
101 where i.interest_type_id = p.interest_type_id and
102 p.interest_type_id = s.interest_type_id*1 and
103 s.parent_interest_code_id = p.interest_code_id
104 ) b
105 WHERE a.attr_value = b.id AND
106 a.attribute_id IN (1, 510) AND
107 b.product_category_id IS NULL;
108
109
110 CURSOR c_selected_attr_values IS
111 SELECT DISTINCT
112 a.attribute_value old_value
113 FROM pv_selected_attr_values a,
114 pv_enty_select_criteria c,
115 (
116 select interest_type code,
117 TO_CHAR(interest_type_id) id,
118 product_category_id
119 from as_interest_types_vl
120 union
121 select i.interest_type ||'/'||p.code code,
122 i.interest_type_id ||'/'||p.interest_code_id id,
123 p.product_category_id
124 from as_interest_types_vl i, as_interest_codes_vl p
125 where i.interest_type_id*1 = p.interest_type_id and
126 p.parent_interest_code_id is null
127 union
128 select i.interest_type ||'/'||p.code ||'/'||s.code code,
129 i.interest_type_id ||'/'||p.interest_code_id ||'/'||s.interest_code_id id,
130 s.product_category_id
131 from as_interest_types_vl i, as_interest_codes_vl p,
132 as_interest_codes_vl s
133 where i.interest_type_id = p.interest_type_id and
134 p.interest_type_id = s.interest_type_id*1 and
135 s.parent_interest_code_id = p.interest_code_id
136 ) b
137 WHERE b.id = a.attribute_value AND
138 a.selectioN_criteria_id = c.selection_criteria_id AND
139 c.attribute_id IN (1, 510) AND
140 b.product_category_id IS NULL;
141
142
143 l_insert_into_table1 VARCHAR2(32000) :=
144 'INSERT INTO pv_single_prod_h_mappings
145 SELECT a.enty_attr_val_id,
146 b.product_category_id new_value,
147 b.code old_value
148 FROM pv_enty_attr_values a,
149 (
150 select to_char(interest_type_id) code, product_category_id
151 from as_interest_types_b
152 union
153 select to_char(i.interest_type_id)||''/''||p.interest_code_id code,
154 p.product_category_id
155 from as_interest_types_b i, as_interest_codes_b p
156 where i.interest_type_id*1 = p.interest_type_id and
157 p.parent_interest_code_id is null
158 union
159 select to_char(i.interest_type_id)||''/''||p.interest_code_id||''/''||
160 s.interest_code_id code,
161 s.product_category_id
162 from as_interest_types_b i, as_interest_codes_b p, as_interest_codes_b s
163 where i.interest_type_id = p.interest_type_id and
164 p.interest_type_id = s.interest_type_id*1 and
165 s.parent_interest_code_id = p.interest_code_id
166 ) b
167 WHERE a.attr_value = b.code AND
168 a.attribute_id IN (1, 510)';
169
170 l_insert_into_table2 VARCHAR2(32000) :=
171 'INSERT INTO pv_single_prod_h_mappings2
172 SELECT a.attr_value_id,
173 b.product_category_id new_value,
174 a.attribute_value old_value
175 FROM pv_selected_attr_values a,
176 pv_enty_select_criteria c,
177 (
178 select to_char(interest_type_id) code, product_category_id
179 from as_interest_types_b
180 union
181 select to_char(i.interest_type_id)||''/''||p.interest_code_id code,
182 p.product_category_id
183 from as_interest_types_b i, as_interest_codes_b p
184 where i.interest_type_id*1 = p.interest_type_id and
185 p.parent_interest_code_id is null
186 union
187 select to_char(i.interest_type_id)||''/''||p.interest_code_id||''/''||
188 s.interest_code_id code,
189 s.product_category_id
190 from as_interest_types_b i, as_interest_codes_b p, as_interest_codes_b s
191 where i.interest_type_id = p.interest_type_id and
192 p.interest_type_id = s.interest_type_id*1 and
193 s.parent_interest_code_id = p.interest_code_id
194 ) b
195 WHERE b.code = a.attribute_value AND
196 a.selectioN_criteria_id = c.selection_criteria_id AND
197 c.attribute_id IN (1, 510)';
198
199 -- -----------------------------------------------------------------------------
200 -- This cursor is used for retrieving PV schema.
201 -- -----------------------------------------------------------------------------
202 CURSOR c_pv_schema IS
203 SELECT i.tablespace,
204 i.index_tablespace,
205 u.oracle_username
206 FROM fnd_product_installations i,
207 fnd_application a,
208 fnd_oracle_userid u
209 WHERE a.application_short_name = 'PV' AND
210 a.application_id = i.application_id AND
211 u.oracle_id = i.oracle_id;
212
213 BEGIN
214 -- ----------------------------------------------------------------------------
215 -- Initialize variables.
216 -- ----------------------------------------------------------------------------
217 IF p_trace_mode = 'Y' THEN
218 dbms_session.set_sql_trace(TRUE);
219 ELSE
220 dbms_session.set_sql_trace(FALSE);
221 END IF;
222
223 IF (p_log_to_file <> 'Y') THEN
224 g_log_to_file := 'N';
225 ELSE
226 g_log_to_file := 'Y';
227 END IF;
228
229 g_api_name := 'Category_Migration';
230
231
232 -- ----------------------------------------------------------------------------
233 -- Starts migration.
234 -- ----------------------------------------------------------------------------
235
236 -- -----------------------------------------------------------------------
237 -- Revert Single Product Hierarchy back to Sales Product Hierarchy.
238 -- This is to ensure that this concurrent program is re-runnable.
239 -- -----------------------------------------------------------------------
240 Debug('(1).');
241 Set_Message(
242 p_msg_name => 'PV_SPH_REVERT_BACK'
243 );
244
245 FOR x IN (SELECT 'x' row_exists FROM pv_single_prod_h_mappings) LOOP
246 l_revert_entity_attr := TRUE;
247 END LOOP;
248
249 FOR x IN (SELECT 'x' row_exists FROM pv_single_prod_h_mappings2) LOOP
250 l_revert_selected_attr := TRUE;
251 END LOOP;
252
253 -- -----------------------------------------------------------------------
254 -- pv_enty_attr_values: revert back to Sales Product Hierarchy.
255 -- -----------------------------------------------------------------------
256 IF (l_revert_entity_attr) THEN
257 l_update_ddl :=
258 'UPDATE pv_enty_attr_values a
259 SET attr_value = (SELECT old_value
260 FROM pv_single_prod_h_mappings b
261 WHERE a.enty_attr_val_id = b.enty_attr_val_id)
262 WHERE EXISTS (SELECT 1
263 FROM pv_single_prod_h_mappings c
264 WHERE a.enty_attr_val_id = c.enty_attr_val_id)';
265
266 l_string := SUBSTR(l_update_ddl, 1, 300);
267
268 EXECUTE IMMEDIATE l_update_ddl;
269
270 Set_Message(
271 p_msg_name => 'PV_SPH_ROWS_UPDATED',
272 p_token1 => 'ROWS',
273 p_token1_value => SQL%ROWCOUNT
274 );
275
276 END IF;
277
278
279 -- -----------------------------------------------------------------------
280 -- pv_selected_attr_values: revert back to Sales Product Hierarchy.
281 -- -----------------------------------------------------------------------
282 IF (l_revert_selected_attr) THEN
283 l_update_ddl :=
284 'UPDATE pv_selected_attr_values a
285 SET attribute_value =
286 (SELECT old_value
287 FROM pv_single_prod_h_mappings2 b
288 WHERE a.attr_value_id = b.attr_value_id)
289 WHERE EXISTS (SELECT 1
290 FROM pv_single_prod_h_mappings2 c
291 WHERE a.attr_value_id = c.attr_value_id)';
292
293 l_string := SUBSTR(l_update_ddl, 1, 300);
294
295 EXECUTE IMMEDIATE l_update_ddl;
296
297 Set_Message(
298 p_msg_name => 'PV_SPH_ROWS_UPDATED',
299 p_token1 => 'ROWS',
300 p_token1_value => SQL%ROWCOUNT
301 );
302 END IF;
303
304 -- -----------------------------------------------------------------------
305 -- Check if all the data in pv_enty_attr_values have proper mapping.
306 -- -----------------------------------------------------------------------
307 l_no_data_found := TRUE;
308
309 Debug('-');
310 Debug('-');
311 Debug('(2).');
312 Set_Message(
313 p_msg_name => 'PV_SPH_NO_MAPPING',
314 p_token1 => 'TABLE',
318 Debug('------------------------------------------------------------');
315 p_token1_value => 'pv_enty_attr_values'
316 );
317 Debug('-');
319
320 FOR x IN c_enty_attr_values LOOP
321 Debug(LPAD(x.old_value, 60));
322 l_no_data_found := FALSE;
323 END LOOP;
324
325 IF (l_no_data_found) THEN
326 Debug('-');
327 Debug('-');
328 Set_Message(
329 p_msg_name => 'PV_SPH_NO_ROWS_RETURNED'
330 );
331 Debug('-');
332
333 ELSE
334 Debug('-');
335 Debug('-');
336 Set_Message(
337 p_msg_name => 'PV_SPH_OPERATION_ABORTED'
338 );
339 Debug('-');
340 Debug('-');
341
342 RETCODE := '1';
343
344 RETURN;
345 END IF;
346
347
348 Debug('-');
349 Debug('-');
350 Debug('(3).');
351 Set_Message(
352 p_msg_name => 'PV_SPH_NO_MAPPING',
353 p_token1 => 'TABLE',
354 p_token1_value => 'pv_selected_attr_values'
355 );
356 Debug('-');
357 Debug('------------------------------------------------------------');
358 Debug('-');
359 Debug('-');
360
361 FOR x IN c_selected_attr_values LOOP
362 Debug(LPAD(x.old_value, 60));
363 l_no_data_found := FALSE;
364 END LOOP;
365
366 IF (l_no_data_found) THEN
367 Set_Message(
368 p_msg_name => 'PV_SPH_NO_ROWS_RETURNED'
369 );
370 Debug('-');
371
372 ELSE
373 Debug('-');
374 Debug('-');
375 Set_Message(
376 p_msg_name => 'PV_SPH_OPERATION_ABORTED'
377 );
378 Debug('-');
379 Debug('-');
380
381 RETCODE := '1';
382
383 RETURN;
384 END IF;
385
386
387 Debug('-');
388 Debug('-');
389 Debug('==============================================================');
390 Set_Message(
391 p_msg_name => 'PV_SPH_DATA_VALIDATION_DONE'
392 );
393 Debug('==============================================================');
394 Debug('-');
395 Debug('-');
396
397 Debug('(4).');
398
399 Set_Message(
400 p_msg_name => 'PV_SPH_POPULATE_MAPPING',
401 p_token1 => 'TABLE1',
402 p_token1_value => 'pv_single_prod_h_mappings',
403 p_token2 => 'TABLE2',
404 p_token2_value => 'pv_enty_attr_values'
405 );
406
407 Debug('-');
408
409 -- -------------------------------------------------------------------------
410 -- Retrieve PV schema name. The schema for PV may not always be "PV". It
411 -- depends on the implementation. Hence, we can't hard code the name.
412 -- -------------------------------------------------------------------------
413 FOR x IN c_pv_schema LOOP
414 l_pv_schema := x.oracle_username;
415 l_index_tablespace := x.index_tablespace;
416 END LOOP;
417
418
419 BEGIN
420 l_string := 'DROP INDEX ' || l_pv_schema || '.pv_single_prod_h_mappings_u1';
421 EXECUTE IMMEDIATE l_string;
422
423 EXCEPTION
424 WHEN OTHERS THEN
425 null;
426 END;
427
428 l_string := 'TRUNCATE TABLE ' || l_pv_schema || '.pv_single_prod_h_mappings';
429 EXECUTE IMMEDIATE l_string;
430
431 l_string := SUBSTR(l_insert_into_table1, 1, 300);
432 EXECUTE IMMEDIATE l_insert_into_table1;
433
434 l_rows_inserted := SQL%ROWCOUNT;
435
436 Set_Message(
437 p_msg_name => 'PV_SPH_ROWS_INSERTED',
438 p_token1 => 'ROWS',
439 p_token1_value => l_rows_inserted
440 );
441
442 l_string := 'CREATE UNIQUE INDEX ' || l_pv_schema ||
443 '.pv_single_prod_h_mappings_u1 ' ||
444 'ON pv_single_prod_h_mappings (enty_attr_val_id) ' ||
445 'TABLESPACE ' || l_index_tablespace;
449 '.pv_single_prod_h_mappings COMPUTE STATISTICS';
446 EXECUTE IMMEDIATE l_string;
447
448 l_string := 'ANALYZE TABLE ' || l_pv_schema ||
450 EXECUTE IMMEDIATE l_string;
451
452
453
454 Debug('-');
455 Debug('(5).');
456 Set_Message(
457 p_msg_name => 'PV_SPH_POPULATE_MAPPING',
458 p_token1 => 'TABLE1',
459 p_token1_value => 'pv_single_prod_h_mappings2',
460 p_token2 => 'TABLE2',
461 p_token2_value => 'pv_selected_attr_values'
462 );
463
464 Debug('-');
465
466 BEGIN
467 l_string := 'DROP INDEX ' || l_pv_schema || '.pv_single_prod_h_mappings2_u1';
468 EXECUTE IMMEDIATE l_string;
469
470 EXCEPTION
471 WHEN OTHERS THEN
472 null;
473 END;
474
475
476 l_string := 'TRUNCATE TABLE ' || l_pv_schema || '.pv_single_prod_h_mappings2';
477 EXECUTE IMMEDIATE l_string;
478
479
480 l_string := SUBSTR(l_insert_into_table2, 1, 300);
481 EXECUTE IMMEDIATE l_insert_into_table2;
482
483 l_rows_inserted := SQL%ROWCOUNT;
484 Set_Message(
485 p_msg_name => 'PV_SPH_ROWS_INSERTED',
486 p_token1 => 'ROWS',
487 p_token1_value => l_rows_inserted
488 );
489
490
491 l_string := 'CREATE UNIQUE INDEX ' || l_pv_schema ||
492 '.pv_single_prod_h_mappings2_u1 ' ||
493 'ON pv_single_prod_h_mappings2 (attr_value_id) ' ||
494 'TABLESPACE ' || l_index_tablespace;
495 EXECUTE IMMEDIATE l_string;
496
497 l_string := 'ANALYZE TABLE ' || l_pv_schema ||
498 '.pv_single_prod_h_mappings2 COMPUTE STATISTICS';
499 EXECUTE IMMEDIATE l_string;
500
501 Debug('-');
502
503
504 -- -----------------------------------------------------------------------
505 -- Update pv_enty_attr_values
506 -- -----------------------------------------------------------------------
507 Debug('(6).');
508 Set_Message(
509 p_msg_name => 'PV_SPH_UPDATE_TABLE',
510 p_token1 => 'TABLE',
511 p_token1_value => 'pv_enty_attr_values'
512 );
513 Debug('-');
514
515 l_update_ddl :=
516 'UPDATE pv_enty_attr_values a
517 SET attr_value = (SELECT new_value
518 FROM pv_single_prod_h_mappings b
519 WHERE a.enty_attr_val_id = b.enty_attr_val_id)
520 WHERE EXISTS (SELECT 1
521 FROM pv_single_prod_h_mappings c
522 WHERE a.enty_attr_val_id = c.enty_attr_val_id)';
523
524 l_string := SUBSTR(l_update_ddl, 1, 300);
525
526 EXECUTE IMMEDIATE l_update_ddl;
527
528 Set_Message(
529 p_msg_name => 'PV_SPH_ROWS_UPDATED',
530 p_token1 => 'ROWS',
531 p_token1_value => SQL%ROWCOUNT
532 );
533 Debug('-');
534 Debug('-');
535
536
537 -- -----------------------------------------------------------------------
538 -- Update pv_selected_attr_values
539 -- -----------------------------------------------------------------------
540 Debug('(7).');
541 Set_Message(
542 p_msg_name => 'PV_SPH_UPDATE_TABLE',
543 p_token1 => 'TABLE',
544 p_token1_value => 'pv_selected_attr_values'
545 );
546 Debug('-');
547
548 l_update_ddl :=
549 'UPDATE pv_selected_attr_values a
550 SET attribute_value =
551 (SELECT new_value
552 FROM pv_single_prod_h_mappings2 b
553 WHERE a.attr_value_id = b.attr_value_id)
554 WHERE EXISTS (SELECT 1
555 FROM pv_single_prod_h_mappings2 c
556 WHERE a.attr_value_id = c.attr_value_id)';
557
558 l_string := SUBSTR(l_update_ddl, 1, 300);
559
560 EXECUTE IMMEDIATE l_update_ddl;
561
562 Set_Message(
563 p_msg_name => 'PV_SPH_ROWS_UPDATED',
564 p_token1 => 'ROWS',
565 p_token1_value => SQL%ROWCOUNT
566 );
567 Debug('-');
568 Debug('-');
569
570
571
572 Set_Message(
573 p_msg_name => 'PV_SPH_MIGRATION_COMPLETED'
574 );
575 Debug('-');
576 Set_Message(
577 p_msg_name => 'PV_SPH_VIEW_MAPPING_TABLE',
578 p_token1 => 'TABLE1',
579 p_token1_value => 'pv_enty_attr_values',
580 p_token2 => 'TABLE2',
581 p_token2_value => 'pv_single_prod_h_mappings'
582 );
583
584 Debug('-');
585 Debug('SELECT old_value, new_value');
586 Debug('FROM pv_single_prod_h_mappings;');
587 Debug('-');
588 Debug('-');
589
590 Set_Message(
591 p_msg_name => 'PV_SPH_VIEW_MAPPING_TABLE',
592 p_token1 => 'TABLE1',
593 p_token1_value => 'pv_selected_attr_values',
594 p_token2 => 'TABLE2',
595 p_token2_value => 'pv_single_prod_h_mappings2'
599 Debug('SELECT old_value, new_value');
596 );
597
598 Debug('-');
600 Debug('FROM pv_single_prod_h_mappings2;');
601 Debug('-');
602 Debug('-');
603
604
605 EXCEPTION
606 WHEN OTHERS THEN
607 Debug('Exception raised while running the script...');
608 Debug('SQLCODE : ' || SQLCODE);
609 Debug('SQLERRM : ' || SQLERRM);
610 Debug('-');
611 Debug('Error encountered while executing the following statement:');
612 Debug(l_string);
613 Debug('-');
614 Debug('-');
615
616 errbuf := SQLERRM;
617 retcode := FND_API.G_RET_STS_UNEXP_ERROR;
618 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
619
620 END CATEGORY_MIGRATION;
621
622
623
624 --=============================================================================+
625 --| Private Procedure |
626 --| |
627 --| Debug |
628 --| |
629 --| Parameters |
630 --| IN |
631 --| OUT |
632 --| |
633 --| |
634 --| NOTES: |
635 --| |
636 --| HISTORY |
637 --| |
638 --==============================================================================
639 PROCEDURE Debug(
640 p_msg_string IN VARCHAR2,
641 p_msg_type IN VARCHAR2 := 'PV_DEBUG_MESSAGE',
642 p_token_type IN VARCHAR2 := 'TEXT',
643 p_statement_level IN NUMBER := FND_LOG.LEVEL_PROCEDURE
644 )
645 IS
646 BEGIN
647 FND_MESSAGE.Set_Name('PV', p_msg_type);
648 FND_MESSAGE.Set_Token(p_token_type, p_msg_string);
649
650 IF (g_log_to_file = 'N') THEN
651 FND_MSG_PUB.Add;
652
653 ELSIF (g_log_to_file = 'Y') THEN
654 FND_FILE.PUT_LINE( FND_FILE.LOG, fnd_message.get );
655 END IF;
656
657 IF (p_statement_level >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
658 FND_LOG.STRING(p_statement_level,
659 'pv.plsql.' || g_pkg_name || '.' || g_api_name,
660 p_msg_string
661 );
662 END IF;
663 END Debug;
664 -- =================================End of Debug================================
665
666 --=============================================================================+
667 --| Public Procedure |
668 --| |
669 --| Set_Message |
670 --| |
671 --| Parameters |
672 --| IN |
673 --| OUT |
674 --| |
675 --| |
676 --| NOTES: |
677 --| |
678 --| HISTORY |
679 --| |
680 --==============================================================================
681 PROCEDURE Set_Message(
682 p_msg_name IN VARCHAR2,
683 p_token1 IN VARCHAR2 := NULL,
684 p_token1_value IN VARCHAR2 := NULL,
685 p_token2 IN VARCHAR2 := NULL,
689 p_statement_level IN NUMBER := FND_LOG.LEVEL_PROCEDURE
686 p_token2_value IN VARCHAR2 := NULL,
687 p_token3 IN VARCHAR2 := NULL,
688 p_token3_value IN VARCHAR2 := NULL,
690 )
691 IS
692 BEGIN
693 FND_MESSAGE.Set_Name('PV', p_msg_name);
694
695 IF (p_token1 IS NOT NULL) THEN
696 FND_MESSAGE.Set_Token(p_token1, p_token1_value);
697 END IF;
698
699 IF (p_token2 IS NOT NULL) THEN
700 FND_MESSAGE.Set_Token(p_token2, p_token2_value);
701 END IF;
702
703 IF (p_token3 IS NOT NULL) THEN
704 FND_MESSAGE.Set_Token(p_token3, p_token3_value);
705 END IF;
706
707 IF (p_statement_level >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
708 FND_LOG.MESSAGE(
709 p_statement_level,
710 'pv.plsql.' || g_pkg_name || '.' || g_api_name,
711 FALSE
712 );
713 END IF;
714
715 IF (g_log_to_file = 'N') THEN
716 FND_MSG_PUB.Add;
717
718 ELSIF (g_log_to_file = 'Y') THEN
719 FND_FILE.PUT_LINE(FND_FILE.LOG, fnd_message.get);
720 END IF;
721
722 END Set_Message;
723 -- ==============================End of Set_Message==============================
724
725
726 end PV_CATEGORY_MIGRATION;