DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_LRL_PVT

Source


1 PACKAGE BODY okl_lrl_pvt AS
2 /* $Header: OKLSLRLB.pls 120.1 2005/08/25 05:18:02 asawanka noship $ */
3 
4   --------------------------------------------------------------------------------
5   --PACKAGE CONSTANTS
6   --------------------------------------------------------------------------------
7 
8   g_ret_sts_success     CONSTANT varchar2(1) := okl_api.g_ret_sts_success;
9   g_ret_sts_unexp_error CONSTANT varchar2(1) := okl_api.g_ret_sts_unexp_error;
10   g_ret_sts_error       CONSTANT varchar2(1) := okl_api.g_ret_sts_error;
11   g_db_error            CONSTANT varchar2(12) := 'OKL_DB_ERROR';
12   g_prog_name_token     CONSTANT varchar2(9) := 'PROG_NAME';
13   g_miss_char           CONSTANT varchar2(1) := okl_api.g_miss_char;
14   g_miss_num            CONSTANT number := okl_api.g_miss_num;
15   g_miss_date           CONSTANT date := okl_api.g_miss_date;
16   g_no_parent_record    CONSTANT varchar2(200) := 'OKC_NO_PARENT_RECORD';
17   g_unexpected_error    CONSTANT varchar2(200) := 'OKC_CONTRACTS_UNEXPECTED_ERROR';
18   g_sqlerrm_token       CONSTANT varchar2(200) := 'SQLerrm';
19   g_sqlcode_token       CONSTANT varchar2(200) := 'SQLcode';
20   g_exception_halt_validation EXCEPTION;
21 
22   PROCEDURE api_copy IS
23 
24   BEGIN
25     NULL;
26   END api_copy;
27 
28   PROCEDURE change_version IS
29 
30   BEGIN
31     NULL;
32   END change_version;
33 
34   -------------------------------------
35   -- Function Name  : validate_id
36   -------------------------------------
37 
38   FUNCTION validate_id(p_id  IN  number) RETURN varchar2 IS
39     l_api_name CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_id';
40 
41   BEGIN
42 
43 
44     -- data is required
45 
46     IF (p_id IS NULL) OR (p_id = okl_api.g_miss_num) THEN
47       okl_api.set_message(p_app_name     =>  g_app_name
48                          ,p_msg_name     =>  g_required_value
49                          ,p_token1       =>  g_col_name_token
50                          ,p_token1_value =>  'id');
51       RAISE okl_api.g_exception_error;
52     END IF;
53     RETURN g_ret_sts_success;
54     EXCEPTION
55       WHEN okl_api.g_exception_error THEN
56         RETURN g_ret_sts_error;
57       WHEN okl_api.g_exception_unexpected_error THEN
58         RETURN g_ret_sts_unexp_error;
59       WHEN OTHERS THEN
60         okl_api.set_message(p_app_name     =>  g_app_name
61                            ,p_msg_name     =>  g_db_error
62                            ,p_token1       =>  g_prog_name_token
63                            ,p_token1_value =>  l_api_name
64                            ,p_token2       =>  'SQLCODE'
65                            ,p_token2_value =>  sqlcode
66                            ,p_token3       =>  'SQLERRM'
67                            ,p_token3_value =>  sqlerrm);
68         RETURN g_ret_sts_unexp_error;
69   END validate_id;
70 
71   --------------------------------------------
72   -- lock_row for:OKL_FE_RATE_SET_LEVELS_V --
73   --------------------------------------------
74 
75   PROCEDURE lock_row(p_init_msg_list  IN             varchar2
76                     ,x_return_status     OUT NOCOPY  varchar2
77                     ,x_msg_count         OUT NOCOPY  number
78                     ,x_msg_data          OUT NOCOPY  varchar2
79                     ,p_lrlv_rec       IN             okl_lrlv_rec) IS
80     e_resource_busy EXCEPTION;
81 
82     PRAGMA exception_init(e_resource_busy, - 00054);
83 
84     CURSOR lock_csr(p_lrlv_rec  IN  okl_lrlv_rec) IS
85       SELECT        object_version_number
86       FROM          okl_fe_rate_set_levels
87       WHERE         rate_set_level_id = p_lrlv_rec.rate_set_level_id
88                 AND object_version_number = p_lrlv_rec.object_version_number
89       FOR UPDATE OF object_version_number NOWAIT;
90 
91     CURSOR lchk_csr(p_lrlv_rec  IN  okl_lrlv_rec) IS
92       SELECT object_version_number
93       FROM   okl_fe_rate_set_levels
94       WHERE  rate_set_level_id = p_lrlv_rec.rate_set_level_id;
95     l_api_version            CONSTANT number := 1;
96     l_api_name               CONSTANT varchar2(30) := 'V_lock_row';
97     l_return_status                   varchar2(1) := okl_api.g_ret_sts_success;
98     l_object_version_number           okl_fe_rate_set_levels.object_version_number%TYPE;
99     lc_object_version_number          okl_fe_rate_set_levels.object_version_number%TYPE;
100     l_row_notfound                    boolean := false;
101     lc_row_notfound                   boolean := false;
102 
103   BEGIN
104     l_return_status := okl_api.start_activity(l_api_name
105                                              ,p_init_msg_list
106                                              ,'_PVT'
107                                              ,x_return_status);
108 
109     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
110       RAISE okl_api.g_exception_unexpected_error;
111     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
112       RAISE okl_api.g_exception_error;
113     END IF;
114 
115     BEGIN
116       OPEN lock_csr(p_lrlv_rec);
117       FETCH lock_csr INTO l_object_version_number ;
118       l_row_notfound := lock_csr%NOTFOUND;
119       CLOSE lock_csr;
120       EXCEPTION
121         WHEN e_resource_busy THEN
122 
123           IF (lock_csr%ISOPEN) THEN
124             CLOSE lock_csr;
125           END IF;
126           okl_api.set_message(g_fnd_app, g_form_unable_to_reserve_rec);
127           RAISE app_exceptions.record_lock_exception;
128     END;
129 
130     IF (l_row_notfound) THEN
131       OPEN lchk_csr(p_lrlv_rec);
132       FETCH lchk_csr INTO lc_object_version_number ;
133       lc_row_notfound := lchk_csr%NOTFOUND;
134       CLOSE lchk_csr;
135     END IF;
136 
137     IF (lc_row_notfound) THEN
138       okl_api.set_message(g_fnd_app, g_form_record_deleted);
139       RAISE okl_api.g_exception_error;
140     ELSIF lc_object_version_number > p_lrlv_rec.object_version_number THEN
141       okl_api.set_message(g_fnd_app, g_form_record_changed);
142       RAISE okl_api.g_exception_error;
143     ELSIF lc_object_version_number <> p_lrlv_rec.object_version_number THEN
144       okl_api.set_message(g_fnd_app, g_form_record_changed);
145       RAISE okl_api.g_exception_error;
146     ELSIF lc_object_version_number = - 1 THEN
147       okl_api.set_message(g_app_name, g_record_logically_deleted);
148       RAISE okl_api.g_exception_error;
149     END IF;
150     okl_api.end_activity(x_msg_count, x_msg_data);
151     EXCEPTION
152       WHEN g_exception_halt_validation THEN
153         x_return_status := okl_api.handle_exceptions(l_api_name
154                                                     ,g_pkg_name
155                                                     ,'OKL_API.G_RET_STS_ERROR'
156                                                     ,x_msg_count
157                                                     ,x_msg_data
158                                                     ,'_PVT');
159       WHEN okl_api.g_exception_error THEN
160         x_return_status := okl_api.handle_exceptions(l_api_name
161                                                     ,g_pkg_name
162                                                     ,'OKL_API.G_RET_STS_ERROR'
163                                                     ,x_msg_count
164                                                     ,x_msg_data
165                                                     ,'_PVT');
166       WHEN okl_api.g_exception_unexpected_error THEN
167         x_return_status := okl_api.handle_exceptions(l_api_name
168                                                     ,g_pkg_name
169                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
170                                                     ,x_msg_count
171                                                     ,x_msg_data
172                                                     ,'_PVT');
173       WHEN OTHERS THEN
174         x_return_status := okl_api.handle_exceptions(l_api_name
175                                                     ,g_pkg_name
176                                                     ,'OTHERS'
177                                                     ,x_msg_count
178                                                     ,x_msg_data
179                                                     ,'_PVT');
180   END lock_row;
181 
182   --------------------------------------------------
183   -- PL/SQL TBL lock_row for: OKL_ITM_RSD_HDR --
184   --------------------------------------------------
185 
186   PROCEDURE lock_row(p_api_version    IN             number
187                     ,p_init_msg_list  IN             varchar2
188                     ,x_return_status     OUT NOCOPY  varchar2
189                     ,x_msg_count         OUT NOCOPY  number
190                     ,x_msg_data          OUT NOCOPY  varchar2
191                     ,p_lrlv_tbl       IN             okl_lrlv_tbl) IS
192     l_api_version    CONSTANT number := 1;
193     l_api_name       CONSTANT varchar2(30) := 'tbl_lock_row';
194     l_return_status           varchar2(1) := okl_api.g_ret_sts_success;
195 
196     -- Begin Post-Generation Change
197     -- overall error status
198 
199     l_overall_status          varchar2(1) := okl_api.g_ret_sts_success;
200 
201     -- End Post-Generation Change
202 
203     i                         number := 0;
204 
205   BEGIN
206     okl_api.init_msg_list(p_init_msg_list);
207 
208     -- Make sure PL/SQL table has records in it before passing
209 
210     IF (p_lrlv_tbl.COUNT > 0) THEN
211       i := p_lrlv_tbl.FIRST;
212 
213       LOOP
214         lock_row(p_init_msg_list =>  okl_api.g_false
215                 ,x_return_status =>  x_return_status
216                 ,x_msg_count     =>  x_msg_count
217                 ,x_msg_data      =>  x_msg_data
218                 ,p_lrlv_rec      =>  p_lrlv_tbl(i));
219 
220         -- Begin Post-Generation Change
221         -- store the highest degree of error
222 
223         IF x_return_status <> okl_api.g_ret_sts_success THEN
224           IF l_overall_status <> okl_api.g_ret_sts_unexp_error THEN
225             l_overall_status := x_return_status;
226           END IF;
227         END IF;
228 
229         -- End Post-Generation Change
230 
231         EXIT WHEN(i = p_lrlv_tbl.LAST);
232         i := p_lrlv_tbl.next(i);
233       END LOOP;
234 
235       -- Begin Post-Generation Change
236       -- return overall status
237 
238       x_return_status := l_overall_status;
239 
240     -- End Post-Generation Change
241 
242     END IF;
243 
244     EXCEPTION
245       WHEN g_exception_halt_validation THEN
246         x_return_status := okl_api.handle_exceptions(l_api_name
247                                                     ,g_pkg_name
248                                                     ,'OKL_API.G_RET_STS_ERROR'
249                                                     ,x_msg_count
250                                                     ,x_msg_data
251                                                     ,'_PVT');
252       WHEN okl_api.g_exception_error THEN
253         x_return_status := okl_api.handle_exceptions(l_api_name
254                                                     ,g_pkg_name
255                                                     ,'OKL_API.G_RET_STS_ERROR'
256                                                     ,x_msg_count
257                                                     ,x_msg_data
258                                                     ,'_PVT');
259       WHEN okl_api.g_exception_unexpected_error THEN
260         x_return_status := okl_api.handle_exceptions(l_api_name
261                                                     ,g_pkg_name
262                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
263                                                     ,x_msg_count
264                                                     ,x_msg_data
265                                                     ,'_PVT');
266       WHEN OTHERS THEN
267         x_return_status := okl_api.handle_exceptions(l_api_name
268                                                     ,g_pkg_name
269                                                     ,'OTHERS'
270                                                     ,x_msg_count
271                                                     ,x_msg_data
272                                                     ,'_PVT');
273   END lock_row;
274 
275   --------------------------------------------------
276   -- Function Name  : validate_object_version_number
277   --------------------------------------------------
278 
279   FUNCTION validate_object_version_number(p_object_version_number  IN  number) RETURN varchar2 IS
280     l_api_name CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_object_version_number';
281 
282   BEGIN
283 
284     IF (p_object_version_number IS NULL) OR (p_object_version_number = g_miss_num) THEN
285       okl_api.set_message(p_app_name     =>  g_app_name
286                          ,p_msg_name     =>  g_required_value
287                          ,p_token1       =>  g_col_name_token
288                          ,p_token1_value =>  'object_version_number');
289       RAISE okl_api.g_exception_error;
290     END IF;
291     RETURN g_ret_sts_success;
292     EXCEPTION
293       WHEN okl_api.g_exception_error THEN
294         RETURN g_ret_sts_error;
295       WHEN okl_api.g_exception_unexpected_error THEN
296         RETURN g_ret_sts_unexp_error;
297       WHEN OTHERS THEN
298         okl_api.set_message(p_app_name     =>  g_app_name
299                            ,p_msg_name     =>  g_db_error
300                            ,p_token1       =>  g_prog_name_token
301                            ,p_token1_value =>  l_api_name
302                            ,p_token2       =>  g_sqlcode_token
303                            ,p_token2_value =>  sqlcode
304                            ,p_token3       =>  g_sqlerrm_token
305                            ,p_token3_value =>  sqlerrm);
306         RETURN g_ret_sts_unexp_error;
307   END validate_object_version_number;
308 
309   -------------------------------------------
310   -- Function validate_RESIDUAL_PERCENT
311   -------------------------------------------
312 
313   FUNCTION validate_residual_percent(p_residual_percent  IN  number) RETURN varchar2 IS
314     l_api_name CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_RESIDUAL_PERCENT';
315 
316   BEGIN
317 
318     IF (p_residual_percent IS NULL) OR (p_residual_percent = g_miss_num) THEN
319       okl_api.set_message(p_app_name     =>  g_app_name
320                          ,p_msg_name     =>  g_required_value
321                          ,p_token1       =>  g_col_name_token
322                          ,p_token1_value =>  'RESIDUAL_PERCENT');
323       RAISE okl_api.g_exception_error;
324     END IF;
325     RETURN g_ret_sts_success;
326     EXCEPTION
327       WHEN okl_api.g_exception_error THEN
328         RETURN g_ret_sts_error;
329       WHEN okl_api.g_exception_unexpected_error THEN
330         RETURN g_ret_sts_unexp_error;
331       WHEN OTHERS THEN
332         okl_api.set_message(p_app_name     =>  g_app_name
333                            ,p_msg_name     =>  g_db_error
334                            ,p_token1       =>  g_prog_name_token
335                            ,p_token1_value =>  l_api_name
336                            ,p_token2       =>  'SQLCODE'
337                            ,p_token2_value =>  sqlcode
338                            ,p_token3       =>  'SQLERRM'
339                            ,p_token3_value =>  sqlerrm);
340         RETURN g_ret_sts_unexp_error;
341   END validate_residual_percent;
342 
343   --------------------------------------------
344   -- Function Name  : validate_RATE_SET_ID
345   --------------------------------------------
346 
347   FUNCTION validate_rate_set_id(p_rate_set_id  IN  number) RETURN varchar2 IS
348     l_dummy_var          varchar2(1) := '?';
349     l_api_name  CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_RATE_SET_ID';
350 
351     -- select the ID of the parent record from the parent table
352 
353     CURSOR l_lrs_hdr_csr IS
354       SELECT 'x'
355       FROM   okl_ls_rt_fctr_sets_b
356       WHERE  id = p_rate_set_id;
357 
358   BEGIN
359 
360 
361     -- data is required
362 
363     IF (p_rate_set_id IS NULL) OR (p_rate_set_id = okl_api.g_miss_num) THEN
364       okl_api.set_message(p_app_name     =>  g_app_name
365                          ,p_msg_name     =>  g_required_value
366                          ,p_token1       =>  g_col_name_token
367                          ,p_token1_value =>  'RATE_SET_ID');
368       RAISE okl_api.g_exception_error;
369     END IF;
370 
371     -- enforce foreign key
372 
373     OPEN l_lrs_hdr_csr;
374     FETCH l_lrs_hdr_csr INTO l_dummy_var ;
375     CLOSE l_lrs_hdr_csr;
376 
377     -- if l_dummy_var is still set to default, data was not found
378 
379     IF (l_dummy_var = '?') THEN
380       okl_api.set_message(p_app_name     =>  g_app_name
381                          ,p_msg_name     =>  g_no_parent_record
382                          ,p_token1       =>  g_col_name_token
383                          ,p_token1_value =>  'RATE_SET_ID'
384                          ,p_token2       =>  g_child_table_token
385                          ,p_token2_value =>  'OKL_FE_RATE_SET_LEVELS'
386                          ,p_token3       =>  g_parent_table_token
387                          ,p_token3_value =>  'OKL_LS_RT_FCTR_SETS_B');
388       RAISE okl_api.g_exception_error;
389     END IF;
390     RETURN g_ret_sts_success;
391     EXCEPTION
392       WHEN okl_api.g_exception_error THEN
393 
394         -- verify that cursor was closed
395 
396         IF l_lrs_hdr_csr%ISOPEN THEN
397           CLOSE l_lrs_hdr_csr;
398         END IF;
399         RETURN g_ret_sts_error;
400       WHEN okl_api.g_exception_unexpected_error THEN
401 
402         -- verify that cursor was closed
403 
404         IF l_lrs_hdr_csr%ISOPEN THEN
405           CLOSE l_lrs_hdr_csr;
406         END IF;
407         RETURN g_ret_sts_unexp_error;
408       WHEN OTHERS THEN
409 
410         -- verify that cursor was closed
411 
412         IF l_lrs_hdr_csr%ISOPEN THEN
413           CLOSE l_lrs_hdr_csr;
414         END IF;
415         okl_api.set_message(p_app_name     =>  g_app_name
416                            ,p_msg_name     =>  g_db_error
417                            ,p_token1       =>  g_prog_name_token
418                            ,p_token1_value =>  l_api_name
419                            ,p_token2       =>  'SQLCODE'
420                            ,p_token2_value =>  sqlcode
421                            ,p_token3       =>  'SQLERRM'
422                            ,p_token3_value =>  sqlerrm);
423         RETURN g_ret_sts_unexp_error;
424   END validate_rate_set_id;
425 
426   --------------------------------------------
427   -- Function Name  : validate_RATE_SET_VERSION_ID
428   --------------------------------------------
429 
430   FUNCTION validate_rate_set_version_id(p_rate_set_version_id  IN  number) RETURN varchar2 IS
431     l_dummy_var          varchar2(1) := '?';
432     l_api_name  CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_RATE_SET_VERSION_ID';
433 
434     -- select the ID of the parent record from the parent table
435 
436     CURSOR l_lrs_ver_csr IS
437       SELECT 'x'
438       FROM   okl_fe_rate_set_versions
439       WHERE  rate_set_version_id = p_rate_set_version_id;
440 
441   BEGIN
442 
443 
444     -- data is required
445 
446     IF (p_rate_set_version_id IS NULL) OR (p_rate_set_version_id = okl_api.g_miss_num) THEN
447       okl_api.set_message(p_app_name     =>  g_app_name
448                          ,p_msg_name     =>  g_required_value
449                          ,p_token1       =>  g_col_name_token
450                          ,p_token1_value =>  'RATE_SET_VERSION_ID');
451       RAISE okl_api.g_exception_error;
452     END IF;
453 
454     -- enforce foreign key
455 
456     OPEN l_lrs_ver_csr;
457     FETCH l_lrs_ver_csr INTO l_dummy_var ;
458     CLOSE l_lrs_ver_csr;
459 
460     -- if l_dummy_var is still set to default, data was not found
461 
462     IF (l_dummy_var = '?') THEN
463       okl_api.set_message(p_app_name     =>  g_app_name
464                          ,p_msg_name     =>  g_no_parent_record
465                          ,p_token1       =>  g_col_name_token
466                          ,p_token1_value =>  'RATE_SET_VERSION_ID'
467                          ,p_token2       =>  g_child_table_token
468                          ,p_token2_value =>  'OKL_FE_RATE_SET_LEVELS'
469                          ,p_token3       =>  g_parent_table_token
470                          ,p_token3_value =>  'OKL_LS_RT_FCTR_VERS');
471       RAISE okl_api.g_exception_error;
472     END IF;
473     RETURN g_ret_sts_success;
474     EXCEPTION
475       WHEN okl_api.g_exception_error THEN
476 
477         -- verify that cursor was closed
478 
479         IF l_lrs_ver_csr%ISOPEN THEN
480           CLOSE l_lrs_ver_csr;
481         END IF;
482         RETURN g_ret_sts_error;
483       WHEN okl_api.g_exception_unexpected_error THEN
484 
485         -- verify that cursor was closed
486 
487         IF l_lrs_ver_csr%ISOPEN THEN
488           CLOSE l_lrs_ver_csr;
489         END IF;
490         RETURN g_ret_sts_unexp_error;
491       WHEN OTHERS THEN
492 
493         -- verify that cursor was closed
494 
495         IF l_lrs_ver_csr%ISOPEN THEN
496           CLOSE l_lrs_ver_csr;
497         END IF;
498         okl_api.set_message(p_app_name     =>  g_app_name
499                            ,p_msg_name     =>  g_db_error
500                            ,p_token1       =>  g_prog_name_token
501                            ,p_token1_value =>  l_api_name
502                            ,p_token2       =>  'SQLCODE'
503                            ,p_token2_value =>  sqlcode
504                            ,p_token3       =>  'SQLERRM'
505                            ,p_token3_value =>  sqlerrm);
506         RETURN g_ret_sts_unexp_error;
507   END validate_rate_set_version_id;
508 
509   --------------------------------------------
510   -- Function Name  : validate_RATE_SET_FACTOR_ID
511   --------------------------------------------
512 
513   FUNCTION validate_rate_set_factor_id(p_rate_set_factor_id  IN  number) RETURN varchar2 IS
514     l_dummy_var          varchar2(1) := '?';
515     l_api_name  CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_RATE_SET_FACTOR_ID';
516 
517     -- select the ID of the parent record from the parent table
518 
519     CURSOR l_lrf_csr IS
520       SELECT 'x'
521       FROM   okl_ls_rt_fctr_ents
522       WHERE  id = p_rate_set_factor_id;
523 
524   BEGIN
525 
526 
527     -- data is required
528 
529     IF p_rate_set_factor_id IS NOT NULL THEN
530 
531       -- enforce foreign key
532 
533       OPEN l_lrf_csr;
534       FETCH l_lrf_csr INTO l_dummy_var ;
535       CLOSE l_lrf_csr;
536 
537       -- if l_dummy_var is still set to default, data was not found
538 
539       IF (l_dummy_var = '?') THEN
540         okl_api.set_message(p_app_name     =>  g_app_name
541                            ,p_msg_name     =>  g_no_parent_record
542                            ,p_token1       =>  g_col_name_token
543                            ,p_token1_value =>  'RATE_SET_FACTOR_ID'
544                            ,p_token2       =>  g_child_table_token
545                            ,p_token2_value =>  'OKL_FE_RATE_SET_LEVELS'
546                            ,p_token3       =>  g_parent_table_token
547                            ,p_token3_value =>  'OKL_LS_RT_FCTR_ENTS');
548         RAISE okl_api.g_exception_error;
549       END IF;
550     END IF;
551     RETURN g_ret_sts_success;
552     EXCEPTION
553       WHEN okl_api.g_exception_error THEN
554 
555         -- verify that cursor was closed
556 
557         IF l_lrf_csr%ISOPEN THEN
558           CLOSE l_lrf_csr;
559         END IF;
560         RETURN g_ret_sts_error;
561       WHEN okl_api.g_exception_unexpected_error THEN
562 
563         -- verify that cursor was closed
564 
565         IF l_lrf_csr%ISOPEN THEN
566           CLOSE l_lrf_csr;
567         END IF;
568         RETURN g_ret_sts_unexp_error;
569       WHEN OTHERS THEN
570 
571         -- verify that cursor was closed
572 
573         IF l_lrf_csr%ISOPEN THEN
574           CLOSE l_lrf_csr;
575         END IF;
576         okl_api.set_message(p_app_name     =>  g_app_name
577                            ,p_msg_name     =>  g_db_error
578                            ,p_token1       =>  g_prog_name_token
579                            ,p_token1_value =>  l_api_name
580                            ,p_token2       =>  'SQLCODE'
581                            ,p_token2_value =>  sqlcode
582                            ,p_token3       =>  'SQLERRM'
583                            ,p_token3_value =>  sqlerrm);
584         RETURN g_ret_sts_unexp_error;
585   END validate_rate_set_factor_id;
586 
587   ---------------------------------------------------
588   -- Function Name  : validate_rate
589   ---------------------------------------------------
590 
591   FUNCTION validate_periods(p_periods  IN  number) RETURN varchar2 IS
592     l_api_name CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_periods';
593 
594   BEGIN
595 
596 
597     -- data is required
598 
599     IF (p_periods IS NULL) OR (p_periods = okl_api.g_miss_num) THEN
600       okl_api.set_message(p_app_name     =>  g_app_name
601                          ,p_msg_name     =>  g_required_value
602                          ,p_token1       =>  g_col_name_token
603                          ,p_token1_value =>  'periods');
604       RAISE okl_api.g_exception_error;
605     END IF;
606 
607     IF p_periods <= 0 THEN
608       okl_api.set_message(p_app_name     =>  g_app_name
609                          ,p_msg_name     =>  g_invalid_value
610                          ,p_token1       =>  g_col_name_token
611                          ,p_token1_value =>  'Periods');
612       RAISE okl_api.g_exception_error;
613     END IF;
614 
615     IF (trunc(p_periods) <> p_periods) THEN
616       okl_api.set_message(p_app_name     =>  g_app_name
617                          ,p_msg_name     =>  g_invalid_value
618                          ,p_token1       =>  g_col_name_token
619                          ,p_token1_value =>  'Periods');
620       RAISE okl_api.g_exception_error;
621     END IF;
622     RETURN g_ret_sts_success;
623     EXCEPTION
624       WHEN okl_api.g_exception_error THEN
625         RETURN g_ret_sts_error;
626       WHEN okl_api.g_exception_unexpected_error THEN
627         RETURN g_ret_sts_unexp_error;
628       WHEN OTHERS THEN
629         okl_api.set_message(p_app_name     =>  g_app_name
630                            ,p_msg_name     =>  g_db_error
631                            ,p_token1       =>  g_prog_name_token
632                            ,p_token1_value =>  l_api_name
633                            ,p_token2       =>  'SQLCODE'
634                            ,p_token2_value =>  sqlcode
635                            ,p_token3       =>  'SQLERRM'
636                            ,p_token3_value =>  sqlerrm);
637         RETURN g_ret_sts_unexp_error;
638   END validate_periods;
639 
640   ---------------------------------------------------
641   -- Function Name  : validate_lease_rate_factor
642   ---------------------------------------------------
643 
644   FUNCTION validate_lease_rate_factor (p_lease_rate_factor  IN  number) RETURN varchar2 IS
645     l_api_name CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_lease_rate_factor';
646 
647   BEGIN
648 
649 
650     -- data is required
651 
652     IF (p_lease_rate_factor IS NULL) OR (p_lease_rate_factor = okl_api.g_miss_num) THEN
653       okl_api.set_message(p_app_name     =>  g_app_name
654                          ,p_msg_name     =>  g_required_value
655                          ,p_token1       =>  g_col_name_token
656                          ,p_token1_value =>  'lease_rate_factor');
657       RAISE okl_api.g_exception_error;
658     END IF;
659 
660     RETURN g_ret_sts_success;
661     EXCEPTION
662       WHEN okl_api.g_exception_error THEN
663         RETURN g_ret_sts_error;
664       WHEN okl_api.g_exception_unexpected_error THEN
665         RETURN g_ret_sts_unexp_error;
666       WHEN OTHERS THEN
667         okl_api.set_message(p_app_name     =>  g_app_name
668                            ,p_msg_name     =>  g_db_error
669                            ,p_token1       =>  g_prog_name_token
670                            ,p_token1_value =>  l_api_name
671                            ,p_token2       =>  'SQLCODE'
672                            ,p_token2_value =>  sqlcode
673                            ,p_token3       =>  'SQLERRM'
674                            ,p_token3_value =>  sqlerrm);
675         RETURN g_ret_sts_unexp_error;
676   END validate_lease_rate_factor;
677 
678   --------------------------------------------------------------------------------
679   -- Procedure get_rec for OKL_FE_RATE_SET_LEVELS_V
680   --------------------------------------------------------------------------------
681 
682   FUNCTION get_rec(p_lrlv_rec       IN             okl_lrlv_rec
683                   ,x_no_data_found     OUT NOCOPY  boolean) RETURN okl_lrlv_rec IS
684 
685     CURSOR lrlv_pk_csr(p_id  IN  number) IS
686       SELECT rate_set_level_id
687             ,object_version_number
688             ,residual_percent
689             ,rate_set_id
690             ,rate_set_version_id
691             ,rate_set_factor_id
692             ,sequence_number
693             ,periods
694             ,lease_rate_factor
695             ,created_by
696             ,creation_date
697             ,last_updated_by
698             ,last_update_date
699             ,last_update_login
700             ,attribute_category
701             ,attribute1
702             ,attribute2
703             ,attribute3
704             ,attribute4
705             ,attribute5
706             ,attribute6
707             ,attribute7
708             ,attribute8
709             ,attribute9
710             ,attribute10
711             ,attribute11
712             ,attribute12
713             ,attribute13
714             ,attribute14
715             ,attribute15
716       FROM   okl_fe_rate_set_levels_v
717       WHERE  okl_fe_rate_set_levels_v.rate_set_level_id = p_id;
718     l_lrlv_pk  lrlv_pk_csr%ROWTYPE;
719     l_lrlv_rec okl_lrlv_rec;
720 
721   BEGIN
722     x_no_data_found := true;
723 
724     --Get current data base values
725 
726     OPEN lrlv_pk_csr(p_lrlv_rec.rate_set_level_id);
727     FETCH lrlv_pk_csr INTO l_lrlv_rec.rate_set_level_id
728                           ,l_lrlv_rec.object_version_number
729                           ,l_lrlv_rec.residual_percent
730                           ,l_lrlv_rec.rate_set_id
731                           ,l_lrlv_rec.rate_set_version_id
732                           ,l_lrlv_rec.rate_set_factor_id
733                           ,l_lrlv_rec.sequence_number
734                           ,l_lrlv_rec.periods
735                           ,l_lrlv_rec.lease_rate_factor
736                           ,l_lrlv_rec.created_by
737                           ,l_lrlv_rec.creation_date
738                           ,l_lrlv_rec.last_updated_by
739                           ,l_lrlv_rec.last_update_date
740                           ,l_lrlv_rec.last_update_login
741                           ,l_lrlv_rec.attribute_category
742                           ,l_lrlv_rec.attribute1
743                           ,l_lrlv_rec.attribute2
744                           ,l_lrlv_rec.attribute3
745                           ,l_lrlv_rec.attribute4
746                           ,l_lrlv_rec.attribute5
747                           ,l_lrlv_rec.attribute6
748                           ,l_lrlv_rec.attribute7
749                           ,l_lrlv_rec.attribute8
750                           ,l_lrlv_rec.attribute9
751                           ,l_lrlv_rec.attribute10
752                           ,l_lrlv_rec.attribute11
753                           ,l_lrlv_rec.attribute12
754                           ,l_lrlv_rec.attribute13
755                           ,l_lrlv_rec.attribute14
756                           ,l_lrlv_rec.attribute15 ;
757     x_no_data_found := lrlv_pk_csr%NOTFOUND;
758     CLOSE lrlv_pk_csr;
759     RETURN(l_lrlv_rec);
760   END get_rec;
761 
762   FUNCTION get_rec(p_lrlv_rec  IN  okl_lrlv_rec) RETURN okl_lrlv_rec IS
763     l_row_notfound boolean := true;
764 
765   BEGIN
766     RETURN(get_rec(p_lrlv_rec, l_row_notfound));
767   END get_rec;
768 
769   FUNCTION null_out_defaults(p_lrlv_rec  IN  okl_lrlv_rec) RETURN okl_lrlv_rec IS
770     l_lrlv_rec okl_lrlv_rec := p_lrlv_rec;
771 
772   BEGIN
773 
774     IF (l_lrlv_rec.rate_set_level_id = okl_api.g_miss_num) THEN
775       l_lrlv_rec.rate_set_level_id := NULL;
776     END IF;
777 
778     IF (l_lrlv_rec.object_version_number = okl_api.g_miss_num) THEN
779       l_lrlv_rec.object_version_number := NULL;
780     END IF;
781 
782     IF (l_lrlv_rec.residual_percent = okl_api.g_miss_num) THEN
783       l_lrlv_rec.residual_percent := NULL;
784     END IF;
785 
786     IF (l_lrlv_rec.rate_set_id = okl_api.g_miss_num) THEN
787       l_lrlv_rec.rate_set_id := NULL;
788     END IF;
789 
790     IF (l_lrlv_rec.rate_set_version_id = okl_api.g_miss_num) THEN
791       l_lrlv_rec.rate_set_version_id := NULL;
792     END IF;
793 
794     IF (l_lrlv_rec.rate_set_factor_id = okl_api.g_miss_num) THEN
795       l_lrlv_rec.rate_set_factor_id := NULL;
796     END IF;
797 
798     IF (l_lrlv_rec.sequence_number = okl_api.g_miss_num) THEN
799       l_lrlv_rec.sequence_number := NULL;
800     END IF;
801 
802     IF (l_lrlv_rec.periods = okl_api.g_miss_num) THEN
803       l_lrlv_rec.periods := NULL;
804     END IF;
805 
806     IF (l_lrlv_rec.lease_rate_factor = okl_api.g_miss_num) THEN
807       l_lrlv_rec.lease_rate_factor := NULL;
808     END IF;
809 
810     IF (l_lrlv_rec.created_by = okl_api.g_miss_num) THEN
811       l_lrlv_rec.created_by := NULL;
812     END IF;
813 
814     IF (l_lrlv_rec.creation_date = okl_api.g_miss_date) THEN
815       l_lrlv_rec.creation_date := NULL;
816     END IF;
817 
818     IF (l_lrlv_rec.last_updated_by = okl_api.g_miss_num) THEN
819       l_lrlv_rec.last_updated_by := NULL;
820     END IF;
821 
822     IF (l_lrlv_rec.last_update_date = okl_api.g_miss_date) THEN
823       l_lrlv_rec.last_update_date := NULL;
824     END IF;
825 
826     IF (l_lrlv_rec.last_update_login = okl_api.g_miss_num) THEN
827       l_lrlv_rec.last_update_login := NULL;
828     END IF;
829 
830     IF (l_lrlv_rec.attribute_category = okl_api.g_miss_char) THEN
831       l_lrlv_rec.attribute_category := NULL;
832     END IF;
833 
834     IF (l_lrlv_rec.attribute1 = okl_api.g_miss_char) THEN
835       l_lrlv_rec.attribute1 := NULL;
836     END IF;
837 
838     IF (l_lrlv_rec.attribute2 = okl_api.g_miss_char) THEN
839       l_lrlv_rec.attribute2 := NULL;
840     END IF;
841 
842     IF (l_lrlv_rec.attribute3 = okl_api.g_miss_char) THEN
843       l_lrlv_rec.attribute3 := NULL;
844     END IF;
845 
846     IF (l_lrlv_rec.attribute4 = okl_api.g_miss_char) THEN
847       l_lrlv_rec.attribute4 := NULL;
848     END IF;
849 
850     IF (l_lrlv_rec.attribute5 = okl_api.g_miss_char) THEN
851       l_lrlv_rec.attribute5 := NULL;
852     END IF;
853 
854     IF (l_lrlv_rec.attribute6 = okl_api.g_miss_char) THEN
855       l_lrlv_rec.attribute6 := NULL;
856     END IF;
857 
858     IF (l_lrlv_rec.attribute7 = okl_api.g_miss_char) THEN
859       l_lrlv_rec.attribute7 := NULL;
860     END IF;
861 
862     IF (l_lrlv_rec.attribute8 = okl_api.g_miss_char) THEN
863       l_lrlv_rec.attribute8 := NULL;
864     END IF;
865 
866     IF (l_lrlv_rec.attribute9 = okl_api.g_miss_char) THEN
867       l_lrlv_rec.attribute9 := NULL;
868     END IF;
869 
870     IF (l_lrlv_rec.attribute10 = okl_api.g_miss_char) THEN
871       l_lrlv_rec.attribute10 := NULL;
872     END IF;
873 
874     IF (l_lrlv_rec.attribute11 = okl_api.g_miss_char) THEN
875       l_lrlv_rec.attribute11 := NULL;
876     END IF;
877 
878     IF (l_lrlv_rec.attribute12 = okl_api.g_miss_char) THEN
879       l_lrlv_rec.attribute12 := NULL;
880     END IF;
881 
882     IF (l_lrlv_rec.attribute13 = okl_api.g_miss_char) THEN
883       l_lrlv_rec.attribute13 := NULL;
884     END IF;
885 
886     IF (l_lrlv_rec.attribute14 = okl_api.g_miss_char) THEN
887       l_lrlv_rec.attribute14 := NULL;
888     END IF;
889 
890     IF (l_lrlv_rec.attribute15 = okl_api.g_miss_char) THEN
891       l_lrlv_rec.attribute15 := NULL;
892     END IF;
893     RETURN(l_lrlv_rec);
894   END null_out_defaults;
895 
896   FUNCTION get_seq_id RETURN number IS
897 
898   BEGIN
899     RETURN(okc_p_util.raw_to_number(sys_guid()));
900   END get_seq_id;
901 
902   FUNCTION validate_attributes(p_lrlv_rec  IN  okl_lrlv_rec) RETURN varchar2 IS
903     l_return_status          varchar2(1) := okl_api.g_ret_sts_success;
904     x_return_status          varchar2(1) := okl_api.g_ret_sts_success;
905     l_api_name      CONSTANT varchar2(61) := g_pkg_name || '.' || 'validate_attributes';
906 
907   BEGIN
908 
909     -- call each column-level validation
910 
911 
912     l_return_status := validate_id(p_lrlv_rec.rate_set_level_id);
913 
914     IF (l_return_status = g_ret_sts_unexp_error) THEN
915       RAISE okl_api.g_exception_unexpected_error;
916     ELSIF (l_return_status = g_ret_sts_error) THEN
917       RAISE okl_api.g_exception_error;
918     END IF;
919     l_return_status := validate_object_version_number(p_lrlv_rec.object_version_number);
920 
921     IF (l_return_status = g_ret_sts_unexp_error) THEN
922       RAISE okl_api.g_exception_unexpected_error;
923     ELSIF (l_return_status = g_ret_sts_error) THEN
924       RAISE okl_api.g_exception_error;
925     END IF;  /*    l_return_status := validate_RESIDUAL_PERCENT(p_lrlv_rec.RESIDUAL_PERCENT);
926 
927     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
928          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
929        ELSIF (l_return_status = G_RET_STS_ERROR) THEN
930          RAISE OKL_API.G_EXCEPTION_ERROR;
931     END IF;*/
932     l_return_status := validate_rate_set_factor_id(p_lrlv_rec.rate_set_factor_id);
933 
934     IF (l_return_status = g_ret_sts_unexp_error) THEN
935       RAISE okl_api.g_exception_unexpected_error;
936     ELSIF (l_return_status = g_ret_sts_error) THEN
937       RAISE okl_api.g_exception_error;
938     END IF;
939     l_return_status := validate_rate_set_id(p_lrlv_rec.rate_set_id);
940 
941     IF (l_return_status = g_ret_sts_unexp_error) THEN
942       RAISE okl_api.g_exception_unexpected_error;
943     ELSIF (l_return_status = g_ret_sts_error) THEN
944       RAISE okl_api.g_exception_error;
945     END IF;
946     l_return_status := validate_rate_set_version_id(p_lrlv_rec.rate_set_version_id);
947 
948     IF (l_return_status = g_ret_sts_unexp_error) THEN
949       RAISE okl_api.g_exception_unexpected_error;
950     ELSIF (l_return_status = g_ret_sts_error) THEN
951       RAISE okl_api.g_exception_error;
952     END IF;
953     l_return_status := validate_periods(p_lrlv_rec.periods);
954 
955     IF (l_return_status = g_ret_sts_unexp_error) THEN
956       RAISE okl_api.g_exception_unexpected_error;
957     ELSIF (l_return_status = g_ret_sts_error) THEN
958       RAISE okl_api.g_exception_error;
959     END IF;
960     l_return_status := validate_lease_rate_factor (p_lrlv_rec.lease_rate_factor);
961 
962     IF (l_return_status = g_ret_sts_unexp_error) THEN
963       RAISE okl_api.g_exception_unexpected_error;
964     ELSIF (l_return_status = g_ret_sts_error) THEN
965       RAISE okl_api.g_exception_error;
966     END IF;
967     RETURN(x_return_status);
968     EXCEPTION
969       WHEN okl_api.g_exception_error THEN
970         RETURN g_ret_sts_error;
971       WHEN okl_api.g_exception_unexpected_error THEN
972         RETURN g_ret_sts_unexp_error;
973       WHEN OTHERS THEN
974         okl_api.set_message(p_app_name     =>  g_app_name
975                            ,p_msg_name     =>  g_db_error
976                            ,p_token1       =>  g_prog_name_token
977                            ,p_token1_value =>  l_api_name
978                            ,p_token2       =>  'SQLCODE'
979                            ,p_token2_value =>  sqlcode
980                            ,p_token3       =>  'SQLERRM'
981                            ,p_token3_value =>  sqlerrm);
982         RETURN g_ret_sts_unexp_error;
983   END validate_attributes;
984 
985   FUNCTION validate_record(p_lrlv_rec  IN  okl_lrlv_rec) RETURN varchar2 IS
986     l_return_status varchar2(1) := okl_api.g_ret_sts_success;
987     x_return_status varchar2(1) := okl_api.g_ret_sts_success;
988 
989   BEGIN
990     RETURN(x_return_status);
991   END validate_record;
992 
993   --------------------------------------------------------------------------------
994   -- Procedure insert_row
995   --------------------------------------------------------------------------------
996 
997   PROCEDURE insert_row(p_api_version    IN             number
998                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
999                       ,x_return_status     OUT NOCOPY  varchar2
1000                       ,x_msg_count         OUT NOCOPY  number
1001                       ,x_msg_data          OUT NOCOPY  varchar2
1002                       ,p_lrlv_rec       IN             okl_lrlv_rec
1003                       ,x_lrlv_rec          OUT NOCOPY  okl_lrlv_rec) IS
1004     l_api_version   CONSTANT number := 1;
1005     l_api_name      CONSTANT varchar2(30) := 'insert_row';
1006     l_return_status          varchar2(1) := okl_api.g_ret_sts_success;
1007     l_lrlv_rec               okl_lrlv_rec := p_lrlv_rec;
1008     l_def_lrlv_rec           okl_lrlv_rec;
1009 
1010     FUNCTION fill_who_columns(p_lrlv_rec  IN  okl_lrlv_rec) RETURN okl_lrlv_rec IS
1011       l_lrlv_rec okl_lrlv_rec := p_lrlv_rec;
1012 
1013     BEGIN
1014       l_lrlv_rec.creation_date := sysdate;
1015       l_lrlv_rec.created_by := fnd_global.user_id;
1016       l_lrlv_rec.last_update_date := sysdate;
1017       l_lrlv_rec.last_updated_by := fnd_global.user_id;
1018       l_lrlv_rec.last_update_login := fnd_global.login_id;
1019       RETURN(l_lrlv_rec);
1020     END fill_who_columns;
1021 
1022     FUNCTION set_attributes(p_lrlv_rec  IN             okl_lrlv_rec
1023                            ,x_lrlv_rec     OUT NOCOPY  okl_lrlv_rec) RETURN varchar2 IS
1024       l_return_status varchar2(1) := okl_api.g_ret_sts_success;
1025 
1026     BEGIN
1027       x_lrlv_rec := p_lrlv_rec;
1028 
1029       -- Set Primary key value
1030 
1031       x_lrlv_rec.rate_set_level_id := get_seq_id;
1032       x_lrlv_rec.object_version_number := 1;
1033       RETURN(l_return_status);
1034     END set_attributes;
1035 
1036   BEGIN
1037     l_return_status := okl_api.start_activity(l_api_name
1038                                              ,g_pkg_name
1039                                              ,p_init_msg_list
1040                                              ,l_api_version
1041                                              ,p_api_version
1042                                              ,'_PVT'
1043                                              ,x_return_status);
1044 
1045     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1046       RAISE okl_api.g_exception_unexpected_error;
1047     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1048       RAISE okl_api.g_exception_error;
1049     END IF;
1050 
1051     --null out defaults
1052 
1053     l_lrlv_rec := null_out_defaults(p_lrlv_rec);
1054 
1055     --Setting Item Attributes
1056 
1057     l_return_status := set_attributes(l_lrlv_rec, l_def_lrlv_rec);
1058 
1059     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1060       RAISE okl_api.g_exception_unexpected_error;
1061     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1062       RAISE okl_api.g_exception_error;
1063     END IF;
1064 
1065     --fill who columns
1066 
1067     l_def_lrlv_rec := fill_who_columns(l_def_lrlv_rec);
1068 
1069     --validate attributes
1070 
1071 
1072     l_return_status := validate_attributes(l_def_lrlv_rec);
1073 
1074     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1075       RAISE okl_api.g_exception_unexpected_error;
1076     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1077       RAISE okl_api.g_exception_error;
1078     END IF;
1079 
1080     --validate record
1081 
1082 
1083     l_return_status := validate_record(l_def_lrlv_rec);
1084 
1085     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1086       RAISE okl_api.g_exception_unexpected_error;
1087     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1088       RAISE okl_api.g_exception_error;
1089     END IF;
1090 
1091     --insert into table
1092 
1093     INSERT INTO okl_fe_rate_set_levels
1094                (rate_set_level_id
1095                ,object_version_number
1096                ,residual_percent
1097                ,rate_set_id
1098                ,rate_set_version_id
1099                ,rate_set_factor_id
1100                ,sequence_number
1101                ,periods
1102                ,lease_rate_factor
1103                ,created_by
1104                ,creation_date
1105                ,last_updated_by
1106                ,last_update_date
1107                ,last_update_login
1108                ,attribute_category
1109                ,attribute1
1110                ,attribute2
1111                ,attribute3
1112                ,attribute4
1113                ,attribute5
1114                ,attribute6
1115                ,attribute7
1116                ,attribute8
1117                ,attribute9
1118                ,attribute10
1119                ,attribute11
1120                ,attribute12
1121                ,attribute13
1122                ,attribute14
1123                ,attribute15)
1124     VALUES     (l_def_lrlv_rec.rate_set_level_id
1125                ,l_def_lrlv_rec.object_version_number
1126                ,l_def_lrlv_rec.residual_percent
1127                ,l_def_lrlv_rec.rate_set_id
1128                ,l_def_lrlv_rec.rate_set_version_id
1129                ,l_def_lrlv_rec.rate_set_factor_id
1130                ,l_def_lrlv_rec.sequence_number
1131                ,l_def_lrlv_rec.periods
1132                ,l_def_lrlv_rec.lease_rate_factor
1133                ,l_def_lrlv_rec.created_by
1134                ,l_def_lrlv_rec.creation_date
1135                ,l_def_lrlv_rec.last_updated_by
1136                ,l_def_lrlv_rec.last_update_date
1137                ,l_def_lrlv_rec.last_update_login
1138                ,l_def_lrlv_rec.attribute_category
1139                ,l_def_lrlv_rec.attribute1
1140                ,l_def_lrlv_rec.attribute2
1141                ,l_def_lrlv_rec.attribute3
1142                ,l_def_lrlv_rec.attribute4
1143                ,l_def_lrlv_rec.attribute5
1144                ,l_def_lrlv_rec.attribute6
1145                ,l_def_lrlv_rec.attribute7
1146                ,l_def_lrlv_rec.attribute8
1147                ,l_def_lrlv_rec.attribute9
1148                ,l_def_lrlv_rec.attribute10
1149                ,l_def_lrlv_rec.attribute11
1150                ,l_def_lrlv_rec.attribute12
1151                ,l_def_lrlv_rec.attribute13
1152                ,l_def_lrlv_rec.attribute14
1153                ,l_def_lrlv_rec.attribute15);
1154 
1155     --Set OUT Values
1156 
1157     x_lrlv_rec := l_def_lrlv_rec;
1158     x_return_status := l_return_status;
1159     okl_api.end_activity(x_msg_count, x_msg_data);
1160     EXCEPTION
1161       WHEN g_exception_halt_validation THEN
1162 
1163         -- No action necessary. Validation can continue to next attribute/column
1164 
1165         NULL;
1166       WHEN okl_api.g_exception_error THEN
1167         x_return_status := okl_api.handle_exceptions(l_api_name
1168                                                     ,g_pkg_name
1169                                                     ,'OKL_API.G_RET_STS_ERROR'
1170                                                     ,x_msg_count
1171                                                     ,x_msg_data
1172                                                     ,'_PVT');
1173       WHEN okl_api.g_exception_unexpected_error THEN
1174         x_return_status := okl_api.handle_exceptions(l_api_name
1175                                                     ,g_pkg_name
1176                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1177                                                     ,x_msg_count
1178                                                     ,x_msg_data
1179                                                     ,'_PVT');
1180       WHEN OTHERS THEN
1181         x_return_status := okl_api.handle_exceptions(l_api_name
1182                                                     ,g_pkg_name
1183                                                     ,'OTHERS'
1184                                                     ,x_msg_count
1185                                                     ,x_msg_data
1186                                                     ,'_PVT');
1187   END insert_row;
1188 
1189   --------------------------------------------------------------------------------
1190   -- Procedure insert_row_tbl
1191   --------------------------------------------------------------------------------
1192 
1193   PROCEDURE insert_row(p_api_version    IN             number
1194                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
1195                       ,x_return_status     OUT NOCOPY  varchar2
1196                       ,x_msg_count         OUT NOCOPY  number
1197                       ,x_msg_data          OUT NOCOPY  varchar2
1198                       ,p_lrlv_tbl       IN             okl_lrlv_tbl
1199                       ,x_lrlv_tbl          OUT NOCOPY  okl_lrlv_tbl) IS
1200     l_api_version    CONSTANT number := 1;
1201     l_api_name       CONSTANT varchar2(30) := 'tbl_insert_row';
1202     l_return_status           varchar2(1) := okl_api.g_ret_sts_success;
1203     i                         number := 0;
1204     l_overall_status          varchar2(1) := okl_api.g_ret_sts_success;
1205 
1206   BEGIN
1207     okl_api.init_msg_list(p_init_msg_list);
1208 
1209     -- Make sure PL/SQL table has records in it before passing
1210 
1211     IF (p_lrlv_tbl.COUNT > 0) THEN
1212       i := p_lrlv_tbl.FIRST;
1213 
1214       LOOP
1215         insert_row(p_api_version   =>  p_api_version
1216                   ,p_init_msg_list =>  okl_api.g_false
1217                   ,x_return_status =>  x_return_status
1218                   ,x_msg_count     =>  x_msg_count
1219                   ,x_msg_data      =>  x_msg_data
1220                   ,p_lrlv_rec      =>  p_lrlv_tbl(i)
1221                   ,x_lrlv_rec      =>  x_lrlv_tbl(i));
1222         IF x_return_status <> okl_api.g_ret_sts_success THEN
1223           IF l_overall_status <> okl_api.g_ret_sts_unexp_error THEN
1224             l_overall_status := x_return_status;
1225           END IF;
1226         END IF;
1227         EXIT WHEN(i = p_lrlv_tbl.LAST);
1228         i := p_lrlv_tbl.next(i);
1229       END LOOP;
1230       x_return_status := l_overall_status;
1231     END IF;
1232 
1233     EXCEPTION
1234       WHEN g_exception_halt_validation THEN
1235 
1236         -- No action necessary. Validation can continue to next attribute/column
1237 
1238         NULL;
1239       WHEN okl_api.g_exception_error THEN
1240         x_return_status := okl_api.handle_exceptions(l_api_name
1241                                                     ,g_pkg_name
1242                                                     ,'OKL_API.G_RET_STS_ERROR'
1243                                                     ,x_msg_count
1244                                                     ,x_msg_data
1245                                                     ,'_PVT');
1246       WHEN okl_api.g_exception_unexpected_error THEN
1247         x_return_status := okl_api.handle_exceptions(l_api_name
1248                                                     ,g_pkg_name
1249                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1250                                                     ,x_msg_count
1251                                                     ,x_msg_data
1252                                                     ,'_PVT');
1253       WHEN OTHERS THEN
1254         x_return_status := okl_api.handle_exceptions(l_api_name
1255                                                     ,g_pkg_name
1256                                                     ,'OTHERS'
1257                                                     ,x_msg_count
1258                                                     ,x_msg_data
1259                                                     ,'_PVT');
1260   END insert_row;
1261 
1262   --------------------------------------------------------------------------------
1263   -- Procedure update_row
1264   --------------------------------------------------------------------------------
1265 
1266   PROCEDURE update_row(p_api_version    IN             number
1267                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
1268                       ,x_return_status     OUT NOCOPY  varchar2
1269                       ,x_msg_count         OUT NOCOPY  number
1270                       ,x_msg_data          OUT NOCOPY  varchar2
1271                       ,p_lrlv_rec       IN             okl_lrlv_rec
1272                       ,x_lrlv_rec          OUT NOCOPY  okl_lrlv_rec) IS
1273     l_api_version   CONSTANT number := 1;
1274     l_api_name      CONSTANT varchar2(30) := 'update_row';
1275     l_return_status          varchar2(1) := okl_api.g_ret_sts_success;
1276     l_lrlv_rec               okl_lrlv_rec := p_lrlv_rec;
1277     l_def_lrlv_rec           okl_lrlv_rec;
1278     l_row_notfound           boolean := true;
1279 
1280     FUNCTION fill_who_columns(p_lrlv_rec  IN  okl_lrlv_rec) RETURN okl_lrlv_rec IS
1281       l_lrlv_rec okl_lrlv_rec := p_lrlv_rec;
1282 
1283     BEGIN
1284       l_lrlv_rec.last_update_date := sysdate;
1285       l_lrlv_rec.last_updated_by := fnd_global.user_id;
1286       l_lrlv_rec.last_update_login := fnd_global.login_id;
1287       RETURN(l_lrlv_rec);
1288     END fill_who_columns;
1289 
1290     FUNCTION populate_new_record(p_lrlv_rec  IN             okl_lrlv_rec
1291                                 ,x_lrlv_rec     OUT NOCOPY  okl_lrlv_rec) RETURN varchar2 IS
1292       l_lrlv_rec      okl_lrlv_rec;
1293       l_row_notfound  boolean := true;
1294       l_return_status varchar2(1) := okl_api.g_ret_sts_success;
1295 
1296     BEGIN
1297       x_lrlv_rec := p_lrlv_rec;
1298 
1299       --Get current database values
1300 
1301       l_lrlv_rec := get_rec(p_lrlv_rec, l_row_notfound);
1302 
1303       IF (l_row_notfound) THEN
1304         l_return_status := okl_api.g_ret_sts_unexp_error;
1305       END IF;
1306 
1307       IF (x_lrlv_rec.rate_set_level_id IS NULL) THEN
1308         x_lrlv_rec.rate_set_level_id := l_lrlv_rec.rate_set_level_id;
1309       END IF;
1310 
1311       IF (x_lrlv_rec.residual_percent IS NULL) THEN
1312         x_lrlv_rec.residual_percent := l_lrlv_rec.residual_percent;
1313       END IF;
1314 
1315       IF (x_lrlv_rec.rate_set_id IS NULL) THEN
1316         x_lrlv_rec.rate_set_id := l_lrlv_rec.rate_set_id;
1317       END IF;
1318 
1319       IF (x_lrlv_rec.rate_set_version_id IS NULL) THEN
1320         x_lrlv_rec.rate_set_version_id := l_lrlv_rec.rate_set_version_id;
1321       END IF;
1322 
1323       IF (x_lrlv_rec.rate_set_factor_id IS NULL) THEN
1324         x_lrlv_rec.rate_set_factor_id := l_lrlv_rec.rate_set_factor_id;
1325       END IF;
1326 
1327       IF (x_lrlv_rec.sequence_number IS NULL) THEN
1328         x_lrlv_rec.sequence_number := l_lrlv_rec.sequence_number;
1329       END IF;
1330 
1331       IF (x_lrlv_rec.periods IS NULL) THEN
1332         x_lrlv_rec.periods := l_lrlv_rec.periods;
1333       END IF;
1334 
1335       IF (x_lrlv_rec.lease_rate_factor IS NULL) THEN
1336         x_lrlv_rec.lease_rate_factor := l_lrlv_rec.lease_rate_factor;
1337       END IF;
1338 
1339       IF (x_lrlv_rec.created_by IS NULL) THEN
1340         x_lrlv_rec.created_by := l_lrlv_rec.created_by;
1341       END IF;
1342 
1343       IF (x_lrlv_rec.creation_date IS NULL) THEN
1344         x_lrlv_rec.creation_date := l_lrlv_rec.creation_date;
1345       END IF;
1346 
1347       IF (x_lrlv_rec.attribute_category IS NULL) THEN
1348         x_lrlv_rec.attribute_category := l_lrlv_rec.attribute_category;
1349       END IF;
1350 
1351       IF (x_lrlv_rec.attribute1 IS NULL) THEN
1352         x_lrlv_rec.attribute1 := l_lrlv_rec.attribute1;
1353       END IF;
1354 
1355       IF (x_lrlv_rec.attribute2 IS NULL) THEN
1356         x_lrlv_rec.attribute2 := l_lrlv_rec.attribute2;
1357       END IF;
1358 
1359       IF (x_lrlv_rec.attribute3 IS NULL) THEN
1360         x_lrlv_rec.attribute3 := l_lrlv_rec.attribute3;
1361       END IF;
1362 
1363       IF (x_lrlv_rec.attribute4 IS NULL) THEN
1364         x_lrlv_rec.attribute4 := l_lrlv_rec.attribute4;
1365       END IF;
1366 
1367       IF (x_lrlv_rec.attribute5 IS NULL) THEN
1368         x_lrlv_rec.attribute5 := l_lrlv_rec.attribute5;
1369       END IF;
1370 
1371       IF (x_lrlv_rec.attribute6 IS NULL) THEN
1372         x_lrlv_rec.attribute6 := l_lrlv_rec.attribute6;
1373       END IF;
1374 
1375       IF (x_lrlv_rec.attribute7 IS NULL) THEN
1376         x_lrlv_rec.attribute7 := l_lrlv_rec.attribute7;
1377       END IF;
1378 
1379       IF (x_lrlv_rec.attribute8 IS NULL) THEN
1380         x_lrlv_rec.attribute8 := l_lrlv_rec.attribute8;
1381       END IF;
1382 
1383       IF (x_lrlv_rec.attribute9 IS NULL) THEN
1384         x_lrlv_rec.attribute9 := l_lrlv_rec.attribute9;
1385       END IF;
1386 
1387       IF (x_lrlv_rec.attribute10 IS NULL) THEN
1388         x_lrlv_rec.attribute10 := l_lrlv_rec.attribute10;
1389       END IF;
1390 
1391       IF (x_lrlv_rec.attribute11 IS NULL) THEN
1392         x_lrlv_rec.attribute11 := l_lrlv_rec.attribute11;
1393       END IF;
1394 
1395       IF (x_lrlv_rec.attribute12 IS NULL) THEN
1396         x_lrlv_rec.attribute12 := l_lrlv_rec.attribute12;
1397       END IF;
1398 
1399       IF (x_lrlv_rec.attribute13 IS NULL) THEN
1400         x_lrlv_rec.attribute13 := l_lrlv_rec.attribute13;
1401       END IF;
1402 
1403       IF (x_lrlv_rec.attribute14 IS NULL) THEN
1404         x_lrlv_rec.attribute14 := l_lrlv_rec.attribute14;
1405       END IF;
1406 
1407       IF (x_lrlv_rec.attribute15 IS NULL) THEN
1408         x_lrlv_rec.attribute15 := l_lrlv_rec.attribute15;
1409       END IF;
1410       RETURN(l_return_status);
1411     END populate_new_record;
1412 
1413     FUNCTION set_attributes(p_lrlv_rec  IN             okl_lrlv_rec
1414                            ,x_lrlv_rec     OUT NOCOPY  okl_lrlv_rec) RETURN varchar2 IS
1415       l_return_status varchar2(1) := okl_api.g_ret_sts_success;
1416 
1417     BEGIN
1418       x_lrlv_rec := p_lrlv_rec;
1419       RETURN(l_return_status);
1420     END set_attributes;
1421 
1422   BEGIN
1423     l_return_status := okl_api.start_activity(l_api_name
1424                                              ,g_pkg_name
1425                                              ,p_init_msg_list
1426                                              ,l_api_version
1427                                              ,p_api_version
1428                                              ,'_PVT'
1429                                              ,x_return_status);
1430 
1431     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1432       RAISE okl_api.g_exception_unexpected_error;
1433     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1434       RAISE okl_api.g_exception_error;
1435     END IF;
1436 
1437     --Setting Item Attributes
1438 
1439     l_return_status := set_attributes(p_lrlv_rec, l_lrlv_rec);
1440 
1441     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1442       RAISE okl_api.g_exception_unexpected_error;
1443     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1444       RAISE okl_api.g_exception_error;
1445     END IF;
1446 
1447     --populate new record
1448 
1449     l_return_status := populate_new_record(l_lrlv_rec, l_def_lrlv_rec);
1450 
1451     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1452       RAISE okl_api.g_exception_unexpected_error;
1453     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1454       RAISE okl_api.g_exception_error;
1455     END IF;
1456 
1457     --null out g miss values
1458 
1459     l_def_lrlv_rec := null_out_defaults(l_def_lrlv_rec);
1460 
1461     --fill who columns
1462 
1463     l_def_lrlv_rec := fill_who_columns(l_def_lrlv_rec);
1464 
1465     --validate attributes
1466 
1467     l_return_status := validate_attributes(l_def_lrlv_rec);
1468 
1469     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1470       RAISE okl_api.g_exception_unexpected_error;
1471     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1472       RAISE okl_api.g_exception_error;
1473     END IF;
1474 
1475 
1476     --validate record
1477 
1478     l_return_status := validate_record(l_def_lrlv_rec);
1479 
1480     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1481       RAISE okl_api.g_exception_unexpected_error;
1482     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1483       RAISE okl_api.g_exception_error;
1484     END IF;
1485 
1486     --lock the row
1487 
1488     lock_row(p_init_msg_list =>  okl_api.g_false
1489             ,x_return_status =>  l_return_status
1490             ,x_msg_count     =>  x_msg_count
1491             ,x_msg_data      =>  x_msg_data
1492             ,p_lrlv_rec      =>  l_def_lrlv_rec);
1493 
1494     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1495       RAISE okl_api.g_exception_unexpected_error;
1496     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1497       RAISE okl_api.g_exception_error;
1498     END IF;
1499       --update the record
1500 
1501     UPDATE okl_fe_rate_set_levels
1502     SET    rate_set_level_id = l_def_lrlv_rec.rate_set_level_id
1503           ,object_version_number = l_def_lrlv_rec.object_version_number
1504           ,residual_percent = l_def_lrlv_rec.residual_percent
1505           ,rate_set_id = l_def_lrlv_rec.rate_set_id
1506           ,rate_set_version_id = l_def_lrlv_rec.rate_set_version_id
1507           ,rate_set_factor_id = l_def_lrlv_rec.rate_set_factor_id
1508           ,sequence_number = l_def_lrlv_rec.sequence_number
1509           ,periods = l_def_lrlv_rec.periods
1510           ,lease_rate_factor = l_def_lrlv_rec.lease_rate_factor
1511           ,created_by = l_def_lrlv_rec.created_by
1512           ,creation_date = l_def_lrlv_rec.creation_date
1513           ,last_updated_by = l_def_lrlv_rec.last_updated_by
1514           ,last_update_date = l_def_lrlv_rec.last_update_date
1515           ,last_update_login = l_def_lrlv_rec.last_update_login
1516           ,attribute_category = l_def_lrlv_rec.attribute_category
1517           ,attribute1 = l_def_lrlv_rec.attribute1
1518           ,attribute2 = l_def_lrlv_rec.attribute2
1519           ,attribute3 = l_def_lrlv_rec.attribute3
1520           ,attribute4 = l_def_lrlv_rec.attribute4
1521           ,attribute5 = l_def_lrlv_rec.attribute5
1522           ,attribute6 = l_def_lrlv_rec.attribute6
1523           ,attribute7 = l_def_lrlv_rec.attribute7
1524           ,attribute8 = l_def_lrlv_rec.attribute8
1525           ,attribute9 = l_def_lrlv_rec.attribute9
1526           ,attribute10 = l_def_lrlv_rec.attribute10
1527           ,attribute11 = l_def_lrlv_rec.attribute11
1528           ,attribute12 = l_def_lrlv_rec.attribute12
1529           ,attribute13 = l_def_lrlv_rec.attribute13
1530           ,attribute14 = l_def_lrlv_rec.attribute14
1531           ,attribute15 = l_def_lrlv_rec.attribute15
1532     WHERE  rate_set_level_id = l_def_lrlv_rec.rate_set_level_id;
1533 
1534     --Set OUT Values
1535 
1536     x_lrlv_rec := l_def_lrlv_rec;
1537     x_return_status := l_return_status;
1538     okl_api.end_activity(x_msg_count, x_msg_data);
1539     EXCEPTION
1540       WHEN g_exception_halt_validation THEN
1541 
1542         -- No action necessary. Validation can continue to next attribute/column
1543 
1544         NULL;
1545       WHEN okl_api.g_exception_error THEN
1546         x_return_status := okl_api.handle_exceptions(l_api_name
1547                                                     ,g_pkg_name
1548                                                     ,'OKL_API.G_RET_STS_ERROR'
1549                                                     ,x_msg_count
1550                                                     ,x_msg_data
1551                                                     ,'_PVT');
1552       WHEN okl_api.g_exception_unexpected_error THEN
1553         x_return_status := okl_api.handle_exceptions(l_api_name
1554                                                     ,g_pkg_name
1555                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1556                                                     ,x_msg_count
1557                                                     ,x_msg_data
1558                                                     ,'_PVT');
1559       WHEN OTHERS THEN
1560         x_return_status := okl_api.handle_exceptions(l_api_name
1561                                                     ,g_pkg_name
1562                                                     ,'OTHERS'
1563                                                     ,x_msg_count
1564                                                     ,x_msg_data
1565                                                     ,'_PVT');
1566   END update_row;
1567 
1568   --------------------------------------------------------------------------------
1569   -- Procedure insert_row_tbl
1570   --------------------------------------------------------------------------------
1571 
1572   PROCEDURE update_row(p_api_version    IN             number
1573                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
1574                       ,x_return_status     OUT NOCOPY  varchar2
1575                       ,x_msg_count         OUT NOCOPY  number
1576                       ,x_msg_data          OUT NOCOPY  varchar2
1577                       ,p_lrlv_tbl       IN             okl_lrlv_tbl
1578                       ,x_lrlv_tbl          OUT NOCOPY  okl_lrlv_tbl) IS
1579     l_api_version    CONSTANT number := 1;
1580     l_api_name       CONSTANT varchar2(30) := 'v_update_row';
1581     l_return_status           varchar2(1) := okl_api.g_ret_sts_success;
1582     i                         number := 0;
1583     l_overall_status          varchar2(1) := okl_api.g_ret_sts_success;
1584 
1585   BEGIN
1586     okl_api.init_msg_list(p_init_msg_list);
1587 
1588     -- Make sure PL/SQL table has records in it before passing
1589 
1590     IF (p_lrlv_tbl.COUNT > 0) THEN
1591       i := p_lrlv_tbl.FIRST;
1592 
1593       LOOP
1594         update_row(p_api_version   =>  p_api_version
1595                   ,p_init_msg_list =>  okl_api.g_false
1596                   ,x_return_status =>  x_return_status
1597                   ,x_msg_count     =>  x_msg_count
1598                   ,x_msg_data      =>  x_msg_data
1599                   ,p_lrlv_rec      =>  p_lrlv_tbl(i)
1600                   ,x_lrlv_rec      =>  x_lrlv_tbl(i));
1601         IF x_return_status <> okl_api.g_ret_sts_success THEN
1602           IF l_overall_status <> okl_api.g_ret_sts_unexp_error THEN
1603             l_overall_status := x_return_status;
1604           END IF;
1605         END IF;
1606         EXIT WHEN(i = p_lrlv_tbl.LAST);
1607         i := p_lrlv_tbl.next(i);
1608       END LOOP;
1609       x_return_status := l_overall_status;
1610     END IF;
1611 
1612     EXCEPTION
1613       WHEN g_exception_halt_validation THEN
1614 
1615         -- No action necessary. Validation can continue to next attribute/column
1616 
1617         NULL;
1618       WHEN okl_api.g_exception_error THEN
1619         x_return_status := okl_api.handle_exceptions(l_api_name
1620                                                     ,g_pkg_name
1621                                                     ,'OKL_API.G_RET_STS_ERROR'
1622                                                     ,x_msg_count
1623                                                     ,x_msg_data
1624                                                     ,'_PVT');
1625       WHEN okl_api.g_exception_unexpected_error THEN
1626         x_return_status := okl_api.handle_exceptions(l_api_name
1627                                                     ,g_pkg_name
1628                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1629                                                     ,x_msg_count
1630                                                     ,x_msg_data
1631                                                     ,'_PVT');
1632       WHEN OTHERS THEN
1633         x_return_status := okl_api.handle_exceptions(l_api_name
1634                                                     ,g_pkg_name
1635                                                     ,'OTHERS'
1636                                                     ,x_msg_count
1637                                                     ,x_msg_data
1638                                                     ,'_PVT');
1639   END update_row;
1640 
1641   --------------------------------------------------------------------------------
1642   -- Procedure delete_row
1643   --------------------------------------------------------------------------------
1644 
1645   PROCEDURE delete_row(p_api_version    IN             number
1646                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
1647                       ,x_return_status     OUT NOCOPY  varchar2
1648                       ,x_msg_count         OUT NOCOPY  number
1649                       ,x_msg_data          OUT NOCOPY  varchar2
1650                       ,p_lrlv_rec       IN             okl_lrlv_rec) IS
1651     l_api_version   CONSTANT number := 1;
1652     l_api_name      CONSTANT varchar2(30) := 'rec_delete_row';
1653     l_return_status          varchar2(1) := okl_api.g_ret_sts_success;
1654     l_lrlv_rec               okl_lrlv_rec := p_lrlv_rec;
1655     l_row_notfound           boolean := true;
1656 
1657   BEGIN
1658     l_return_status := okl_api.start_activity(l_api_name
1659                                              ,g_pkg_name
1660                                              ,p_init_msg_list
1661                                              ,l_api_version
1662                                              ,p_api_version
1663                                              ,'_PVT'
1664                                              ,x_return_status);
1665 
1666     IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
1667       RAISE okl_api.g_exception_unexpected_error;
1668     ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
1669       RAISE okl_api.g_exception_error;
1670     END IF;
1671 
1672     DELETE FROM okl_fe_rate_set_levels
1673     WHERE       rate_set_level_id = l_lrlv_rec.rate_set_level_id;
1674     x_return_status := l_return_status;
1675     okl_api.end_activity(x_msg_count, x_msg_data);
1676     EXCEPTION
1677       WHEN g_exception_halt_validation THEN
1678 
1679         -- No action necessary. Validation can continue to next attribute/column
1680 
1681         NULL;
1682       WHEN okl_api.g_exception_error THEN
1683         x_return_status := okl_api.handle_exceptions(l_api_name
1684                                                     ,g_pkg_name
1685                                                     ,'OKL_API.G_RET_STS_ERROR'
1686                                                     ,x_msg_count
1687                                                     ,x_msg_data
1688                                                     ,'_PVT');
1689       WHEN okl_api.g_exception_unexpected_error THEN
1690         x_return_status := okl_api.handle_exceptions(l_api_name
1691                                                     ,g_pkg_name
1692                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1693                                                     ,x_msg_count
1694                                                     ,x_msg_data
1695                                                     ,'_PVT');
1696       WHEN OTHERS THEN
1697         x_return_status := okl_api.handle_exceptions(l_api_name
1698                                                     ,g_pkg_name
1699                                                     ,'OTHERS'
1700                                                     ,x_msg_count
1701                                                     ,x_msg_data
1702                                                     ,'_PVT');
1703   END delete_row;
1704 
1705   --------------------------------------------------------------------------------
1706   -- Procedure delete_row_tbl
1707   --------------------------------------------------------------------------------
1708 
1709   PROCEDURE delete_row(p_api_version    IN             number
1710                       ,p_init_msg_list  IN             varchar2     DEFAULT okl_api.g_false
1711                       ,x_return_status     OUT NOCOPY  varchar2
1712                       ,x_msg_count         OUT NOCOPY  number
1713                       ,x_msg_data          OUT NOCOPY  varchar2
1714                       ,p_lrlv_tbl       IN             okl_lrlv_tbl) IS
1715     l_api_version    CONSTANT number := 1;
1716     l_api_name       CONSTANT varchar2(30) := 'tbl_delete_row';
1717     l_return_status           varchar2(1) := okl_api.g_ret_sts_success;
1718     i                         number := 0;
1719     l_overall_status          varchar2(1) := okl_api.g_ret_sts_success;
1720 
1721   BEGIN
1722     okl_api.init_msg_list(p_init_msg_list);
1723 
1724     -- Make sure PL/SQL table has records in it before passing
1725 
1726     IF (p_lrlv_tbl.COUNT > 0) THEN
1727       i := p_lrlv_tbl.FIRST;
1728 
1729       LOOP
1730         delete_row(p_api_version   =>  p_api_version
1731                   ,p_init_msg_list =>  okl_api.g_false
1732                   ,x_return_status =>  x_return_status
1733                   ,x_msg_count     =>  x_msg_count
1734                   ,x_msg_data      =>  x_msg_data
1735                   ,p_lrlv_rec      =>  p_lrlv_tbl(i));
1736         IF x_return_status <> okl_api.g_ret_sts_success THEN
1737           IF l_overall_status <> okl_api.g_ret_sts_unexp_error THEN
1738             l_overall_status := x_return_status;
1739           END IF;
1740         END IF;
1741         EXIT WHEN(i = p_lrlv_tbl.LAST);
1742         i := p_lrlv_tbl.next(i);
1743       END LOOP;
1744       x_return_status := l_overall_status;
1745     END IF;
1746 
1747     EXCEPTION
1748       WHEN g_exception_halt_validation THEN
1749 
1750         -- No action necessary. Validation can continue to next attribute/column
1751 
1752         NULL;
1753       WHEN okl_api.g_exception_error THEN
1754         x_return_status := okl_api.handle_exceptions(l_api_name
1755                                                     ,g_pkg_name
1756                                                     ,'OKL_API.G_RET_STS_ERROR'
1757                                                     ,x_msg_count
1758                                                     ,x_msg_data
1759                                                     ,'_PVT');
1760       WHEN okl_api.g_exception_unexpected_error THEN
1761         x_return_status := okl_api.handle_exceptions(l_api_name
1762                                                     ,g_pkg_name
1763                                                     ,'OKL_API.G_RET_STS_UNEXP_ERROR'
1764                                                     ,x_msg_count
1765                                                     ,x_msg_data
1766                                                     ,'_PVT');
1767       WHEN OTHERS THEN
1768         x_return_status := okl_api.handle_exceptions(l_api_name
1769                                                     ,g_pkg_name
1770                                                     ,'OTHERS'
1771                                                     ,x_msg_count
1772                                                     ,x_msg_data
1773                                                     ,'_PVT');
1774   END delete_row;
1775 
1776 END okl_lrl_pvt;