DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_INTEREST_MAINT_PVT

Source


1 PACKAGE BODY OKL_INTEREST_MAINT_PVT AS
2 /* $Header: OKLRINMB.pls 115.6 2003/05/03 17:38:14 hkpatel noship $ */
3 
4 
5 FUNCTION overlap_exists(p_idx_type  IN VARCHAR2,
6                         p_idx_name  IN VARCHAR2,
7                         p_datetime_valid IN DATE,
8                         p_datetime_invalid IN DATE)
9 
10                RETURN VARCHAR2
11 
12   IS
13 
14 
15   TYPE ref_cursor IS REF CURSOR;
16   check_csr ref_cursor;
17 
18 
19   l_dummy VARCHAR2(1);
20   l_overlap_exists VARCHAR2(1) := OKL_API.G_FALSE;
21   l_datetime_valid DATE;
22   l_datetime_invalid DATE;
23 
24   l_stmt  VARCHAR2(2000);
25   l_stmt_org VARCHAR2(2000);
26   l_where VARCHAR2(2000);
27   l_exist VARCHAR2(10);
28 
29 
30   BEGIN
31 
32 
33 
34   l_stmt_org := ' SELECT datetime_valid,
35               datetime_invalid
36               FROM OKL_INDICES_V idx, OKL_INDEX_VALUES_V idxv
37               WHERE idx.id = idxv.idx_id
38               AND idx.name =     ' || '''' || ':1'   || '''' ||
39             ' AND idx.idx_type = ' || '''' || ':2'   || '''' ;
40 
41 
42 
43 
44    IF (p_datetime_invalid IS NOT NULL) THEN
45        l_where := ' AND idxv.datetime_invalid IS NOT NULL
46                    AND (( ' || '''' || ':3'|| '''' ||
47                           ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid) OR
48                 ( ' || '''' || ':4' ||  '''' ||
49                   ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid))';
50 
51       l_stmt := l_stmt_org || l_where;
52 
53       OPEN check_csr FOR l_stmt USING p_idx_name,
54 				      p_idx_type,
55 				      p_datetime_valid ,
56 				      p_datetime_invalid;
57 
58       FETCH check_csr INTO l_datetime_valid,
59                            l_datetime_invalid;
60       IF check_csr%NOTFOUND THEN
61          CLOSE check_csr;
62          l_where :=  ' AND idxv.datetime_invalid IS NULL
63                   AND ' || '''' || ':5'  || '''' ||
64                       ' > idxv.datetime_valid
65                        AND ' || '''' || ':6'  || '''' || ' > idxv.datetime_valid';
66 
67          l_stmt := l_stmt_org || l_where;
68          OPEN check_csr FOR l_stmt USING p_idx_name,
69 				      p_idx_type,
70 				      p_datetime_valid ,
71 				      p_datetime_invalid,
72 				      p_datetime_valid ,
73 				      p_datetime_invalid;
74 
75          FETCH check_csr INTO l_datetime_valid,
76                                  l_datetime_invalid;
77          IF (check_csr%NOTFOUND) THEN
78              l_overlap_exists := OKL_API.G_FALSE;
79          ELSE
80              l_overlap_exists := OKL_API.G_TRUE;
81          END IF;
82          CLOSE check_csr;
83       ELSE
84          l_overlap_exists := OKL_API.G_TRUE;
85          CLOSE check_csr;
86       END IF;
87 
88 
89    ELSE
90 
91       l_where := '  AND idxv.datetime_invalid IS NOT NULL
92                     AND ( ' || '''' || ':3' || '''' ||
93                   ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid)';
94 
95       l_stmt := l_stmt_org || l_where;
96 
97       OPEN check_csr FOR l_stmt USING p_idx_name,
98 				      p_idx_type,
99 				      p_datetime_valid;
100 
101       FETCH check_csr INTO l_datetime_valid,
102                       l_datetime_invalid;
103       IF check_csr%NOTFOUND THEN
104 
105           CLOSE check_csr;
106           l_where := ' AND idxv.datetime_invalid IS NULL
107                        AND ' || '''' || ':4'   || '''' ||
108                        ' > idxv.datetime_valid' ;
109 
110           l_stmt := l_stmt_org || l_where;
111 
112           OPEN check_csr FOR l_stmt USING p_idx_name,
113 				          p_idx_type,
114 				          p_datetime_valid,
115 					  p_datetime_valid;
116 
117           FETCH check_csr INTO l_datetime_valid,
118                               l_datetime_invalid;
119           IF (check_csr%NOTFOUND) THEN
120 
121               l_overlap_exists := OKL_API.G_FALSE;
122           ELSE
123 
124               l_overlap_exists := OKL_API.G_TRUE;
125           END IF;
126 
127           CLOSE check_csr;
128 
129       ELSE
130 
131           l_overlap_exists := OKL_API.G_TRUE;
132           CLOSE check_csr;
133 
134       END IF;
135 
136    END IF;
137 
138 
139    RETURN(l_overlap_exists);
140 
141 
142 END overlap_exists;
143 
144 
145 FUNCTION overlap_exists  (p_idx_id      IN NUMBER,
146                           p_datetime_valid    IN DATE,
147                           p_datetime_invalid    IN DATE)
148 
149                RETURN VARCHAR2
150 
151  IS
152 
153 
154 TYPE ref_cursor IS REF CURSOR;
155 check_csr ref_cursor;
156 
157 
158 
159 
160 l_dummy VARCHAR2(1);
161 l_overlap_exists VARCHAR2(1) := OKL_API.G_FALSE;
162 l_datetime_valid DATE;
163 l_datetime_invalid DATE;
164 
165 l_stmt  VARCHAR2(2000);
166 l_stmt_org VARCHAR2(2000);
167 l_where VARCHAR2(2000);
168 l_exist VARCHAR2(10);
169 
170 
171 
172 BEGIN
173 
174 
175    l_stmt_org := ' SELECT datetime_valid,
176               datetime_invalid
177               FROM OKL_INDICES_V idx, OKL_INDEX_VALUES_V idxv
178               WHERE idx.id = idxv.idx_id
179               AND idx.id  =     ' || ':1'  ;
180 
181 
182 
183 
184 
185 
186    IF (p_datetime_invalid IS NOT NULL) THEN
187        l_where := ' AND idxv.datetime_invalid IS NOT NULL
188                    AND (( ' || '''' || ':2'  || '''' ||
189                           ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid) OR
190                 ( ' || '''' || ':3'  ||  '''' ||
191                   ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid))';
192 
193        l_stmt := l_stmt_org || l_where;
194 
195        OPEN check_csr FOR l_stmt USING p_idx_id,
196 				       p_datetime_valid,
197 			   	       p_datetime_invalid;
198 
199 
200        FETCH check_csr INTO l_datetime_valid,
201                            l_datetime_invalid;
202        IF check_csr%NOTFOUND THEN
203           CLOSE check_csr;
204           l_where :=  ' AND idxv.datetime_invalid IS NULL
205                   AND ' || '''' || ':4'   || '''' ||
206                       ' > idxv.datetime_valid
207                        AND ' || '''' || ':5' || '''' || ' > idxv.datetime_valid';
208 
209           l_stmt := l_stmt_org || l_where;
210 
211           OPEN check_csr FOR l_stmt USING p_idx_id,
212 				          p_datetime_valid,
213 			   	          p_datetime_invalid,
214 					  p_datetime_valid,
215 					  p_datetime_invalid ;
216 
217           FETCH check_csr INTO l_datetime_valid,
218                                  l_datetime_invalid;
219           IF (check_csr%NOTFOUND) THEN
220              l_overlap_exists := OKL_API.G_FALSE;
221           ELSE
222              l_overlap_exists := OKL_API.G_TRUE;
223           END IF;
224           CLOSE check_csr;
225        ELSE
226           l_overlap_exists := OKL_API.G_TRUE;
227           CLOSE check_csr;
228        END IF;
229 
230 
231    ELSE
232 
233       l_where := '  AND idxv.datetime_invalid IS NOT NULL
234                     AND ( ' || '''' || ':2' || '''' ||
235                   ' BETWEEN idxv.datetime_valid AND idxv.datetime_invalid)';
236 
237       l_stmt := l_stmt_org || l_where;
238 
239       OPEN check_csr FOR l_stmt USING p_idx_id,
240 				      p_datetime_valid ;
241 
242       FETCH check_csr INTO l_datetime_valid,
243                       l_datetime_invalid;
244       IF check_csr%NOTFOUND THEN
245 
246          CLOSE check_csr;
247          l_where := ' AND idxv.datetime_invalid IS NULL
248                        AND ' || '''' || ':3'   || '''' ||
249                        ' > idxv.datetime_valid' ;
250 
251          l_stmt := l_stmt_org || l_where;
252 
253          OPEN check_csr FOR l_stmt USING p_idx_id,
254 				         p_datetime_valid,
255 					 p_datetime_valid ;
256 
257          FETCH check_csr INTO l_datetime_valid,
258                           l_datetime_invalid;
259          IF (check_csr%NOTFOUND) THEN
260 
261              l_overlap_exists := OKL_API.G_FALSE;
262          ELSE
263 
264              l_overlap_exists := OKL_API.G_TRUE;
265          END IF;
266          CLOSE check_csr;
267       ELSE
268          l_overlap_exists := OKL_API.G_TRUE;
269          CLOSE check_csr;
270       END IF;
271 
272    END IF;
273 
274 
275    RETURN(l_overlap_exists);
276 
277 
278 END overlap_exists;
279 
280 
281 
282 PROCEDURE INT_HDR_INS_UPDT(p_api_version      IN     NUMBER,
283                            p_init_msg_list    IN     VARCHAR2,
284                            x_return_status    OUT    NOCOPY VARCHAR2,
285                            x_msg_count        OUT    NOCOPY NUMBER,
286                            x_msg_data         OUT    NOCOPY VARCHAR2,
287                            p_idxv_rec         IN     idxv_rec_type)
288 IS
289 
290   l_idxv_rec_in      idxv_rec_type;
291   l_idxv_rec_out     idxv_rec_type;
292 
293   l_init_msg_list    VARCHAR2(1) := p_init_msg_list;
294   l_return_status    VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
295   l_msg_count        NUMBER;
296   l_msg_data         VARCHAR2(2000);
297   l_api_name         VARCHAR2(30) := 'INT_HDR_INS_UPDT';
298   l_api_version      NUMBER := 1.0;
299   l_idx_frequency    OKL_INDICES.IDX_FREQUENCY%TYPE;
300 
301   CURSOR freq_csr(v_idx_id NUMBER) IS
302   SELECT idx_frequency
303   FROM OKL_INDICES idx,
304        OKL_INDEX_VALUES ive
305   WHERE ive.idx_id = idx.id
306   AND   idx.ID = v_idx_id;
307 
308 
309 BEGIN
310 
311   x_return_status := OKL_API.G_RET_STS_SUCCESS;
312   l_return_status := OKL_API.START_ACTIVITY(l_api_name,
313                                             G_PKG_NAME,
314                                             p_init_msg_list,
315                                             l_api_version,
316                                             p_api_version,
317                                             '_PVT',
318                                             x_return_status);
319   IF (l_return_status = OKL_Api.G_RET_STS_UNEXP_ERROR) THEN
320       RAISE OKL_Api.G_EXCEPTION_UNEXPECTED_ERROR;
321   ELSIF (l_return_status = OKL_Api.G_RET_STS_ERROR) THEN
322       RAISE OKL_Api.G_EXCEPTION_ERROR;
323   END IF;
324 
325   l_idxv_rec_in := p_idxv_rec;
326 
327   IF (p_idxv_rec.id = OKL_API.G_MISS_NUM) OR
328      (p_idxv_rec.ID  IS NULL)  THEN
329 
330       OKL_INDICES_PUB.CREATE_INDICES(p_api_version   => 1.0,
331 		                     p_init_msg_list => l_init_msg_list,
332                                      x_return_status => l_return_status,
333                                      x_msg_count     => l_msg_count,
334                                      x_msg_data      => l_msg_data,
335                                      p_idxv_rec      => l_idxv_rec_in,
336                                      x_idxv_rec      => l_idxv_rec_out);
337   ELSE
338 
339      OPEN freq_csr(p_idxv_rec.ID);
340      FETCH freq_csr INTO l_idx_frequency;
341 
342      IF (freq_csr%NOTFOUND) THEN
343         NULL;
344      ELSE
345         IF (l_idx_frequency <> p_idxv_rec.idx_frequency) THEN
346            OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
347                                p_msg_name     => 'OKL_INT_FREQ_CANNOT_CHANGE');
348            RAISE OKL_API.G_EXCEPTION_ERROR;
349        END IF;
350      END IF;
351      CLOSE freq_csr;
352 
353      OKL_INDICES_PUB.UPDATE_INDICES(p_api_version            => 1.0,
354                                     p_init_msg_list          => l_init_msg_list,
355                                     x_return_status          => l_return_status,
356                                     x_msg_count              => l_msg_count,
357                                     x_msg_data               => l_msg_data,
358                                     p_idxv_rec               => l_idxv_rec_in,
359                                     x_idxv_rec               => l_idxv_rec_out);
360   END IF;
361 
362 
363   IF (l_return_status = OKL_Api.G_RET_STS_UNEXP_ERROR) THEN
364       RAISE OKL_Api.G_EXCEPTION_UNEXPECTED_ERROR;
365   ELSIF (l_return_status = OKL_Api.G_RET_STS_ERROR) THEN
366       RAISE OKL_Api.G_EXCEPTION_ERROR;
367   END IF;
368 
369   OKL_Api.END_ACTIVITY(x_msg_count, x_msg_data);
370 
371 EXCEPTION
372     WHEN OKL_Api.G_EXCEPTION_ERROR THEN
373       x_return_status := OKL_Api.HANDLE_EXCEPTIONS
374       (
375         l_api_name,
376         G_PKG_NAME,
377         'OKL_API.G_RET_STS_ERROR',
378         x_msg_count,
379         x_msg_data,
380         '_PVT'
381       );
382     WHEN OKL_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
383       x_return_status :=OKL_Api.HANDLE_EXCEPTIONS
384       (
385         l_api_name,
386         G_PKG_NAME,
387         'OKL_API.G_RET_STS_UNEXP_ERROR',
388         x_msg_count,
389         x_msg_data,
390         '_PVT'
391       );
392     WHEN OTHERS THEN
393       x_return_status :=OKL_Api.HANDLE_EXCEPTIONS
394       (
395         l_api_name,
396         G_PKG_NAME,
397         'OTHERS',
398         x_msg_count,
399         x_msg_data,
400         '_PVT');
401 
402 END INT_HDR_INS_UPDT;
403 
404 
405 
406 
407 PROCEDURE INT_HDR_INS_UPDT(p_api_version     IN    NUMBER,
408                            p_init_msg_list   IN    VARCHAR2,
409                            x_return_status   OUT   NOCOPY VARCHAR2,
410                            x_msg_count       OUT   NOCOPY NUMBER,
411                            x_msg_data        OUT   NOCOPY VARCHAR2,
412                            p_idxv_tbl        IN    idxv_tbl_type)
413 IS
414 
415     l_api_version               CONSTANT NUMBER := 1.0;
416     l_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
417     l_overall_status            VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
418     i                           NUMBER := 0;
419     l_msg_count                 NUMBER;
420     l_msg_data                  VARCHAR2(2000);
421 
422 
423 
424 BEGIN
425 
426    IF (p_idxv_tbl.COUNT > 0) THEN
427 
428        i := p_idxv_tbl.FIRST;
429 
430        LOOP
431              INT_HDR_INS_UPDT (
432              p_api_version                  => l_api_version,
433              p_init_msg_list                => OKL_API.G_FALSE,
434              x_return_status                => l_return_status,
435              x_msg_count                    => l_msg_count,
436              x_msg_data                     => l_msg_data,
437              p_idxv_rec                     => p_idxv_tbl(i));
438 
439 
440            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
441                IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
442                   l_overall_status := l_return_status;
443                END IF;
444            END IF;
445 
446            EXIT WHEN (i = p_idxv_tbl.LAST);
447 
448            i := p_idxv_tbl.NEXT(i);
449 
450        END LOOP;
451 
452        x_return_status := l_overall_status;
453 
454    END IF;
455 
456 
457 END INT_HDR_INS_UPDT;
458 
459 
460 
461 
462 
463 PROCEDURE INT_DTL_INS_UPDT(p_api_version       IN       NUMBER,
464                            p_init_msg_list     IN       VARCHAR2,
465                            x_return_status     OUT      NOCOPY VARCHAR2,
466                            x_msg_count         OUT      NOCOPY NUMBER,
467                            x_msg_data          OUT      NOCOPY VARCHAR2,
468                            p_ivev_rec          IN       ivev_rec_type)
469 IS
470 
471   l_error_flag        VARCHAR2(1) := 'N';
472   l_api_name          CONSTANT VARCHAR2(40) := 'OKL_INT_DTL_INS_UPDT';
473   l_api_version       CONSTANT NUMBER       := 1.0;
474   l_row_count         NUMBER;
475   l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
476 
477 
478   l_ivev_rec_in       ivev_rec_type;
479   l_ivev_rec_out      ivev_rec_type;
480 
481 
482 
483   l_init_msg_list     VARCHAR2(1);
484   l_msg_count         NUMBER;
485   l_msg_data          VARCHAR2(2000);
486   l_msg_text          VARCHAR2(50);
487 
488   i                   NUMBER := 0;
489 
490 
491 BEGIN
492 
493 
494   l_ivev_rec_in := p_ivev_rec;
495 
496   IF (p_ivev_rec.datetime_valid IS NOT NULL) THEN
497 
498        IF (p_ivev_rec.datetime_invalid IS NOT NULL) THEN
499 
500            IF (p_ivev_rec.datetime_invalid < p_ivev_rec.datetime_valid) THEN
501 
502                    l_error_flag := 'Y';
503                    l_msg_text   := 'OKL_INVALID_TO_DATE';
504 
505            END IF;
506 
507        END IF;
508 /*
509 
510        IF (overlap_exists(p_ivev_rec.idx_id,
511                           p_ivev_rec.datetime_valid,
512                           p_ivev_rec.datetime_invalid) = OKL_API.G_TRUE )
513        AND (p_ivev_rec.ID = OKL_API.G_MISS_NUM) THEN
514 
515                 l_error_flag := 'Y';
516                 l_msg_text := 'OKL_DATE_RANGE_OVERLAP';
517 
518        END IF;
519 */
520 
521   ELSE
522 
523        l_error_flag := 'Y';
524        l_msg_text := 'OKL_FROM_DATE_MANDATORY';
525 
526   END IF;
527 
528 
529   IF (l_error_flag = 'N') THEN
530 
531         IF (l_ivev_rec_in.ID = OKL_API.G_MISS_NUM) OR
532            (l_ivev_rec_in.ID IS NULL)  THEN
533 
534             OKL_INDICES_PUB.create_index_values(p_api_version      => 1.0,
535                                                 p_init_msg_list    => l_init_msg_list,
536                                                 x_return_status    => l_return_status,
537                                                 x_msg_count        => l_msg_count,
538                                                 x_msg_data         => l_msg_data,
539                                                 p_ivev_rec         => l_ivev_rec_in,
540                                                 x_ivev_rec         => l_ivev_rec_out);
541         ELSE
542 
543             OKL_INDICES_PUB.update_index_values(p_api_version      => 1.0,
544                                                 p_init_msg_list    => l_init_msg_list,
545                                                 x_return_status    => l_return_status,
546                                                 x_msg_count        => l_msg_count,
547                                                 x_msg_data         => l_msg_data,
548                                                 p_ivev_rec         => l_ivev_rec_in,
549                                                 x_ivev_rec         => l_ivev_rec_out);
550         END IF;
551 
552 
553   ELSE
554 
555         l_return_status := OKL_API.G_RET_STS_ERROR;
556         OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
557                             p_msg_name     => l_msg_text);
558 
559 
560   END IF;
561 
562   x_return_status := l_return_status;
563   x_msg_count     := l_msg_count;
564   x_msg_data      := l_msg_data;
565 
566 
567 END INT_DTL_INS_UPDT;
568 
569 
570 
571 PROCEDURE INT_DTL_INS_UPDT(p_api_version              IN    NUMBER,
572                            p_init_msg_list            IN    VARCHAR2,
573                            x_return_status            OUT   NOCOPY VARCHAR2,
574                            x_msg_count                OUT   NOCOPY NUMBER,
575                            x_msg_data                 OUT   NOCOPY VARCHAR2,
576                            p_ivev_tbl                 IN    ivev_tbl_type)
577 IS
578 
579   l_api_version               CONSTANT NUMBER := 1.0;
580   l_api_name                  CONSTANT VARCHAR2(40) := 'INT_DTL_INS_UPDT';
581   l_return_status             VARCHAR2(1)    := OKL_API.G_RET_STS_SUCCESS;
582   i                           NUMBER          := 0;
583   l_msg_count                 NUMBER;
584   l_msg_data                  VARCHAR2(2000);
585   l_ivev_tbl                  ivev_tbl_type;
586   j                           NUMBER := 0;
587   k                           NUMBER := 0;
588 
589   CURSOR ive_csr(v_idx_id NUMBER) IS
590   SELECT datetime_valid,
591          datetime_invalid
592   FROM OKL_INDEX_VALUES
593   WHERE idx_id = v_idx_id;
594 
595 
596 BEGIN
597 
598     x_return_status := OKL_API.G_RET_STS_SUCCESS;
599     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
600                                               G_PKG_NAME,
601                                               p_init_msg_list,
602                                               l_api_version,
603                                               p_api_version,
604                                               '_PVT',
605                                               x_return_status);
606     IF (l_return_status = OKL_Api.G_RET_STS_UNEXP_ERROR) THEN
607       RAISE OKL_Api.G_EXCEPTION_UNEXPECTED_ERROR;
608     ELSIF (l_return_status = OKL_Api.G_RET_STS_ERROR) THEN
609       RAISE OKL_Api.G_EXCEPTION_ERROR;
610     END IF;
611 
612     IF (p_ivev_tbl.COUNT > 0) THEN
613 
614         i := p_ivev_tbl.FIRST;
615 
616         LOOP
617              INT_DTL_INS_UPDT(p_api_version          => l_api_version,
618                               p_init_msg_list        => p_init_msg_list,
619                               x_return_status        => l_return_status,
620                               x_msg_count            => l_msg_count,
621                               x_msg_data             => l_msg_data,
622                               p_ivev_rec             => p_ivev_tbl(i));
623 
624             IF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
625                RAISE OKL_API.G_EXCEPTION_ERROR;
626             ELSIF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
627                RAISE OKL_API.G_EXCEPTION_ERROR;
628             END IF;
629 
630             EXIT WHEN (i = p_ivev_tbl.LAST);
631 
632             i := p_ivev_tbl.NEXT(i);
633 
634         END LOOP;
635 
636 -- The following logic inserted to check for overlapping
637 
638         FOR ive_rec IN ive_csr(p_ivev_tbl(i).idx_id)
639         LOOP
640             k := k + 1;
641             l_ivev_tbl(k).datetime_valid   := ive_rec.datetime_valid;
642             l_ivev_tbl(k).datetime_invalid := ive_rec.datetime_invalid;
643         END LOOP;
644 
645         FOR i IN 1..l_ivev_tbl.COUNT
646         LOOP
647          IF (l_ivev_tbl(i).datetime_invalid is not null) THEN
648             FOR j IN 1..l_ivev_tbl.COUNT
649             LOOP
650                IF (l_ivev_tbl(j).datetime_invalid is not null) AND (j <> i) THEN
651                    IF (l_ivev_tbl(i).datetime_invalid between l_ivev_tbl(j).datetime_valid AND
652                        l_ivev_tbl(j).datetime_invalid) THEN
653                        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
654                                            p_msg_name     => 'OKL_DATE_RANGE_OVERLAP');
655                        RAISE OKL_API.G_EXCEPTION_ERROR;
656                    END IF;
657                ELSIF (l_ivev_tbl(j).datetime_invalid is NULL) AND (j <> i) THEN
658                    IF (l_ivev_tbl(i).datetime_invalid >= l_ivev_tbl(j).datetime_valid) THEN
659                        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
660                                            p_msg_name     => 'OKL_DATE_RANGE_OVERLAP');
661                        RAISE OKL_API.G_EXCEPTION_ERROR;
662                    END IF;
663                END IF;
664 
665             END LOOP;
666          ELSE
667             FOR j IN 1..l_ivev_tbl.COUNT
668             LOOP
669                 IF (l_ivev_tbl(j).datetime_invalid is NULL) and (j <> i) THEN
670                     OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
671                                         p_msg_name     => 'OKL_DATE_RANGE_OVERLAP');
672                     RAISE OKL_API.G_EXCEPTION_ERROR;
673                 END IF;
674 
675             END LOOP;
676          END IF;
677         END LOOP;
678 
679     END IF;
680 
681     OKL_Api.END_ACTIVITY(x_msg_count, x_msg_data);
682 
683 
684 EXCEPTION
685     WHEN OKL_Api.G_EXCEPTION_ERROR THEN
686       x_return_status := OKL_Api.HANDLE_EXCEPTIONS
687       (
688         l_api_name,
689         G_PKG_NAME,
690         'OKL_API.G_RET_STS_ERROR',
691         x_msg_count,
692         x_msg_data,
693         '_PVT'
694       );
695     WHEN OKL_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
696       x_return_status :=OKL_Api.HANDLE_EXCEPTIONS
697       (
698         l_api_name,
699         G_PKG_NAME,
700         'OKL_API.G_RET_STS_UNEXP_ERROR',
701         x_msg_count,
702         x_msg_data,
703         '_PVT'
704       );
705     WHEN OTHERS THEN
706       x_return_status :=OKL_Api.HANDLE_EXCEPTIONS
707       (
708         l_api_name,
709         G_PKG_NAME,
710         'OTHERS',
711         x_msg_count,
712         x_msg_data,
713         '_PVT'
714       );
715 
716 END INT_DTL_INS_UPDT;
717 
718 END OKL_INTEREST_MAINT_PVT;