[Home] [Help]
PACKAGE BODY: APPS.FUN_RULE_UTILITY_PKG
Source
1 PACKAGE BODY FUN_RULE_UTILITY_PKG AS
2 /*$Header: FUNXTMRULGENUTB.pls 120.3 2006/02/22 10:51:20 ammishra noship $ */
3
4 --------------------------------------
5 -- declaration of private global varibles
6 --------------------------------------
7
8 G_SPECIAL_STRING CONSTANT VARCHAR2(4):= '%#@*';
9 G_LENGTH CONSTANT NUMBER := LENGTHB( G_SPECIAL_STRING );
10
11 TYPE VAL_TAB_TYPE IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
12
13 -- file handler we will use for log file.
14 G_FILE UTL_FILE.FILE_TYPE;
15
16 -- running in file debug mode.
17 G_FILE_DEBUG BOOLEAN := FALSE;
18 G_FILE_NAME VARCHAR2(100);
19 G_FILE_PATH VARCHAR2(200);
20
21 -- running in normal debug mode by calling dbms_output.
22 G_DBMS_DEBUG BOOLEAN := FALSE;
23
24 -- buffer size used by dbms_output.debug
25 G_BUFFER_SIZE CONSTANT NUMBER := 1000000;
26 G_MAX_LINE_SIZE_OF_FILE CONSTANT NUMBER := 1023;
27 G_MAX_LINE_SIZE_OF_DBMS CONSTANT NUMBER := 255;
28
29 -- level of debug has been called.
30 G_COUNT NUMBER := 0;
31
32 --------------------------------------
33 -- define the internal table that will cache values
34 --------------------------------------
35
36 VAL_TAB VAL_TAB_TYPE; -- the table of values
37 TABLE_SIZE BINARY_INTEGER := 2048; -- the size of above tables
38 LOOKUP_MEANING_TAB VAL_TAB_TYPE;
39
40
41 INVAILD_DATA_TYPE EXCEPTION;
42 INVAILD_LENGTH_TYPE EXCEPTION;
43 --------------------------------------
44 -- declaration of private procedures and functions
45 --------------------------------------
46
47 FUNCTION get_index (
48 p_val IN VARCHAR2
49 ) RETURN BINARY_INTEGER;
50
51 FUNCTION put (
52 p_val IN VARCHAR2
53 ) RETURN BINARY_INTEGER;
54
55 FUNCTION search (
56 p_val IN VARCHAR2,
57 p_category IN VARCHAR2
58 ) RETURN BOOLEAN;
59
60
61 FUNCTION search (
62 p_val IN VARCHAR2,
63 p_category IN VARCHAR2,
64 x_lookup_meaning OUT NOCOPY VARCHAR2
65 ) RETURN BOOLEAN;
66
67 --------------------------------------
68 -- private procedures and functions
69 --------------------------------------
70 /**
71 * PRIVATE FUNCTION get_index
72 *
73 * DESCRIPTION
74 * Gets index in caching table for a specified value.
75 *
76 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
77 *
78 * ARGUMENTS
79 * IN:
80 * p_val Specified value.
81 *
82 * NOTES
83 *
84 * MODIFICATION HISTORY
85 *
86 * 10-Sep-2004 Amulya Mishra Created.
87 *
88 */
89
90 FUNCTION get_index (
91 p_val IN VARCHAR2
92 ) RETURN BINARY_INTEGER IS
93
94 l_table_index BINARY_INTEGER;
95 l_found BOOLEAN := FALSE;
96 l_hash_value NUMBER;
97
98 BEGIN
99
100 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
101
102 IF VAL_TAB.EXISTS(l_table_index) THEN
103 IF VAL_TAB(l_table_index) = p_val THEN
104 RETURN l_table_index;
105 ELSE
106 l_hash_value := l_table_index;
107 l_table_index := l_table_index + 1;
108 l_found := FALSE;
109
110 WHILE ( l_table_index < TABLE_SIZE ) AND ( NOT l_found ) LOOP
111 IF VAL_TAB.EXISTS(l_table_index) THEN
112 IF VAL_TAB(l_table_index) = p_val THEN
113 l_found := TRUE;
114 ELSE
115 l_table_index := l_table_index + 1;
116 END IF;
117 ELSE
118 RETURN TABLE_SIZE + 1;
119 END IF;
120 END LOOP;
121
122 IF NOT l_found THEN -- Didn't find any till the end
123 l_table_index := 1; -- Start from the beginning
124
125 WHILE ( l_table_index < l_hash_value ) AND ( NOT l_found ) LOOP
126 IF VAL_TAB.EXISTS(l_table_index) THEN
127 IF VAL_TAB(l_table_index) = p_val THEN
128 l_found := TRUE;
129 ELSE
130 l_table_index := l_table_index + 1;
131 END IF;
132 ELSE
133 RETURN TABLE_SIZE + 1;
134 END IF;
135 END LOOP;
136 END IF;
137
138 IF NOT l_found THEN
139 RETURN TABLE_SIZE + 1; -- Return a higher value
140 END IF;
141 END IF;
142 ELSE
143 RETURN TABLE_SIZE + 1;
144 END IF;
145
146 RETURN l_table_index;
147
148 EXCEPTION
149 WHEN OTHERS THEN -- The entry doesn't exists
150 RETURN TABLE_SIZE + 1;
151
152 END get_index;
153
154 /**
155 * PRIVATE FUNCTION put
156 *
157 * DESCRIPTION
158 * Put value in caching table and return table index.
159 *
160 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
161 *
162 * ARGUMENTS
163 * IN:
164 * p_val Specified value.
165 *
166 * NOTES
167 *
168 * MODIFICATION HISTORY
169 *
170 * 10-Sep-2004 Amulya Mishra Created.
171 *
172 */
173
174 FUNCTION put (
175 p_val IN VARCHAR2
176 ) RETURN BINARY_INTEGER IS
177
178 l_table_index BINARY_INTEGER;
179 l_stored BOOLEAN := FALSE;
180 l_hash_value NUMBER;
181
182 BEGIN
183
184 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
185
186 IF VAL_TAB.EXISTS(l_table_index) THEN
187 IF VAL_TAB(l_table_index) <> p_val THEN --Collision
188 l_hash_value := l_table_index;
189 l_table_index := l_table_index + 1;
190
191 WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
192 IF VAL_TAB.EXISTS(l_table_index) THEN
193 IF VAL_TAB(l_table_index) <> p_val THEN
194 l_table_index := l_table_index + 1;
195 END IF;
196 ELSE
197 VAL_TAB(l_table_index) := p_val;
198 l_stored := TRUE;
199 END IF;
200 END LOOP;
201
202 IF NOT l_stored THEN --Didn't find any free bucket till the end
203 l_table_index := 1;
204
205 WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
206 IF VAL_TAB.EXISTS(l_table_index) THEN
207 IF VAL_TAB(l_table_index) <> p_val THEN
208 l_table_index := l_table_index + 1;
209 END IF;
210 ELSE
211 VAL_TAB(l_table_index) := p_val;
212 l_stored := TRUE;
213 END IF;
214 END LOOP;
215 END IF;
216
217 END IF;
218 ELSE
219 VAL_TAB(l_table_index) := p_val;
220 END IF;
221
222 RETURN l_table_index;
223 EXCEPTION
224 WHEN OTHERS THEN
225 NULL;
226
227 END put;
228
229 /**
230 * PRIVATE FUNCTION search
231 *
232 * DESCRIPTION
233 * Find value with a specified category, for instance, lookup.
234 *
235 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
236 *
237 * ARGUMENTS
238 * IN:
239 * p_val Specified value.
240 * p_category Value category. We only support
241 * category LOOKUP for now.
242 * OUT:
243 * x_lookup_meaning Lookup Meaning
244 *
245 * NOTES
246 *
247 * MODIFICATION HISTORY
248 *
249 * 10-Sep-2004 Amulya Mishra Created.
250 *
251 */
252
253 FUNCTION search (
254 p_val IN VARCHAR2,
255 p_category IN VARCHAR2,
256 x_lookup_meaning OUT NOCOPY VARCHAR2
257 ) RETURN BOOLEAN IS
258
259 l_table_index BINARY_INTEGER;
260 l_return BOOLEAN;
261
262 l_dummy VARCHAR2(1);
263 l_position1 NUMBER;
264 l_position2 NUMBER;
265
266 l_lookup_table VARCHAR2(30);
267 l_lookup_type AR_LOOKUPS.lookup_type%TYPE;
268 l_lookup_code AR_LOOKUPS.lookup_code%TYPE;
269
270 l_relationship_type VARCHAR2(30);
271 l_incl_unrelated_entities VARCHAR2(1);
272
273 BEGIN
274
275 -- search for the value
276 l_table_index := get_index( p_val || G_SPECIAL_STRING || p_category );
277
278 IF l_table_index < table_size THEN
279 l_return := TRUE;
280 IF p_category = 'LOOKUP' THEN
281 x_lookup_meaning := LOOKUP_MEANING_TAB(l_table_index);
282 END IF;
283 ELSE
284 --Can't find the value in the table; look in the database
285 IF p_category = 'LOOKUP' THEN
286
287 l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
288 l_lookup_table := SUBSTRB( p_val, 1, l_position1 - 1 );
289 l_position2 := INSTRB( p_val, G_SPECIAL_STRING, 1, 2 );
290 l_lookup_type := SUBSTRB( p_val, l_position1 + G_LENGTH,
291 l_position2 - l_position1 - G_LENGTH );
292 l_lookup_code := SUBSTRB( p_val, l_position2 + G_LENGTH );
293
294 IF UPPER( l_lookup_table ) = 'AR_LOOKUPS' THEN
295 BEGIN
296 SELECT meaning INTO x_lookup_meaning
297 FROM AR_LOOKUPS
298 WHERE LOOKUP_TYPE = l_lookup_type
299 AND LOOKUP_CODE = l_lookup_code
300 AND ( ENABLED_FLAG = 'Y' AND
301 TRUNC( SYSDATE ) BETWEEN
302 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
303 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
304
305 l_return := TRUE;
306 EXCEPTION
307 WHEN NO_DATA_FOUND THEN
308 l_return := FALSE;
309 END;
310 ELSIF UPPER( l_lookup_table ) = 'SO_LOOKUPS' THEN
311 BEGIN
312 SELECT meaning INTO x_lookup_meaning
313 FROM SO_LOOKUPS
314 WHERE LOOKUP_TYPE = l_lookup_type
315 AND LOOKUP_CODE = l_lookup_code
316 AND ( ENABLED_FLAG = 'Y' AND
317 TRUNC( SYSDATE ) BETWEEN
318 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
319 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
320
321 l_return := TRUE;
322 EXCEPTION
323 WHEN NO_DATA_FOUND THEN
324 l_return := FALSE;
325 END;
326 ELSIF UPPER( l_lookup_table ) = 'OE_SHIP_METHODS_V' THEN
327 BEGIN
328 SELECT meaning INTO x_lookup_meaning
329 FROM OE_SHIP_METHODS_V
330 WHERE LOOKUP_TYPE = l_lookup_type
331 AND LOOKUP_CODE = l_lookup_code
332 AND ( ENABLED_FLAG = 'Y' AND
333 TRUNC( SYSDATE ) BETWEEN
334 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
335 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
336 AND ROWNUM = 1;
337
338 l_return := TRUE;
339 EXCEPTION
340 WHEN NO_DATA_FOUND THEN
341 l_return := FALSE;
342 END;
343 ELSIF UPPER( l_lookup_table ) = 'FND_LOOKUP_VALUES' THEN
344 BEGIN
345 SELECT meaning INTO x_lookup_meaning
346 FROM FND_LOOKUP_VALUES
347 WHERE LOOKUP_TYPE = l_lookup_type
348 AND LOOKUP_CODE = l_lookup_code
349 AND ( ENABLED_FLAG = 'Y' AND
350 TRUNC( SYSDATE ) BETWEEN
351 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
352 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
353 AND ROWNUM = 1;
354
355 l_return := TRUE;
356 EXCEPTION
357 WHEN NO_DATA_FOUND THEN
358 l_return := FALSE;
359 END;
360 ELSIF UPPER( l_lookup_table ) = 'FND_LANGUAGES' THEN
361 BEGIN
362 SELECT nls_language INTO x_lookup_meaning
363 FROM FND_LANGUAGES
364 WHERE LANGUAGE_CODE = l_lookup_code;
365
366 l_return := TRUE;
367 EXCEPTION
368 WHEN NO_DATA_FOUND THEN
369 l_return := FALSE;
370 END;
371
372 ELSE
373 l_return := FALSE;
374 END IF;
375
376 -- added the following section for caching of incl_unrelated_entities
377 -- column value for hz_relationship_types records.
378 ELSIF p_category = 'RELATIONSHIP_TYPE' THEN
379
380 l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
381 l_relationship_type := SUBSTRB( p_val, 1, l_position1 - 1 );
382
383 BEGIN
384 SELECT INCL_UNRELATED_ENTITIES INTO l_dummy
385 FROM HZ_RELATIONSHIP_TYPES
386 WHERE RELATIONSHIP_TYPE = l_relationship_type
387 AND ROWNUM = 1;
388
389 IF l_dummy = 'Y' THEN
390 l_return := TRUE;
391 ELSE
392 l_return := FALSE;
393 END IF;
394
395 EXCEPTION
396 WHEN NO_DATA_FOUND THEN
397 l_return := FALSE;
398 END;
399
400 END IF;
401
402 --Cache the value
403 IF l_return THEN
404 l_table_index := put( p_val || G_SPECIAL_STRING || p_category );
405 IF p_category = 'LOOKUP' THEN
406 LOOKUP_MEANING_TAB(l_table_index) := x_lookup_meaning;
407 END IF;
408 END IF;
409 END IF;
410
411 RETURN l_return;
412
413 END search;
414
415 /**
416 * PRIVATE FUNCTION search
417 *
418 * DESCRIPTION
419 * Find value with a specified category, for instance, lookup.
420 *
421 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
422 *
423 * ARGUMENTS
424 * IN:
425 * p_val Specified value.
426 * p_category Value category. We only support
427 * category LOOKUP for now.
428 * NOTES
429 *
430 * MODIFICATION HISTORY
431 *
432 * 10-Sep-2004 Amulya Mishra Created.
433 *
434 */
435
436 FUNCTION search (
437 p_val IN VARCHAR2,
438 p_category IN VARCHAR2
439 ) RETURN BOOLEAN IS
440
441 l_lookup_meaning VARCHAR2(100);
442
443 BEGIN
444 RETURN search(p_val, p_category, l_lookup_meaning);
445 END search;
446
447
448 /**
449 * FUNCTION get_session_process_id
450 *
451 * DESCRIPTION
452 * Return OS process id of current session.
453 *
454 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
455 *
456 * ARGUMENTS
457 * IN:
458 *
459 * NOTES
460 *
461 * MODIFICATION HISTORY
462 *
463 * 10-Sep-2004 Amulya Mishra Created.
464 *
465 */
466
467 FUNCTION get_session_process_id RETURN VARCHAR2 IS
468
469 l_spid V$PROCESS.spid%TYPE;
470
471 BEGIN
472
473 SELECT SPID INTO l_spid
474 FROM V$PROCESS
475 WHERE ADDR = (
476 SELECT PADDR
477 FROM V$SESSION
478 WHERE AUDSID = USERENV('SESSIONID') );
479
480 RETURN ( l_spid );
481
482 END get_session_process_id;
483
484 /**
485 * FUNCTION
486 * created_by
487 * creation_date
488 * last_updated_by
489 * last_update_date
490 * last_update_login
491 * request_id
492 * program_id
493 * program_application_id
494 * program_update_date
495 * user_id
496 * application_id
497 *
498 * DESCRIPTION
499 * Return standard who value.
500 *
501 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
502 *
503 * ARGUMENTS
504 * IN:
505 *
506 * NOTES
507 *
508 * MODIFICATION HISTORY
509 *
510 * 10-Sep-2004 Amulya Mishra Created.
511 */
512
513 FUNCTION created_by RETURN NUMBER IS
514 BEGIN
515
516 RETURN NVL(FND_GLOBAL.user_id,-1);
517
518 END created_by;
519
520 FUNCTION creation_date RETURN DATE IS
521 BEGIN
522
523 RETURN SYSDATE;
524
525 END creation_date;
526
527 FUNCTION last_updated_by RETURN NUMBER IS
528 BEGIN
529
530 RETURN NVL(FND_GLOBAL.user_id,-1);
531
532 END last_updated_by;
533
534 FUNCTION last_update_date RETURN DATE IS
535 BEGIN
536
537 RETURN SYSDATE;
538
539 END last_update_date;
540
541 FUNCTION last_update_login RETURN NUMBER IS
542 BEGIN
543
544 IF FND_GLOBAL.conc_login_id = -1 OR
545 FND_GLOBAL.conc_login_id IS NULL
546 THEN
547 RETURN FND_GLOBAL.login_id;
548 ELSE
549 RETURN FND_GLOBAL.conc_login_id;
550 END IF;
551
552 END last_update_login;
553
554 FUNCTION request_id RETURN NUMBER IS
555 BEGIN
556
557 IF FND_GLOBAL.conc_request_id = -1 OR
558 FND_GLOBAL.conc_request_id IS NULL
559 THEN
560 RETURN NULL;
561 ELSE
562 RETURN FND_GLOBAL.conc_request_id;
563 END IF;
564
565 END request_id;
566
567 FUNCTION program_id RETURN NUMBER IS
568 BEGIN
569
570 IF FND_GLOBAL.conc_program_id = -1 OR
571 FND_GLOBAL.conc_program_id IS NULL
572 THEN
573 RETURN NULL;
574 ELSE
575 RETURN FND_GLOBAL.conc_program_id;
576 END IF;
577
578 END program_id;
579
580 FUNCTION program_application_id RETURN NUMBER IS
581 BEGIN
582
583 IF FND_GLOBAL.prog_appl_id = -1 OR
584 FND_GLOBAL.prog_appl_id IS NULL
585 THEN
586 RETURN NULL;
587 ELSE
588 RETURN FND_GLOBAL.prog_appl_id;
589 END IF;
590
591 END program_application_id;
592
593 FUNCTION application_id RETURN NUMBER IS
594 BEGIN
595
596 IF FND_GLOBAL.resp_appl_id = -1 OR
597 FND_GLOBAL.resp_appl_id IS NULL
598 THEN
599 RETURN NULL;
600 ELSE
601 RETURN FND_GLOBAL.resp_appl_id;
602 END IF;
603
604 END application_id;
605
606 FUNCTION program_update_date RETURN DATE IS
607 BEGIN
608
609 IF program_id IS NULL THEN
610 RETURN NULL;
611 ELSE
612 RETURN SYSDATE;
613 END IF;
614
615 END program_update_date;
616
617 FUNCTION user_id RETURN NUMBER IS
618 BEGIN
619
620 RETURN NVL(FND_GLOBAL.user_id,-1);
621
622 END user_id;
623
624 FUNCTION Get_SchemaName (
625 p_app_short_name IN VARCHAR2
626 ) RETURN VARCHAR2 IS
627
628 l_status VARCHAR2(30);
629 l_industry VARCHAR2(30);
630 l_schema_name VARCHAR2(30);
631 l_return_value BOOLEAN;
632
633 BEGIN
634
635 l_return_value := fnd_installation.get_app_info(
636 p_app_short_name, l_status, l_industry, l_schema_name);
637
638 IF l_schema_name IS NULL THEN
639 fnd_message.set_name('FND','FND_NO_SCHEMA_NAME');
640 fnd_message.set_token('SCHEMA_NAME',p_app_short_name);
641 fnd_msg_pub.add;
642 RAISE fnd_api.g_exc_unexpected_error;
643 ELSE
644 RETURN l_schema_name;
645 END IF;
646
647 END Get_SchemaName;
648
649
650 FUNCTION Get_AppsSchemaName RETURN VARCHAR2 IS
651
652 l_aol_schema VARCHAR2(30);
653 l_apps_schema VARCHAR2(30);
654 l_apps_mls_schema VARCHAR2(30);
655
656 BEGIN
657
658 l_aol_schema := Get_SchemaName('FND');
659 system.ad_apps_private.get_apps_schema_name(
660 1, l_aol_schema, l_apps_schema, l_apps_mls_schema);
661
662 RETURN l_apps_schema;
663
664 END Get_AppsSchemaName;
665
666 FUNCTION Get_LookupMeaning (
667 p_lookup_table IN VARCHAR2,
668 p_lookup_type IN VARCHAR2,
669 p_lookup_code IN VARCHAR2
670 ) RETURN VARCHAR2 IS
671
672 l_return BOOLEAN;
673 l_lookup_meaning VARCHAR2(100);
674
675 BEGIN
676
677 l_return := search(p_lookup_table || G_SPECIAL_STRING ||
678 p_lookup_type || G_SPECIAL_STRING || p_lookup_code,
679 'LOOKUP', l_lookup_meaning );
680 RETURN l_lookup_meaning;
681
682 END Get_LookupMeaning;
683
684 /*
685
686 PROCEDURE CREATE_DUPLICATE_RULE(
687 p_rule_detail_id IN FUN_RULE_DETAILS.RULE_DETAIL_ID%TYPE,
688 p_rule_object_id IN FUN_RULE_DETAILS.RULE_OBJECT_ID%TYPE
689 ) IS
690
691 l_next_rule_detail_id FUN_RULE_DETAILS.RULE_DETAIL_ID%TYPE;
692 l_next_criteria_id FUN_RULE_CRITERIA.CRITERIA_ID%TYPE;
693
694 l_rowid ROWID;
695
696 l_rule_detail_id FUN_RULE_DETAILS.RULE_DETAIL_ID%TYPE;
697 l_rule_object_id FUN_RULE_DETAILS.RULE_OBJECT_ID%TYPE;
698 l_rule_name FUN_RULE_DETAILS.RULE_NAME%TYPE;
699 l_seq FUN_RULE_DETAILS.SEQ%TYPE;
700 l_operator FUN_RULE_DETAILS.OPERATOR%TYPE;
701 l_enabled_flag FUN_RULE_DETAILS.ENABLED_FLAG%TYPE;
702 l_result_application_id FUN_RULE_DETAILS.RESULT_APPLICATION_ID%TYPE;
703 l_result_value FUN_RULE_DETAILS.RESULT_VALUE%TYPE;
704 l_created_by_module FUN_RULE_DETAILS.CREATED_BY_MODULE%TYPE;
705
706
707 l_criteria_id FUN_RULE_CRITERIA.CRITERIA_ID%TYPE;
708 l_criteria_param_name FUN_RULE_CRITERIA.CRITERIA_PARAM_NAME%TYPE;
709 l_condition FUN_RULE_CRITERIA.CONDITION%TYPE;
710 l_param_value FUN_RULE_CRITERIA.PARAM_VALUE%TYPE;
711 l_case_sensitive FUN_RULE_CRITERIA.CASE_SENSITIVE%TYPE;
712
713
714 CURSOR C IS
715 SELECT * FROM FUN_RULE_CRITERIA
716 WHERE RULE_DETAIL_ID = P_RULE_DETAIL_ID
717 FOR UPDATE NOWAIT;
718
719
720 BEGIN
721
722 SELECT FUN_RULE_DETAILS_S.NEXTVAL
723 INTO l_next_rule_detail_id
724 FROM DUAL;
725
726 SELECT
727 RULE_OBJECT_ID,
728 RULE_NAME,
729 SEQ,
730 OPERATOR,
731 ENABLED_FLAG,
732 RESULT_APPLICATION_ID,
733 RESULT_VALUE,
734 CREATED_BY_MODULE
735 INTO
736 l_rule_object_id,
737 l_rule_name,
738 l_seq,
739 l_operator,
740 l_enabled_flag,
741 l_result_application_id,
742 l_result_value,
743 l_created_by_module
744
745 FROM FUN_RULE_DETAILS
746 WHERE RULE_OBJECT_ID = p_rule_object_id
747 AND RULE_DETAIL_ID = p_rule_detail_id;
748
749 FUN_RULE_DETAILS_PKG.INSERT_ROW (
750 X_ROWID =>l_rowid,
751 X_RULE_DETAIL_ID =>l_next_rule_detail_id,
752 X_RULE_OBJECT_ID =>l_rule_object_id,
753 X_RULE_NAME =>l_rule_name,
754 X_SEQ =>l_seq,
755 X_OPERATOR =>l_operator,
756 X_ENABLED_FLAG =>l_enabled_flag,
757 X_RESULT_APPLICATION_ID =>l_result_application_id,
758 X_RESULT_VALUE =>l_result_value,
759 X_OBJECT_VERSION_NUMBER =>1,
760 X_CREATED_BY_MODULE =>l_created_by_module
761 );
762
763 --insert criteria records for the duplicate rule.
764
765 FOR p_rule_criteria_rec IN C LOOP
766
767 FUN_RULE_CRITERIA_PKG.INSERT_ROW (
768 X_ROWID =>l_rowid,
769 X_CRITERIA_ID =>p_rule_criteria_rec.criteria_id,
770 X_RULE_DETAIL_ID =>l_next_rule_detail_id,
771 X_CRITERIA_PARAM_NAME =>p_rule_criteria_rec.criteria_param_name,
772 X_CONDITION =>p_rule_criteria_rec.condition,
773 X_PARAM_VALUE =>p_rule_criteria_rec.param_value,
774 X_CASE_SENSITIVE =>p_rule_criteria_rec.case_sensitive,
775 X_OBJECT_VERSION_NUMBER =>1,
776 X_CREATED_BY_MODULE =>p_rule_criteria_rec.created_by_module
777 );
778
779 END LOOP;
780
781
782 EXCEPTION
783
784 WHEN NO_DATA_FOUND THEN
785 FND_MESSAGE.SET_NAME('SQLAP','FUN_NO_RULE_DETAIL');
786 FND_MSG_PUB.ADD;
787 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
788
789 WHEN OTHERS THEN
790 FND_MESSAGE.SET_NAME('SQLAP','FUN_NO_RULE_DETAIL');
791 FND_MSG_PUB.ADD;
792 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
793
794
795 END CREATE_DUPLICATE_RULE;
796 */
797
798 FUNCTION GET_MAX_SEQ (
799 P_RULE_OBJECT_ID IN FUN_RULE_DETAILS.RULE_OBJECT_ID%TYPE
800 )
801 RETURN NUMBER IS
802
803 l_max_seq FUN_RULE_DETAILS.SEQ%TYPE;
804
805 BEGIN
806 SELECT MAX(SEQ)+1 INTO l_max_seq
807 FROM FUN_RULE_DETAILS
808 WHERE RULE_OBJECT_ID = P_RULE_OBJECT_ID;
809 RETURN l_max_seq;
810
811 EXCEPTION
812
813 WHEN NO_DATA_FOUND THEN
814 RETURN NULL;
815
816 WHEN OTHERS THEN
817 RETURN NULL;
818 END GET_MAX_SEQ;
819
820
821 FUNCTION getApplicationID(p_AppShortName IN VARCHAR2)
822 RETURN NUMBER IS
823 l_application_id NUMBER;
824 BEGIN
825 SELECT nvl(application_id , 435)
826 INTO l_application_id
827 FROM fnd_application
828 WHERE application_short_name = p_AppShortName;
829
830 RETURN l_application_id;
831 EXCEPTION
832 WHEN OTHERS THEN
833 APP_EXCEPTION.RAISE_EXCEPTION;
834
835 END GetApplicationID;
836
837
838 FUNCTION getApplicationShortName(p_ApplicationId IN NUMBER)
839 RETURN VARCHAR2
840 IS
841 l_application_short_name VARCHAR2(30);
842 BEGIN
843
844 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
845 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'Start FUN_RULE_UTILITY_PKG.getApplicationShortName', FALSE);
846 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_ApplicationId='||to_char(p_ApplicationId), FALSE);
847 end if;
848
849 SELECT nvl(application_short_name, 'FUN')
850 INTO l_application_short_name
851 FROM fnd_application
852 WHERE application_id = p_ApplicationId;
853
854 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
855 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'End FUN_RULE_UTILITY_PKG.getApplicationShortName', FALSE);
856 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'l_application_short_name'||l_application_short_name, FALSE);
857 end if;
858
859 RETURN l_application_short_name;
860 EXCEPTION
861 WHEN OTHERS THEN
862 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
863 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.getApplicationShortName:->Exception', FALSE);
864 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , SQLERRM, FALSE);
865 END IF;
866
867 APP_EXCEPTION.RAISE_EXCEPTION;
868
869 END getApplicationShortName;
870
871 FUNCTION getValueSetDataType(p_ValueSetId IN NUMBER)
872 RETURN VARCHAR2
873 IS
874 l_dataType VARCHAR2(10);
875 l_maximum_size NUMBER;
876 params_cursor INTEGER;
877 params_rows_processed INTEGER;
878
879 l_ValueSetSql VARCHAR2(1000) := 'SELECT FORMAT_TYPE, MAXIMUM_SIZE FROM FND_FLEX_VALUE_SETS WHERE
880 FLEX_VALUE_SET_ID = :1';
881
882 BEGIN
883
884 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
885 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'Start FUN_RULE_UTILITY_PKG.getValueSetDataType', FALSE);
886 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_ValueSetId='||to_char(p_ValueSetId), FALSE);
887 end if;
888
889 params_cursor := DBMS_SQL.OPEN_CURSOR;
890 DBMS_SQL.PARSE(params_cursor, l_ValueSetSql,DBMS_SQL.native);
891 dbms_sql.bind_variable(params_cursor , '1' , p_ValueSetId);
892
893 dbms_sql.define_column(params_cursor, 1, l_dataType , 1);
894 dbms_sql.define_column(params_cursor, 2, l_maximum_size);
895
896 params_rows_processed := DBMS_SQL.EXECUTE(params_cursor);
897
898 while(dbms_sql.fetch_rows(params_cursor) > 0 ) loop
899 dbms_sql.column_value(params_cursor, 1, l_dataType );
900 dbms_sql.column_value(params_cursor, 2, l_maximum_size );
901
902 IF (l_dataType = 'C' ) THEN l_dataType := 'STRINGS'; END IF;
903 IF (l_dataType = 'N' ) THEN l_dataType := 'NUMERIC'; END IF;
904 IF (l_dataType = 'D' OR l_dataType = 'X') THEN
905 l_dataType := 'DATE';
906 END IF;
907
908 -----------------------------------------
909 -- Standard DateTime - Y -
910 -- Old Time - T -
911 -- Old DateTime - t -
912 -----------------------------------------
913 IF (l_dataType = 'T' OR l_dataType = 't' OR l_dataType = 'Y') THEN
914 RAISE INVAILD_DATA_TYPE;
915 END IF;
916
917 end loop;
918
919 DBMS_SQL.CLOSE_CURSOR(params_cursor);
920
921 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
922 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'End FUN_RULE_UTILITY_PKG.getValueSetDataType', FALSE);
923 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'l_dataType'||l_dataType, FALSE);
924 end if;
925
926
927 RETURN l_dataType;
928
929 EXCEPTION
930 WHEN INVAILD_DATA_TYPE THEN
931
932 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
933 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.getValueSetDataType:->INVAILD_DATA_TYPE', FALSE);
934 END IF;
935
936 FND_MESSAGE.SET_NAME('FUN','FUN_RULE_INVALID_CRIT_DATATYPE');
937 FND_MSG_PUB.ADD;
938 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
939
940 WHEN INVAILD_LENGTH_TYPE THEN
941 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
942 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.getValueSetDataType:->INVAILD_LENGTH_TYPE', FALSE);
943 END IF;
944
945 FND_MESSAGE.SET_NAME('FUN','FUN_RULE_INVALID_CRIT_LENGTH');
946 FND_MSG_PUB.ADD;
947 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
948
949 WHEN OTHERS THEN
950 IF DBMS_SQL.IS_OPEN(params_cursor) THEN
951 DBMS_SQL.CLOSE_CURSOR(params_cursor);
952 END IF;
953
954 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
955 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.getValueSetDataType:->Exception='||SQLERRM, FALSE);
956 END IF;
957
958 RAISE;
959
960 END getValueSetDataType;
961
962 FUNCTION GET_RULE_DFF_RESULT_VALUE(p_FlexFieldAppShortName IN VARCHAR2,
963 p_FlexFieldName IN VARCHAR2,
964 p_AttributeCategory IN VARCHAR2,
965 p_Attribute1 IN VARCHAR2,
966 p_Attribute2 IN VARCHAR2,
967 p_Attribute3 IN VARCHAR2,
968 p_Attribute4 IN VARCHAR2,
969 p_Attribute5 IN VARCHAR2,
970 p_Attribute6 IN VARCHAR2,
971 p_Attribute7 IN VARCHAR2,
972 p_Attribute8 IN VARCHAR2,
973 p_Attribute9 IN VARCHAR2,
974 p_Attribute10 IN VARCHAR2,
975 p_Attribute11 IN VARCHAR2,
976 p_Attribute12 IN VARCHAR2,
977 p_Attribute13 IN VARCHAR2,
978 p_Attribute14 IN VARCHAR2,
979 p_Attribute15 IN VARCHAR2
980 )
981 RETURN VARCHAR2 IS
982
983 error_msg VARCHAR2(5000);
984 n NUMBER;
985 tf BOOLEAN;
986 s NUMBER;
987 e NUMBER;
988 errors_received EXCEPTION;
989 error_segment VARCHAR2(30);
990
991 BEGIN
992 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
993 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'Start FUN_RULE_UTILITY_PKG.GET_RULE_DFF_RESULT_VALUE', FALSE);
994 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_FlexFieldAppShortName='||p_FlexFieldAppShortName, FALSE);
995 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_FlexFieldName='||p_FlexFieldName, FALSE);
996 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_AttributeCategory='||p_AttributeCategory, FALSE);
997 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute1='||p_Attribute1, FALSE);
998 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute2='||p_Attribute2, FALSE);
999 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute3='||p_Attribute3, FALSE);
1000 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute4='||p_Attribute4, FALSE);
1001 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute5='||p_Attribute5, FALSE);
1002 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute6='||p_Attribute6, FALSE);
1003 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute7='||p_Attribute7, FALSE);
1004 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute8='||p_Attribute8, FALSE);
1005 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute9='||p_Attribute9, FALSE);
1006 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute10='||p_Attribute10, FALSE);
1007 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute11='||p_Attribute11, FALSE);
1008 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute12='||p_Attribute12, FALSE);
1009 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute13='||p_Attribute13, FALSE);
1010 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute14='||p_Attribute14, FALSE);
1011 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_Attribute15='||p_Attribute15, FALSE);
1012 end if;
1013
1014 fnd_flex_descval.set_column_value('ATTRIBUTE_CATEGORY', p_AttributeCategory);
1015 fnd_flex_descval.set_column_value('ATTRIBUTE1', p_Attribute1);
1016 fnd_flex_descval.set_column_value('ATTRIBUTE2', p_Attribute2);
1017 fnd_flex_descval.set_column_value('ATTRIBUTE3', p_Attribute3);
1018 fnd_flex_descval.set_column_value('ATTRIBUTE4', p_Attribute4);
1019 fnd_flex_descval.set_column_value('ATTRIBUTE5', p_Attribute5);
1020 fnd_flex_descval.set_column_value('ATTRIBUTE6', p_Attribute6);
1021 fnd_flex_descval.set_column_value('ATTRIBUTE7', p_Attribute7);
1022 fnd_flex_descval.set_column_value('ATTRIBUTE8', p_Attribute8);
1023 fnd_flex_descval.set_column_value('ATTRIBUTE8', p_Attribute9);
1024 fnd_flex_descval.set_column_value('ATTRIBUTE10', p_Attribute10);
1025 fnd_flex_descval.set_column_value('ATTRIBUTE11', p_Attribute11);
1026 fnd_flex_descval.set_column_value('ATTRIBUTE12', p_Attribute12);
1027 fnd_flex_descval.set_column_value('ATTRIBUTE13', p_Attribute13);
1028 fnd_flex_descval.set_column_value('ATTRIBUTE14', p_Attribute14);
1029 fnd_flex_descval.set_column_value('ATTRIBUTE15', p_Attribute15);
1030
1031 IF FND_FLEX_DESCVAL.validate_desccols(p_FlexFieldAppShortName, p_FlexFieldName) THEN
1032 IF (NVL(LENGTH(FND_FLEX_DESCVAL.concatenated_ids),0) > 1) THEN
1033 return(FND_FLEX_DESCVAL.concatenated_ids);
1034 ELSE
1035 return(FND_FLEX_DESCVAL.concatenated_values);
1036 END IF;
1037 ELSE
1038 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1039 fnd_log.message(FND_LOG.LEVEL_STATEMENT, '*************************************************', FALSE);
1040 fnd_log.message(FND_LOG.LEVEL_STATEMENT, '* An error has occured so we will call ', FALSE);
1041 fnd_log.message(FND_LOG.LEVEL_STATEMENT, '* FND_FLEX_DESCVAL.error_segment to detemine ', FALSE);
1042 fnd_log.message(FND_LOG.LEVEL_STATEMENT, '* which segment contains the error. ', FALSE);
1043 fnd_log.message(FND_LOG.LEVEL_STATEMENT, '*************************************************', FALSE);
1044 end if;
1045
1046
1047 error_segment := FND_FLEX_DESCVAL.error_segment;
1048 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1049 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'error_segment = ' || error_segment, FALSE);
1050 end if;
1051 RAISE errors_received;
1052
1053 END IF;
1054
1055 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1056 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'End FUN_RULE_UTILITY_PKG.GET_RULE_DFF_RESULT_VALUE', FALSE);
1057 end if;
1058
1059 EXCEPTION
1060 WHEN errors_received THEN
1061 error_msg := fnd_flex_descval.error_message;
1062 s :=1;
1063 e := 200;
1064
1065 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1066 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.GET_RULE_DFF_RESULT_VALUE:->errors_received', FALSE);
1067 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'Here are the error messages: ', FALSE);
1068 END IF;
1069
1070 if(length(error_msg) < 200) then
1071 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1072 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , error_msg, FALSE);
1073 END IF;
1074
1075 else
1076 while e < 5001 and substr(error_msg, s, e) is not null
1077 loop
1078 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1079 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , substr(error_msg, s, e), FALSE);
1080 END IF;
1081
1082 s := s + 200;
1083 e := e + 200;
1084 end loop;
1085 end if;
1086
1087 RAISE_APPLICATION_ERROR(-20000,error_msg);
1088
1089 END get_rule_dff_result_value;
1090
1091 /*Usage
1092 fun_rule_utility_pkg.print_debug(0,'Before calling Rules Engine.');
1093 */
1094
1095 PROCEDURE print_debug(
1096 p_indent IN NUMBER,
1097 p_text IN VARCHAR2 ) IS
1098 BEGIN
1099 fnd_file.put_line( FND_FILE.LOG, RPAD(' ', (1+p_indent)*2)||p_text );
1100 EXCEPTION
1101 WHEN OTHERS THEN
1102 null;
1103 END print_debug;
1104
1105
1106 FUNCTION get_moac_org_id
1107 RETURN NUMBER IS
1108 BEGIN
1109 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1110 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'Start FUN_RULE_UTILITY_PKG.GET_MOAC_ORG_ID', FALSE);
1111 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'MO_GLOBAL.GET_ACCESS_MODE='||MO_GLOBAL.GET_ACCESS_MODE(), FALSE);
1112 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'MO_GLOBAL.GET_CURRENT_ORG_ID='||MO_GLOBAL.GET_CURRENT_ORG_ID, FALSE);
1113 end if;
1114
1115 IF ( MO_GLOBAL.GET_ACCESS_MODE() = 'S') THEN
1116 RETURN MO_GLOBAL.GET_CURRENT_ORG_ID;
1117 ELSE
1118 RETURN -2;
1119 END IF;
1120 END;
1121
1122 /* Rule Object Instance Enhancement for MULTIVALUE:
1123 * This function returns TRU if the RULE_OBJECT_ID passed is an instance or not.
1124 */
1125
1126 FUNCTION IS_USE_INSTANCE(p_rule_object_id IN NUMBER)
1127 RETURN BOOLEAN
1128 IS
1129 l_parent_rule_object_id FUN_RULE_OBJECTS_B.PARENT_RULE_OBJECT_ID%TYPE;
1130 params_cursor INTEGER;
1131 params_rows_processed INTEGER;
1132
1133 l_sql VARCHAR2(1000) := 'SELECT PARENT_RULE_OBJECT_ID FROM FUN_RULE_OBJECTS_B WHERE
1134 RULE_OBJECT_ID = :1';
1135
1136 BEGIN
1137
1138 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1139 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'Start FUN_RULE_UTILITY_PKG.IS_USE_INSTANCE', FALSE);
1140 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'p_rule_object_id='||to_char(p_rule_object_id), FALSE);
1141 end if;
1142
1143 params_cursor := DBMS_SQL.OPEN_CURSOR;
1144 DBMS_SQL.PARSE(params_cursor, l_sql,DBMS_SQL.native);
1145 dbms_sql.bind_variable(params_cursor , '1' , p_rule_object_id);
1146
1147 dbms_sql.define_column(params_cursor, 1, l_parent_rule_object_id);
1148
1149 params_rows_processed := DBMS_SQL.EXECUTE(params_cursor);
1150
1151 while(dbms_sql.fetch_rows(params_cursor) > 0 ) loop
1152 dbms_sql.column_value(params_cursor, 1, l_parent_rule_object_id );
1153 if(l_parent_rule_object_id IS NULL) then
1154 return FALSE;
1155 else
1156 return TRUE;
1157 end if;
1158 end loop;
1159
1160 DBMS_SQL.CLOSE_CURSOR(params_cursor);
1161
1162 if (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1163 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'End FUN_RULE_UTILITY_PKG.IS_USE_INSTANCE', FALSE);
1164 fnd_log.message(FND_LOG.LEVEL_STATEMENT, 'l_parent_rule_object_id='||to_char(l_parent_rule_object_id), FALSE);
1165 end if;
1166
1167
1168 RETURN FALSE;
1169
1170 EXCEPTION
1171 WHEN OTHERS THEN
1172 IF DBMS_SQL.IS_OPEN(params_cursor) THEN
1173 DBMS_SQL.CLOSE_CURSOR(params_cursor);
1174 END IF;
1175
1176 IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1177 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION , 'FUN_RULE_UTILITY_PKG.IS_USE_INSTANCE:->Exception='||SQLERRM, FALSE);
1178 END IF;
1179
1180 RAISE;
1181 END IS_USE_INSTANCE;
1182
1183 END FUN_RULE_UTILITY_PKG;