DBA Data[Home] [Help]

PACKAGE BODY: APPS.FUN_RULE_DETAILS_PUB

Source


1 PACKAGE BODY FUN_RULE_DETAILS_PUB AS
2 /*$Header: FUNXTMRULRDTPUB.pls 120.0 2005/06/20 04:30:02 ammishra noship $ */
3 
4 
5 ------------------------------------
6 -- declaration of private procedures
7 ------------------------------------
8 
9 
10 PROCEDURE do_create_rule_detail(
11     p_rule_detail_rec        IN OUT    NOCOPY RULE_DETAILS_REC_TYPE,
12     x_rule_detail_id                     OUT NOCOPY    NUMBER,
13     x_return_status        IN OUT NOCOPY    VARCHAR2
14 );
15 
16 PROCEDURE do_update_rule_detail(
17     p_rule_detail_rec         IN OUT   NOCOPY RULE_DETAILS_REC_TYPE,
18     p_object_version_number IN OUT NOCOPY   NUMBER,
19     x_return_status         IN OUT NOCOPY   VARCHAR2
20 );
21 
22 
23 --------------------------------------
24 -- private procedures and functions
25 --------------------------------------
26 
27 /*===========================================================================+
28  | PROCEDURE
29  |              do_create_rule_detail
30  |
31  | DESCRIPTION
32  |              Creates rules record
33  |
34  | SCOPE - PRIVATE
35  |
36  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
37  |
38  | ARGUMENTS  : IN:
39  |              OUT:
40  |          IN/ OUT:
41  |                    p_rule_detail_rec
42  |                    x_return_status
43  |
44  | RETURNS    : NONE
45  |
46  | NOTES
47  |
48  | MODIFICATION HISTORY
49  |          10-Sep-2004    Amulya Mishra         Created.
50  +===========================================================================*/
51 
52 PROCEDURE do_create_rule_detail(
53     p_rule_detail_rec        IN OUT    NOCOPY RULE_DETAILS_REC_TYPE,
54     x_rule_detail_id                     OUT NOCOPY    NUMBER,
55     x_return_status        IN OUT NOCOPY    VARCHAR2
56 ) IS
57 
58     l_rowid                      rowid;
59 BEGIN
60 
61    -- validate the input record
62 
63 
64     FUN_RULE_VALIDATE_PKG.validate_rule_details(
65       'C',
66       p_rule_detail_rec,
67       l_rowid,
68       x_return_status
69     );
70     IF x_return_status = fnd_api.g_ret_sts_error THEN
71       RAISE fnd_api.g_exc_error;
72     END IF;
73 
74 
75     FUN_RULE_DETAILS_PKG.Insert_Row (
76         X_ROWID                                =>l_rowid,
77         X_RULE_DETAIL_ID	               =>p_rule_detail_rec.rule_detail_id,
78         X_RULE_OBJECT_ID                       =>p_rule_detail_rec.rule_object_id,
79         X_RULE_NAME		               =>p_rule_detail_rec.rule_name,
80         X_SEQ			               =>p_rule_detail_rec.seq,
81         X_OPERATOR                             =>p_rule_detail_rec.operator,
82         X_ENABLED_FLAG                         =>p_rule_detail_rec.enabled_flag,
83         X_RESULT_APPLICATION_ID                =>p_rule_detail_rec.result_application_id,
84         X_RESULT_VALUE                         =>p_rule_detail_rec.result_value,
85         X_CREATED_BY_MODULE                    =>p_rule_detail_rec.created_by_module
86     );
87 
88     x_rule_detail_id := p_rule_detail_rec.rule_detail_id;
89 
90 
91 END;
92 
93 /*===========================================================================+
94  | PROCEDURE
95  |              do_update_rule_detail
96  |
97  | DESCRIPTION
98  |              Updates rules record
99  |
100  | SCOPE - PRIVATE
101  |
102  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
103  |
104  | ARGUMENTS  : IN:
105  |              OUT:
106  |          IN/ OUT:
107  |                    p_rule_detail_rec
108  |                    p_object_version_number
109  |                    x_return_status
110  |
111  | RETURNS    : NONE
112  |
113  | NOTES
114  |
115  | MODIFICATION HISTORY
116  |
117  +===========================================================================*/
118 
119 PROCEDURE do_update_rule_detail(
120     p_rule_detail_rec          IN OUT    NOCOPY RULE_DETAILS_REC_TYPE,
121     p_object_version_number     IN OUT NOCOPY  NUMBER,
122     x_return_status             IN OUT NOCOPY  VARCHAR2
123 ) IS
124 
125     l_object_version_number             NUMBER;
126     l_rowid                             ROWID;
127 BEGIN
128 
129     -- check whether record has been updated by another user. If not, lock it.
130     BEGIN
131 
132         SELECT OBJECT_VERSION_NUMBER,
133                ROWID
134         INTO   l_object_version_number,
135                l_rowid
136         FROM   FUN_rule_details
137         WHERE RULE_DETAIL_ID = p_rule_detail_rec.rule_detail_id
138         AND    RULE_OBJECT_ID     = p_rule_detail_rec.rule_object_id
139         FOR UPDATE OF RULE_NAME NOWAIT;
140 
141 
142         IF NOT ((p_object_version_number is null and l_object_version_number is null)
143                 OR (p_object_version_number = l_object_version_number))
144         THEN
145             FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_API_RECORD_CHANGED');
146             FND_MESSAGE.SET_TOKEN('TABLE', 'FUN_RULE_DETAILS');
147             FND_MSG_PUB.ADD;
148             RAISE FND_API.G_EXC_ERROR;
149         END IF;
150 
151         p_object_version_number := nvl(l_object_version_number, 1) + 1;
152 
153     EXCEPTION WHEN NO_DATA_FOUND THEN
154         FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_API_NO_RECORD');
155         FND_MESSAGE.SET_TOKEN('RECORD', 'FUN_RULE_DETAILS');
156         FND_MESSAGE.SET_TOKEN('VALUE', 'rule_name');
157         FND_MSG_PUB.ADD;
158         RAISE FND_API.G_EXC_ERROR;
159     END;
160 
161     -- call for validations.
162     FUN_RULE_VALIDATE_PKG.validate_rule_details(
163       'U',
164       p_rule_detail_rec,
165       l_rowid,
166       x_return_status
167     );
168 
169 
170     IF x_return_status = fnd_api.g_ret_sts_error THEN
171       RAISE fnd_api.g_exc_error;
172     END IF;
173 
174     -- call to table-handler.
175 
176     FUN_RULE_DETAILS_PKG.Update_Row (
177         X_RULE_DETAIL_ID	               =>p_rule_detail_rec.rule_detail_id,
178         X_RULE_OBJECT_ID                       =>p_rule_detail_rec.rule_object_id,
179         X_RULE_NAME		               =>p_rule_detail_rec.rule_name,
180         X_SEQ			               =>p_rule_detail_rec.seq,
181         X_OPERATOR                             =>p_rule_detail_rec.operator,
182         X_ENABLED_FLAG                         =>p_rule_detail_rec.enabled_flag,
183         X_RESULT_APPLICATION_ID                =>p_rule_detail_rec.result_application_id,
184         X_RESULT_VALUE                         =>p_rule_detail_rec.result_value,
185         X_CREATED_BY_MODULE                    =>p_rule_detail_rec.created_by_module
186     );
187 
188 END;
189 
190 /**
191  * PROCEDURE create_rule_detail
192  *
193  * DESCRIPTION
194  *     Creates User Defined Rules
195  *
196  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
197  *
198  *
199  * ARGUMENTS
200  *   IN:
201  *     p_init_msg_list                Initialize message stack if it is set to
202  *                                    FND_API.G_TRUE. Default is FND_API.G_FALSE.
203  *     p_rule_detail_rec              User defined Rules record.
204  *   IN/OUT:
205  *   OUT:
206  *     x_return_status                Return status after the call. The status can
207  *                                    be FND_API.G_RET_STS_SUCCESS (success),
208  *                                    FND_API.G_RET_STS_ERROR (error),
209  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
210  *     x_msg_count                    Number of messages in message stack.
211  *     x_msg_data                     Message text if x_msg_count is 1.
212  *
213  * NOTES
214  *
215  * MODIFICATION HISTORY
216  *
217  *   10-Sep-2004    Amulya Mishra       Created.
218  *
219  */
220 
221 PROCEDURE create_rule_detail(
222     p_init_msg_list           IN        VARCHAR2 := FND_API.G_FALSE,
223     p_rule_detail_rec         IN        RULE_DETAILS_REC_TYPE,
224     x_rule_detail_id                     OUT NOCOPY    NUMBER,
225     x_return_status           OUT NOCOPY       VARCHAR2,
226     x_msg_count               OUT NOCOPY       NUMBER,
227     x_msg_data                OUT NOCOPY       VARCHAR2
228 ) IS
229 
230     l_rule_detail_rec       RULE_DETAILS_REC_TYPE:= p_rule_detail_rec;
231 
232 BEGIN
233 
234     -- standard start of API savepoint
235     SAVEPOINT create_rule_detail;
236 
237     -- initialize message list if p_init_msg_list is set to TRUE.
238     IF FND_API.to_Boolean(p_init_msg_list) THEN
239         FND_MSG_PUB.initialize;
240     END IF;
241 
242     -- initialize API return status to success.
243     x_return_status := FND_API.G_RET_STS_SUCCESS;
244 
245     -- call to business logic.
246     do_create_rule_detail(
247                              l_rule_detail_rec,
248                              x_rule_detail_id,
249                              x_return_status);
250 
251     -- standard call to get message count and if count is 1, get message info.
252     FND_MSG_PUB.Count_And_Get(
253                 p_encoded => FND_API.G_FALSE,
254                 p_count => x_msg_count,
255                 p_data  => x_msg_data);
256 
257 
258 EXCEPTION
259     WHEN FND_API.G_EXC_ERROR THEN
260         ROLLBACK TO create_rule_detail;
261         x_return_status := FND_API.G_RET_STS_ERROR;
262         FND_MSG_PUB.Count_And_Get(
263                                 p_encoded => FND_API.G_FALSE,
264                                 p_count => x_msg_count,
265                                 p_data  => x_msg_data);
266 
267     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
268         ROLLBACK TO create_rule_detail;
269         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
270         FND_MSG_PUB.Count_And_Get(
271                                 p_encoded => FND_API.G_FALSE,
272                                 p_count => x_msg_count,
273                                 p_data  => x_msg_data);
274 
275     WHEN OTHERS THEN
276         ROLLBACK TO create_rule_detail;
277         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
278         FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_API_OTHERS_EXCEP');
279         FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
280         FND_MSG_PUB.ADD;
281         FND_MSG_PUB.Count_And_Get(
282                                 p_encoded => FND_API.G_FALSE,
283                                 p_count => x_msg_count,
284                                 p_data  => x_msg_data);
285 END create_rule_detail;
286 
287 /**
288  * PROCEDURE update_rule_detail
289  *
290  * DESCRIPTION
291  *     Updates A Rule
292  *
293  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
294  *
295  * ARGUMENTS
296  *   IN:
297  *     p_init_msg_list                Initialize message stack if it is set to
298  *                                    FND_API.G_TRUE. Default is FND_API.G_FALSE.
299  *     p_rule_detail_rec              User defined Rules record.
300  *   IN/OUT:
301  *     p_object_version_number        Used for locking the being updated record.
302  *   OUT:
303  *     x_return_status                Return status after the call. The status can
304  *                                    be FND_API.G_RET_STS_SUCCESS (success),
305  *                                    FND_API.G_RET_STS_ERROR (error),
306  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
307  *     x_msg_count                    Number of messages in message stack.
308  *     x_msg_data                     Message text if x_msg_count is 1.
309  *
310  * NOTES
311  *
312  * MODIFICATION HISTORY
313  *
314  *   10-Sep-2004    Amulya Mishra     Created.
315  *
316  */
317 
318 PROCEDURE update_rule_detail(
319     p_init_msg_list             IN     VARCHAR2 := FND_API.G_FALSE,
320     p_rule_detail_rec          IN     rule_details_REC_TYPE,
321     p_object_version_number     IN OUT NOCOPY NUMBER,
322     x_return_status             OUT NOCOPY    VARCHAR2,
323     x_msg_count                 OUT NOCOPY    NUMBER,
324     x_msg_data                  OUT NOCOPY    VARCHAR2
325 ) IS
326 
327     l_rule_detail_rec                      rule_details_REC_TYPE := p_rule_detail_rec;
328     l_old_rule_detail_rec                  rule_details_REC_TYPE;
329 
330 BEGIN
331     -- standard start of API savepoint
332     SAVEPOINT update_rule_detail;
333 
334     -- initialize message list if p_init_msg_list is set to TRUE.
335     IF FND_API.to_Boolean(p_init_msg_list) THEN
336         FND_MSG_PUB.initialize;
337     END IF;
338 
339     -- initialize API return status to success.
340     x_return_status := FND_API.G_RET_STS_SUCCESS;
341     -- Get old records. Will be used by business event system.
342     get_rule_detail_rec (
343         p_rule_detail_id                    => l_rule_detail_rec.rule_detail_id,
344         p_rule_object_id                    => l_rule_detail_rec.rule_object_id,
345         x_rule_detail_rec                   => l_old_rule_detail_rec,
346         x_return_status                     => x_return_status,
347         x_msg_count                         => x_msg_count,
348         x_msg_data                          => x_msg_data );
349 
350     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
351         RAISE FND_API.G_EXC_ERROR;
352     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
353         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
354     END IF;
355 
356     -- call to business logic.
357     do_update_rule_detail(
358                              l_rule_detail_rec,
359                              p_object_version_number,
360                              x_return_status);
361 
362 
363    IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
364 
365        -- standard call to get message count and if count is 1, get message info.
366        FND_MSG_PUB.Count_And_Get(
367                 p_encoded => FND_API.G_FALSE,
368                 p_count => x_msg_count,
369                 p_data  => x_msg_data);
370    END IF;
371 
372 
373 EXCEPTION
374     WHEN FND_API.G_EXC_ERROR THEN
375         ROLLBACK TO update_rule_detail;
376         x_return_status := FND_API.G_RET_STS_ERROR;
377         FND_MSG_PUB.Count_And_Get(
378                                 p_encoded => FND_API.G_FALSE,
379                                 p_count => x_msg_count,
380                                 p_data  => x_msg_data);
381 
382     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
383         ROLLBACK TO update_rule_detail;
384         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
385         FND_MSG_PUB.Count_And_Get(
386                                 p_encoded => FND_API.G_FALSE,
387                                 p_count => x_msg_count,
388                                 p_data  => x_msg_data);
389 
390     WHEN OTHERS THEN
391         ROLLBACK TO update_rule_detail;
392         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
393 
394 	IF( INSTR(SQLERRM, 'FUN_RULE_DETAILS_U2') > 0 ) THEN
395           FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_DUPLICATE_RULE_NAME');
396         ELSE
397           FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_API_OTHERS_EXCEP');
398           FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
399         END IF;
400 
401         FND_MSG_PUB.ADD;
402         FND_MSG_PUB.Count_And_Get(
403                                 p_encoded => FND_API.G_FALSE,
404                                 p_count => x_msg_count,
405                                 p_data  => x_msg_data);
406 END update_rule_detail;
407 
408 
409 /**
410  * PROCEDURE get_rule_detail_rec
411  *
412  * DESCRIPTION
413  *     Gets user defined Rules record.
414  *
415  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
416  *     FUN_rule_details_PKG.Select_Row
417  *
418  * ARGUMENTS
419  *   IN:
420  *     p_init_msg_list                Initialize message stack if it is set to
421  *                                    FND_API.G_TRUE. Default is FND_API.G_FALSE.
425  *     x_rule_detail_rec              Returns Rules record.
422  *     p_rule_detail_id               Rule Id.
423  *   IN/OUT:
424  *   OUT:
426  *     x_return_status                Return status after the call. The status can
427  *                                    be FND_API.G_RET_STS_SUCCESS (success),
428  *                                    FND_API.G_RET_STS_ERROR (error),
429  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
430  *     x_msg_count                    Number of messages in message stack.
431  *     x_msg_data                     Message text if x_msg_count is 1.
432  *
433  * NOTES
434  *
435  * MODIFICATION HISTORY
436  *
437  *   10-Sep-2004    Amulya Mishra         Created.
438  *
439  */
440 
441 PROCEDURE get_rule_detail_rec (
442     p_init_msg_list                         IN     VARCHAR2 := FND_API.G_FALSE,
443     p_rule_detail_id                        IN     NUMBER,
444     p_rule_object_id	                    IN     NUMBER,
445     x_rule_detail_rec	                    OUT    NOCOPY RULE_DETAILS_REC_TYPE,
446     x_return_status                         OUT NOCOPY    VARCHAR2,
447     x_msg_count                             OUT NOCOPY    NUMBER,
448     x_msg_data                              OUT NOCOPY    VARCHAR2
449 ) IS
450 
451 BEGIN
452 
453     --Initialize message list if p_init_msg_list is set to TRUE.
454     IF FND_API.to_Boolean(p_init_msg_list) THEN
455         FND_MSG_PUB.initialize;
456     END IF;
457 
458     --Initialize API return status to success.
459     x_return_status := FND_API.G_RET_STS_SUCCESS;
460 
461 /*
462     --We can update the Rule Name. So we should not check for
463 
464     --Check whether primary key has been passed in.
465     IF p_rule_detail_id IS NULL OR
466        p_rule_detail_id = FND_API.G_MISS_NUM THEN
467         FND_MESSAGE.SET_NAME( 'FUN', 'FUN_RULE_API_MISSING_COLUMN' );
468         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'rule_name' );
469         FND_MSG_PUB.ADD;
470         RAISE FND_API.G_EXC_ERROR;
471     END IF;
472 */
473 
474     x_rule_detail_rec.rule_detail_id := p_rule_detail_id;
475     x_rule_detail_rec.rule_object_id := p_rule_object_id;
476 
477     FUN_RULE_DETAILS_PKG.Select_Row (
478         X_RULE_NAME                       =>x_rule_detail_rec.rule_name,
479 	X_RULE_DETAIL_ID                  =>x_rule_detail_rec.rule_detail_id,
480 	X_RULE_OBJECT_ID                  =>x_rule_detail_rec.rule_object_id,
481 	X_SEQ                             =>x_rule_detail_rec.seq,
482 	X_OPERATOR                        =>x_rule_detail_rec.operator,
483 	X_ENABLED_FLAG                    =>x_rule_detail_rec.enabled_flag,
484 	X_RESULT_APPLICATION_ID           =>x_rule_detail_rec.result_application_id,
485 	X_RESULT_VALUE                    =>x_rule_detail_rec.result_value,
486 	X_CREATED_BY_MODULE               =>x_rule_detail_rec.created_by_module
487     );
488 
489 
490     --Standard call to get message count and if count is 1, get message info.
491     FND_MSG_PUB.Count_And_Get(
492         p_encoded => FND_API.G_FALSE,
493         p_count => x_msg_count,
494         p_data  => x_msg_data );
495 
496 EXCEPTION
497     WHEN FND_API.G_EXC_ERROR THEN
498         x_return_status := FND_API.G_RET_STS_ERROR;
499 
500         FND_MSG_PUB.Count_And_Get(
501             p_encoded => FND_API.G_FALSE,
502             p_count => x_msg_count,
503             p_data  => x_msg_data );
504 
505     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
506         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
507 
508         FND_MSG_PUB.Count_And_Get(
509             p_encoded => FND_API.G_FALSE,
510             p_count => x_msg_count,
511             p_data  => x_msg_data );
512 
513     WHEN OTHERS THEN
514         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
515         FND_MESSAGE.SET_NAME( 'FUN', 'FUN_RULE_API_OTHERS_EXCEP' );
516         FND_MESSAGE.SET_TOKEN( 'ERROR' ,SQLERRM );
517         FND_MSG_PUB.ADD;
518 
519         FND_MSG_PUB.Count_And_Get(
520             p_encoded => FND_API.G_FALSE,
521             p_count => x_msg_count,
522             p_data  => x_msg_data );
523 
524 END get_rule_detail_rec;
525 
526 
527 /**
528  * PROCEDURE delete_rule_detail
529  *
530  * DESCRIPTION
531  *     Deletes A Rule.
532  *
533  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
534  *
535  *
536  * ARGUMENTS
537  *   IN:
538  *     p_init_msg_list                Initialize message stack if it is set to
539  *                                    FND_API.G_TRUE. Default is FND_API.G_FALSE.
540  *     p_rule_name                    Rule Name.
541  *     p_rule_object_id               Rule Object Id
542  *   IN/OUT:
543  *   OUT:
544  *     x_return_status                Return status after the call. The status can
545  *                                    be FND_API.G_RET_STS_SUCCESS (success),
546  *                                    FND_API.G_RET_STS_ERROR (error),
547  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
548  *     x_msg_count                    Number of messages in message stack.
549  *     x_msg_data                     Message text if x_msg_count is 1.
550  *
551  * NOTES
552  *
553  * MODIFICATION HISTORY
554  *
555  *   10-Sep-2004    Amulya Mishra       Created.
556  *
557  */
558 
559 PROCEDURE delete_rule_detail(
560     p_init_msg_list           IN        VARCHAR2 := FND_API.G_FALSE,
561     p_rule_name               IN        VARCHAR2,
562     p_rule_object_id	      IN        NUMBER,
563     x_return_status           OUT NOCOPY       VARCHAR2,
564     x_msg_count               OUT NOCOPY       NUMBER,
568   l_rule_detail_id NUMBER;
565     x_msg_data                OUT NOCOPY       VARCHAR2
566 ) IS
567 
569 
570 BEGIN
571 
572     -- standard start of API savepoint
573     SAVEPOINT delete_rule_detail;
574 
575     -- initialize message list if p_init_msg_list is set to TRUE.
576     IF FND_API.to_Boolean(p_init_msg_list) THEN
577         FND_MSG_PUB.initialize;
578     END IF;
579 
580     -- initialize API return status to success.
581     x_return_status := FND_API.G_RET_STS_SUCCESS;
582 
583     SELECT rule_detail_id INTO l_rule_detail_id
584     FROM fun_rule_details
585     WHERE rule_object_id = p_rule_object_id
586     AND rule_name = p_rule_name;
587 
588     -- call to table-handler.
589     FUN_RULE_DETAILS_PKG.Delete_Row (
590         X_RULE_DETAIL_ID => l_rule_detail_id
591     );
592 
593 
594     -- standard call to get message count and if count is 1, get message info.
595     FND_MSG_PUB.Count_And_Get(
596                 p_encoded => FND_API.G_FALSE,
597                 p_count => x_msg_count,
598                 p_data  => x_msg_data);
599 
600 
601 EXCEPTION
602     WHEN FND_API.G_EXC_ERROR THEN
603         ROLLBACK TO delete_rule_detail;
604         x_return_status := FND_API.G_RET_STS_ERROR;
605         FND_MSG_PUB.Count_And_Get(
606                                 p_encoded => FND_API.G_FALSE,
607                                 p_count => x_msg_count,
608                                 p_data  => x_msg_data);
609 
610     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
611         ROLLBACK TO delete_rule_detail;
612         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
613         FND_MSG_PUB.Count_And_Get(
614                                 p_encoded => FND_API.G_FALSE,
615                                 p_count => x_msg_count,
616                                 p_data  => x_msg_data);
617 
618     WHEN OTHERS THEN
619         ROLLBACK TO delete_rule_detail;
620         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
621         FND_MESSAGE.SET_NAME('FUN', 'FUN_RULE_API_OTHERS_EXCEP');
622         FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
623         FND_MSG_PUB.ADD;
624         FND_MSG_PUB.Count_And_Get(
625                                 p_encoded => FND_API.G_FALSE,
626                                 p_count => x_msg_count,
627                                 p_data  => x_msg_data);
628 END delete_rule_detail;
629 
630 END FUN_RULE_DETAILS_PUB;