DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CAM_PVT

Source


1 PACKAGE BODY OKL_CAM_PVT AS
2 /* $Header: OKLSCAMB.pls 120.2 2006/07/11 10:11:53 dkagrawa noship $ */
3   ---------------------------------------------------------------------------
4   -- PROCEDURE load_error_tbl
5   ---------------------------------------------------------------------------
6   PROCEDURE load_error_tbl (
7     px_error_rec                   IN OUT NOCOPY OKL_API.ERROR_REC_TYPE,
8     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
9 
10     j                              INTEGER := NVL(px_error_tbl.LAST, 0) + 1;
11     last_msg_idx                   INTEGER := FND_MSG_PUB.COUNT_MSG;
12     l_msg_idx                      INTEGER := FND_MSG_PUB.G_NEXT;
13   BEGIN
14     -- FND_MSG_PUB has a small error in it.  If we call FND_MSG_PUB.COUNT_AND_GET before
15     -- we call FND_MSG_PUB.GET, the variable FND_MSG_PUB uses to control the index of the
16     -- message stack gets set to 1.  This makes sense until we call FND_MSG_PUB.GET which
17     -- automatically increments the index by 1, (making it 2), however, when the GET function
18     -- attempts to pull message 2, we get a NO_DATA_FOUND exception because there isn't any
19     -- message 2.  To circumvent this problem, check the amount of messages and compensate.
20     -- Again, this error only occurs when 1 message is on the stack because COUNT_AND_GET
21     -- will only update the index variable when 1 and only 1 message is on the stack.
22     IF (last_msg_idx = 1) THEN
23       l_msg_idx := FND_MSG_PUB.G_FIRST;
24     END IF;
25     LOOP
26       fnd_msg_pub.get(
27             p_msg_index     => l_msg_idx,
28             p_encoded       => fnd_api.g_false,
29             p_data          => px_error_rec.msg_data,
30             p_msg_index_out => px_error_rec.msg_count);
31       px_error_tbl(j) := px_error_rec;
32       j := j + 1;
33     EXIT WHEN (px_error_rec.msg_count = last_msg_idx);
34     END LOOP;
35   END load_error_tbl;
36   ---------------------------------------------------------------------------
37   -- FUNCTION find_highest_exception
38   ---------------------------------------------------------------------------
39   -- Finds the highest exception (G_RET_STS_UNEXP_ERROR)
40   -- in a OKL_API.ERROR_TBL_TYPE, and returns it.
41   FUNCTION find_highest_exception(
42     p_error_tbl                    IN OKL_API.ERROR_TBL_TYPE
43   ) RETURN VARCHAR2 IS
44     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
45     i                              INTEGER := 1;
46   BEGIN
47     IF (p_error_tbl.COUNT > 0) THEN
48       i := p_error_tbl.FIRST;
49       LOOP
50         IF (p_error_tbl(i).error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
51           IF (l_return_status <> OKL_API.G_RET_STS_UNEXP_ERROR) THEN
52             l_return_status := p_error_tbl(i).error_type;
53           END IF;
54         END IF;
55         EXIT WHEN (i = p_error_tbl.LAST);
56         i := p_error_tbl.NEXT(i);
57       END LOOP;
58     END IF;
59     RETURN(l_return_status);
60   END find_highest_exception;
61   ---------------------------------------------------------------------------
62   -- FUNCTION get_seq_id
63   ---------------------------------------------------------------------------
64   FUNCTION get_seq_id RETURN NUMBER IS
65   BEGIN
66     RETURN(okc_p_util.raw_to_number(sys_guid()));
67   END get_seq_id;
68 
69   ---------------------------------------------------------------------------
70   -- PROCEDURE qc
71   ---------------------------------------------------------------------------
72   PROCEDURE qc IS
73   BEGIN
74     null;
75   END qc;
76 
77   ---------------------------------------------------------------------------
78   -- PROCEDURE change_version
79   ---------------------------------------------------------------------------
80   PROCEDURE change_version IS
81   BEGIN
82     null;
83   END change_version;
84 
85   ---------------------------------------------------------------------------
86   -- PROCEDURE api_copy
87   ---------------------------------------------------------------------------
88   PROCEDURE api_copy IS
89   BEGIN
90     null;
91   END api_copy;
92 
93   ---------------------------------------------------------------------------
94   -- FUNCTION get_rec for: OKL_CURE_AMOUNTS_V
95   ---------------------------------------------------------------------------
96   FUNCTION get_rec (
97     p_camv_rec                     IN camv_rec_type,
98     x_no_data_found                OUT NOCOPY BOOLEAN
99   ) RETURN camv_rec_type IS
100     CURSOR OKL_cure_amounts_pk_csr (p_cure_amount_id IN NUMBER) IS
101     SELECT
102             CURE_AMOUNT_ID,
103             CHR_ID,
104             CURE_TYPE,
105             CURE_AMOUNT,
106             REPURCHASE_AMOUNT,
107             EFFECTIVE_DATE,
108             TIMES_CURED,
109             PAYMENTS_REMAINING,
110             ELIGIBLE_CURE_AMOUNT,
111             OUTSTANDING_AMOUNT,
112             PAST_DUE_AMOUNT,
113             CURES_IN_POSSESSION,
114             STATUS,
115             OBJECT_VERSION_NUMBER,
116             ORG_ID,
117             REQUEST_ID,
118             PROGRAM_APPLICATION_ID,
119             PROGRAM_ID,
120             PROGRAM_UPDATE_DATE,
121             ATTRIBUTE_CATEGORY,
122             ATTRIBUTE1,
123             ATTRIBUTE2,
124             ATTRIBUTE3,
125             ATTRIBUTE4,
126             ATTRIBUTE5,
127             ATTRIBUTE6,
128             ATTRIBUTE7,
129             ATTRIBUTE8,
130             ATTRIBUTE9,
131             ATTRIBUTE10,
132             ATTRIBUTE11,
133             ATTRIBUTE12,
134             ATTRIBUTE13,
135             ATTRIBUTE14,
136             ATTRIBUTE15,
137             CREATED_BY,
138             CREATION_DATE,
139             LAST_UPDATED_BY,
140             LAST_UPDATE_DATE,
141             LAST_UPDATE_LOGIN,
142             NEGOTIATED_AMOUNT,
143             RECEIVED_AMOUNT,
144             DELINQUENT_AMOUNT,
145             SHORT_FUND_AMOUNT,
146             CRT_ID,
147             SHOW_ON_REQUEST,
148             SELECTED_ON_REQUEST,
149             QTE_ID,
150             PROCESS
151       FROM OKL_CURE_AMOUNTS
152      WHERE OKL_CURE_AMOUNTS.cure_amount_id = p_cure_amount_id;
153     l_OKL_cure_amounts_pk          OKL_cure_amounts_pk_csr%ROWTYPE;
154     l_camv_rec                     camv_rec_type;
155   BEGIN
156     x_no_data_found := TRUE;
157     -- Get current database values
158     OPEN OKL_cure_amounts_pk_csr (p_camv_rec.cure_amount_id);
159     FETCH OKL_cure_amounts_pk_csr INTO
160               l_camv_rec.cure_amount_id,
161               l_camv_rec.chr_id,
162               l_camv_rec.cure_type,
163               l_camv_rec.cure_amount,
164               l_camv_rec.repurchase_amount,
165               l_camv_rec.effective_date,
166               l_camv_rec.times_cured,
167               l_camv_rec.payments_remaining,
168               l_camv_rec.eligible_cure_amount,
169               l_camv_rec.outstanding_amount,
170               l_camv_rec.past_due_amount,
171               l_camv_rec.cures_in_possession,
172               l_camv_rec.status,
173               l_camv_rec.object_version_number,
174               l_camv_rec.org_id,
175               l_camv_rec.request_id,
176               l_camv_rec.program_application_id,
177               l_camv_rec.program_id,
178               l_camv_rec.program_update_date,
179               l_camv_rec.attribute_category,
180               l_camv_rec.attribute1,
181               l_camv_rec.attribute2,
182               l_camv_rec.attribute3,
183               l_camv_rec.attribute4,
184               l_camv_rec.attribute5,
185               l_camv_rec.attribute6,
186               l_camv_rec.attribute7,
187               l_camv_rec.attribute8,
188               l_camv_rec.attribute9,
189               l_camv_rec.attribute10,
190               l_camv_rec.attribute11,
191               l_camv_rec.attribute12,
192               l_camv_rec.attribute13,
193               l_camv_rec.attribute14,
194               l_camv_rec.attribute15,
195               l_camv_rec.created_by,
196               l_camv_rec.creation_date,
197               l_camv_rec.last_updated_by,
198               l_camv_rec.last_update_date,
199               l_camv_rec.last_update_login,
200               l_camv_rec.NEGOTIATED_AMOUNT,
201               l_camv_rec.RECEIVED_AMOUNT,
202               l_camv_rec.DELINQUENT_AMOUNT,
203               l_camv_rec.SHORT_FUND_AMOUNT,
204               l_camv_rec.CRT_ID,
205               l_camv_rec.SHOW_ON_REQUEST,
206               l_camv_rec.SELECTED_ON_REQUEST,
207               l_camv_rec.QTE_ID,
208               l_camv_rec.PROCESS;
209 
210     x_no_data_found := OKL_cure_amounts_pk_csr%NOTFOUND;
211     CLOSE OKL_cure_amounts_pk_csr;
212     RETURN(l_camv_rec);
213   END get_rec;
214 
215   ------------------------------------------------------------------
216   -- This version of get_rec sets error messages if no data found --
217   ------------------------------------------------------------------
218   FUNCTION get_rec (
219     p_camv_rec                     IN camv_rec_type,
220     x_return_status                OUT NOCOPY VARCHAR2
221   ) RETURN camv_rec_type IS
222     l_camv_rec                     camv_rec_type;
223     l_row_notfound                 BOOLEAN := TRUE;
224   BEGIN
225     x_return_status := OKL_API.G_RET_STS_SUCCESS;
226     l_camv_rec := get_rec(p_camv_rec, l_row_notfound);
227     IF (l_row_notfound) THEN
228       OKL_API.set_message(G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'CURE_AMOUNT_ID');
229       x_return_status := OKL_API.G_RET_STS_ERROR;
230     END IF;
231     RETURN(l_camv_rec);
232   END get_rec;
233   -----------------------------------------------------------
234   -- So we don't have to pass an "l_row_notfound" variable --
235   -----------------------------------------------------------
236   FUNCTION get_rec (
237     p_camv_rec                     IN camv_rec_type
238   ) RETURN camv_rec_type IS
239     l_row_not_found                BOOLEAN := TRUE;
240   BEGIN
241     RETURN(get_rec(p_camv_rec, l_row_not_found));
242   END get_rec;
243   ---------------------------------------------------------------------------
244   -- FUNCTION get_rec for: OKL_CURE_AMOUNTS
245   ---------------------------------------------------------------------------
246   FUNCTION get_rec (
247     p_cam_rec                      IN cam_rec_type,
248     x_no_data_found                OUT NOCOPY BOOLEAN
249   ) RETURN cam_rec_type IS
250     CURSOR OKL_cure_amount_pk_csr (p_cure_amount_id IN NUMBER) IS
251     SELECT
252             CURE_AMOUNT_ID,
253             CHR_ID,
254             CURE_TYPE,
255             CURE_AMOUNT,
256             REPURCHASE_AMOUNT,
257             EFFECTIVE_DATE,
258             TIMES_CURED,
259             PAYMENTS_REMAINING,
260             ELIGIBLE_CURE_AMOUNT,
261             OUTSTANDING_AMOUNT,
262             PAST_DUE_AMOUNT,
263             CURES_IN_POSSESSION,
264             STATUS,
265             OBJECT_VERSION_NUMBER,
266             ORG_ID,
267             REQUEST_ID,
268             PROGRAM_APPLICATION_ID,
269             PROGRAM_ID,
270             PROGRAM_UPDATE_DATE,
271             ATTRIBUTE_CATEGORY,
272             ATTRIBUTE1,
273             ATTRIBUTE2,
274             ATTRIBUTE3,
275             ATTRIBUTE4,
276             ATTRIBUTE5,
277             ATTRIBUTE6,
278             ATTRIBUTE7,
279             ATTRIBUTE8,
280             ATTRIBUTE9,
281             ATTRIBUTE10,
282             ATTRIBUTE11,
283             ATTRIBUTE12,
284             ATTRIBUTE13,
285             ATTRIBUTE14,
286             ATTRIBUTE15,
287             CREATED_BY,
288             CREATION_DATE,
289             LAST_UPDATED_BY,
290             LAST_UPDATE_DATE,
291             LAST_UPDATE_LOGIN,
292             NEGOTIATED_AMOUNT,
293             RECEIVED_AMOUNT,
294             DELINQUENT_AMOUNT,
295             SHORT_FUND_AMOUNT,
296             CRT_ID,
297             SHOW_ON_REQUEST,
298             SELECTED_ON_REQUEST,
299             QTE_ID,
300             PROCESS
301       FROM OKL_Cure_Amounts
302      WHERE OKL_cure_amounts.cure_amount_id = p_cure_amount_id;
303     l_OKL_cure_amount_pk           OKL_cure_amount_pk_csr%ROWTYPE;
304     l_cam_rec                      cam_rec_type;
305   BEGIN
306     x_no_data_found := TRUE;
307     -- Get current database values
308     OPEN OKL_cure_amount_pk_csr (p_cam_rec.cure_amount_id);
309     FETCH OKL_cure_amount_pk_csr INTO
310               l_cam_rec.cure_amount_id,
311               l_cam_rec.chr_id,
312               l_cam_rec.cure_type,
313               l_cam_rec.cure_amount,
314               l_cam_rec.repurchase_amount,
315               l_cam_rec.effective_date,
316               l_cam_rec.times_cured,
317               l_cam_rec.payments_remaining,
318               l_cam_rec.eligible_cure_amount,
319               l_cam_rec.outstanding_amount,
320               l_cam_rec.past_due_amount,
321               l_cam_rec.cures_in_possession,
322               l_cam_rec.status,
323               l_cam_rec.object_version_number,
324               l_cam_rec.org_id,
325               l_cam_rec.request_id,
326               l_cam_rec.program_application_id,
327               l_cam_rec.program_id,
328               l_cam_rec.program_update_date,
329               l_cam_rec.attribute_category,
330               l_cam_rec.attribute1,
331               l_cam_rec.attribute2,
332               l_cam_rec.attribute3,
333               l_cam_rec.attribute4,
334               l_cam_rec.attribute5,
335               l_cam_rec.attribute6,
336               l_cam_rec.attribute7,
337               l_cam_rec.attribute8,
338               l_cam_rec.attribute9,
339               l_cam_rec.attribute10,
340               l_cam_rec.attribute11,
341               l_cam_rec.attribute12,
342               l_cam_rec.attribute13,
343               l_cam_rec.attribute14,
344               l_cam_rec.attribute15,
345               l_cam_rec.created_by,
346               l_cam_rec.creation_date,
347               l_cam_rec.last_updated_by,
348               l_cam_rec.last_update_date,
349               l_cam_rec.last_update_login,
350               l_cam_rec.NEGOTIATED_AMOUNT,
351               l_cam_rec.RECEIVED_AMOUNT,
352               l_cam_rec.DELINQUENT_AMOUNT,
353               l_cam_rec.SHORT_FUND_AMOUNT,
354               l_cam_rec.CRT_ID,
355               l_cam_rec.SHOW_ON_REQUEST,
356               l_cam_rec.SELECTED_ON_REQUEST,
357               l_cam_rec.QTE_ID,
358               l_cam_rec.PROCESS;
359     x_no_data_found := OKL_cure_amount_pk_csr%NOTFOUND;
360     CLOSE OKL_cure_amount_pk_csr;
361     RETURN(l_cam_rec);
362   END get_rec;
363 
364   ------------------------------------------------------------------
365   -- This version of get_rec sets error messages if no data found --
366   ------------------------------------------------------------------
367   FUNCTION get_rec (
368     p_cam_rec                      IN cam_rec_type,
369     x_return_status                OUT NOCOPY VARCHAR2
370   ) RETURN cam_rec_type IS
371     l_cam_rec                      cam_rec_type;
372     l_row_notfound                 BOOLEAN := TRUE;
373   BEGIN
374     x_return_status := OKL_API.G_RET_STS_SUCCESS;
375     l_cam_rec := get_rec(p_cam_rec, l_row_notfound);
376     IF (l_row_notfound) THEN
377       OKL_API.set_message(G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'CURE_AMOUNT_ID');
378       x_return_status := OKL_API.G_RET_STS_ERROR;
379     END IF;
380     RETURN(l_cam_rec);
381   END get_rec;
382   -----------------------------------------------------------
383   -- So we don't have to pass an "l_row_notfound" variable --
384   -----------------------------------------------------------
385   FUNCTION get_rec (
386     p_cam_rec                      IN cam_rec_type
387   ) RETURN cam_rec_type IS
388     l_row_not_found                BOOLEAN := TRUE;
389   BEGIN
390     RETURN(get_rec(p_cam_rec, l_row_not_found));
391   END get_rec;
392   ---------------------------------------------------------------------------
393   -- FUNCTION null_out_defaults for: OKL_CURE_AMOUNTS_V
394   ---------------------------------------------------------------------------
395   FUNCTION null_out_defaults (
396     p_camv_rec   IN camv_rec_type
397   ) RETURN camv_rec_type IS
398     l_camv_rec                     camv_rec_type := p_camv_rec;
399   BEGIN
400     IF (l_camv_rec.cure_amount_id = OKL_API.G_MISS_NUM ) THEN
401       l_camv_rec.cure_amount_id := NULL;
402     END IF;
403     IF (l_camv_rec.chr_id = OKL_API.G_MISS_NUM ) THEN
404       l_camv_rec.chr_id := NULL;
405     END IF;
406     IF (l_camv_rec.cure_type = OKL_API.G_MISS_CHAR ) THEN
407       l_camv_rec.cure_type := NULL;
408     END IF;
409     IF (l_camv_rec.cure_amount = OKL_API.G_MISS_NUM ) THEN
410       l_camv_rec.cure_amount := NULL;
411     END IF;
412     IF (l_camv_rec.repurchase_amount = OKL_API.G_MISS_NUM ) THEN
413       l_camv_rec.repurchase_amount := NULL;
414     END IF;
415     IF (l_camv_rec.effective_date = OKL_API.G_MISS_DATE ) THEN
416       l_camv_rec.effective_date := NULL;
417     END IF;
418     IF (l_camv_rec.times_cured = OKL_API.G_MISS_NUM ) THEN
419       l_camv_rec.times_cured := NULL;
420     END IF;
421     IF (l_camv_rec.payments_remaining = OKL_API.G_MISS_NUM ) THEN
422       l_camv_rec.payments_remaining := NULL;
423     END IF;
424     IF (l_camv_rec.eligible_cure_amount = OKL_API.G_MISS_NUM ) THEN
425       l_camv_rec.eligible_cure_amount := NULL;
426     END IF;
427     IF (l_camv_rec.outstanding_amount = OKL_API.G_MISS_NUM ) THEN
428       l_camv_rec.outstanding_amount := NULL;
429     END IF;
430     IF (l_camv_rec.past_due_amount = OKL_API.G_MISS_NUM ) THEN
431       l_camv_rec.past_due_amount := NULL;
432     END IF;
433     IF (l_camv_rec.cures_in_possession = OKL_API.G_MISS_NUM ) THEN
434       l_camv_rec.cures_in_possession := NULL;
435     END IF;
436     IF (l_camv_rec.status = OKL_API.G_MISS_CHAR ) THEN
437       l_camv_rec.status := NULL;
438     END IF;
439     IF (l_camv_rec.object_version_number = OKL_API.G_MISS_NUM ) THEN
440       l_camv_rec.object_version_number := NULL;
441     END IF;
442     IF (l_camv_rec.org_id = OKL_API.G_MISS_NUM ) THEN
443       l_camv_rec.org_id := NULL;
444     END IF;
445     IF (l_camv_rec.request_id = OKL_API.G_MISS_NUM ) THEN
446       l_camv_rec.request_id := NULL;
447     END IF;
448     IF (l_camv_rec.program_application_id = OKL_API.G_MISS_NUM ) THEN
449       l_camv_rec.program_application_id := NULL;
450     END IF;
451     IF (l_camv_rec.program_id = OKL_API.G_MISS_NUM ) THEN
452       l_camv_rec.program_id := NULL;
453     END IF;
454     IF (l_camv_rec.program_update_date = OKL_API.G_MISS_DATE ) THEN
455       l_camv_rec.program_update_date := NULL;
456     END IF;
457     IF (l_camv_rec.attribute_category = OKL_API.G_MISS_CHAR ) THEN
458       l_camv_rec.attribute_category := NULL;
459     END IF;
460     IF (l_camv_rec.attribute1 = OKL_API.G_MISS_CHAR ) THEN
461       l_camv_rec.attribute1 := NULL;
462     END IF;
463     IF (l_camv_rec.attribute2 = OKL_API.G_MISS_CHAR ) THEN
464       l_camv_rec.attribute2 := NULL;
465     END IF;
466     IF (l_camv_rec.attribute3 = OKL_API.G_MISS_CHAR ) THEN
467       l_camv_rec.attribute3 := NULL;
468     END IF;
469     IF (l_camv_rec.attribute4 = OKL_API.G_MISS_CHAR ) THEN
470       l_camv_rec.attribute4 := NULL;
471     END IF;
472     IF (l_camv_rec.attribute5 = OKL_API.G_MISS_CHAR ) THEN
473       l_camv_rec.attribute5 := NULL;
474     END IF;
475     IF (l_camv_rec.attribute6 = OKL_API.G_MISS_CHAR ) THEN
476       l_camv_rec.attribute6 := NULL;
477     END IF;
478     IF (l_camv_rec.attribute7 = OKL_API.G_MISS_CHAR ) THEN
479       l_camv_rec.attribute7 := NULL;
480     END IF;
481     IF (l_camv_rec.attribute8 = OKL_API.G_MISS_CHAR ) THEN
482       l_camv_rec.attribute8 := NULL;
483     END IF;
484     IF (l_camv_rec.attribute9 = OKL_API.G_MISS_CHAR ) THEN
485       l_camv_rec.attribute9 := NULL;
486     END IF;
487     IF (l_camv_rec.attribute10 = OKL_API.G_MISS_CHAR ) THEN
488       l_camv_rec.attribute10 := NULL;
489     END IF;
490     IF (l_camv_rec.attribute11 = OKL_API.G_MISS_CHAR ) THEN
491       l_camv_rec.attribute11 := NULL;
492     END IF;
493     IF (l_camv_rec.attribute12 = OKL_API.G_MISS_CHAR ) THEN
494       l_camv_rec.attribute12 := NULL;
495     END IF;
496     IF (l_camv_rec.attribute13 = OKL_API.G_MISS_CHAR ) THEN
497       l_camv_rec.attribute13 := NULL;
498     END IF;
499     IF (l_camv_rec.attribute14 = OKL_API.G_MISS_CHAR ) THEN
500       l_camv_rec.attribute14 := NULL;
501     END IF;
502     IF (l_camv_rec.attribute15 = OKL_API.G_MISS_CHAR ) THEN
503       l_camv_rec.attribute15 := NULL;
504     END IF;
505     IF (l_camv_rec.created_by = OKL_API.G_MISS_NUM ) THEN
506       l_camv_rec.created_by := NULL;
507     END IF;
508     IF (l_camv_rec.creation_date = OKL_API.G_MISS_DATE ) THEN
509       l_camv_rec.creation_date := NULL;
510     END IF;
511     IF (l_camv_rec.last_updated_by = OKL_API.G_MISS_NUM ) THEN
512       l_camv_rec.last_updated_by := NULL;
513     END IF;
514     IF (l_camv_rec.last_update_date = OKL_API.G_MISS_DATE ) THEN
515       l_camv_rec.last_update_date := NULL;
516     END IF;
517     IF (l_camv_rec.last_update_login = OKL_API.G_MISS_NUM ) THEN
518       l_camv_rec.last_update_login := NULL;
519     END IF;
520     IF (l_camv_rec.NEGOTIATED_AMOUNT = OKL_API.G_MISS_NUM ) THEN
521       l_camv_rec.NEGOTIATED_AMOUNT := NULL;
522     END IF;
523     IF (l_camv_rec.RECEIVED_AMOUNT = OKL_API.G_MISS_NUM ) THEN
524       l_camv_rec.RECEIVED_AMOUNT := NULL;
525     END IF;
526     IF (l_camv_rec.DELINQUENT_AMOUNT = OKL_API.G_MISS_NUM ) THEN
527        l_camv_rec.DELINQUENT_AMOUNT := NULL;
528     END IF;
529     IF (l_camv_rec.SHORT_FUND_AMOUNT = OKL_API.G_MISS_NUM ) THEN
530       l_camv_rec.SHORT_FUND_AMOUNT := NULL;
531     END IF;
532     IF (l_camv_rec.CRT_ID = OKL_API.G_MISS_NUM ) THEN
533       l_camv_rec.CRT_ID := NULL;
534     END IF;
535     IF (l_camv_rec.SHOW_ON_REQUEST = OKL_API.G_MISS_CHAR ) THEN
536       l_camv_rec.SHOW_ON_REQUEST := NULL;
537     END IF;
538     IF (l_camv_rec.SELECTED_ON_REQUEST = OKL_API.G_MISS_CHAR ) THEN
539       l_camv_rec.SELECTED_ON_REQUEST := NULL;
540     END IF;
541 
542     IF (l_camv_rec.QTE_ID = OKL_API.G_MISS_NUM ) THEN
543        l_camv_rec.QTE_ID := NULL;
544     END IF;
545 
546     IF (l_camv_rec.PROCESS = OKL_API.G_MISS_CHAR ) THEN
547       l_camv_rec.PROCESS := NULL;
548     END IF;
549 
550     RETURN(l_camv_rec);
551   END null_out_defaults;
552   ---------------------------------------------
553   -- Validate_Attributes for: CURE_AMOUNT_ID --
554   ---------------------------------------------
555   PROCEDURE validate_cure_amount_id(
556     x_return_status                OUT NOCOPY VARCHAR2,
557     p_camv_rec               IN camv_rec_type) IS
558     l_return_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
559   BEGIN
560     IF (p_camv_rec.cure_amount_id = OKL_API.G_MISS_NUM OR
561         p_camv_rec.cure_amount_id IS NULL)
562     THEN
563       OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'cure_amount_id');
564       l_return_status := OKL_API.G_RET_STS_ERROR;
565     END IF;
566     x_return_status := l_return_status;
567   EXCEPTION
568     WHEN OTHERS THEN
569       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
570                           ,p_msg_name     => G_UNEXPECTED_ERROR
571                           ,p_token1       => G_SQLCODE_TOKEN
572                           ,p_token1_value => SQLCODE
573                           ,p_token2       => G_SQLERRM_TOKEN
574                           ,p_token2_value => SQLERRM);
575       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
576   END validate_cure_amount_id;
577   ---------------------------------------------
578   -- Validate_Attributes for: CHR_ID --
579   ---------------------------------------------
580   PROCEDURE validate_chr_id(
581     x_return_status                OUT NOCOPY VARCHAR2,
582     p_camv_rec               IN camv_rec_type) IS
583     l_return_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
584   BEGIN
585     IF (p_camv_rec.chr_id = OKL_API.G_MISS_NUM OR
586         p_camv_rec.chr_id IS NULL)
587     THEN
588       OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'chr_id');
589       l_return_status := OKL_API.G_RET_STS_ERROR;
590     END IF;
591     x_return_status := l_return_status;
592   EXCEPTION
593     WHEN OTHERS THEN
594       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
595                           ,p_msg_name     => G_UNEXPECTED_ERROR
596                           ,p_token1       => G_SQLCODE_TOKEN
597                           ,p_token1_value => SQLCODE
598                           ,p_token2       => G_SQLERRM_TOKEN
599                           ,p_token2_value => SQLERRM);
600       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
601   END validate_chr_id;
602   ----------------------------------------------------
603   -- Validate_Attributes for: OBJECT_VERSION_NUMBER --
604   ----------------------------------------------------
605   PROCEDURE validate_object_version_number(
606     x_return_status                OUT NOCOPY VARCHAR2,
607     p_camv_rec               IN camv_rec_type) IS
608     l_return_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
609   BEGIN
610     IF (p_camv_rec.object_version_number = OKL_API.G_MISS_NUM OR
611         p_camv_rec.object_version_number IS NULL)
612     THEN
613       OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'object_version_number');
614       l_return_status := OKL_API.G_RET_STS_ERROR;
615     END IF;
616     x_return_status := l_return_status;
617 
618   EXCEPTION
619     WHEN OTHERS THEN
620       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
621                           ,p_msg_name     => G_UNEXPECTED_ERROR
622                           ,p_token1       => G_SQLCODE_TOKEN
623                           ,p_token1_value => SQLCODE
624                           ,p_token2       => G_SQLERRM_TOKEN
625                           ,p_token2_value => SQLERRM);
626       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
627   END validate_object_version_number;
628   ---------------------------------------------
629   -- Validate_Attributes for: EFFECTIVE_DATE --
630   ---------------------------------------------
631   PROCEDURE validate_effective_date(
632     x_return_status                OUT NOCOPY VARCHAR2,
633     p_camv_rec               IN camv_rec_type) IS
634     l_return_status	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
635   BEGIN
636     IF (p_camv_rec.effective_date = OKL_API.G_MISS_DATE OR
637         p_camv_rec.effective_date IS NULL)
638     THEN
639       OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'effective_date');
640       l_return_status := OKL_API.G_RET_STS_ERROR;
641     END IF;
642     x_return_status := l_return_status;
643 
644   EXCEPTION
645     WHEN OTHERS THEN
646       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
647                           ,p_msg_name     => G_UNEXPECTED_ERROR
648                           ,p_token1       => G_SQLCODE_TOKEN
649                           ,p_token1_value => SQLCODE
650                           ,p_token2       => G_SQLERRM_TOKEN
651                           ,p_token2_value => SQLERRM);
652       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
653   END validate_effective_date;
654   ---------------------------------------------------------------------------
655   -- FUNCTION Validate_Attributes
656   ---------------------------------------------------------------------------
657   ------------------------------------------------
658   -- Validate_Attributes for:OKL_CURE_AMOUNTS_V --
659   ------------------------------------------------
660   FUNCTION Validate_Attributes (
661     p_camv_rec                     IN camv_rec_type
662   ) RETURN VARCHAR2 IS
663     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
664     x_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
665   BEGIN
666     -----------------------------
667     -- Column Level Validation --
668     -----------------------------
669     -- ***
670     -- cure_amount_id
671     -- ***
672     validate_cure_amount_id(l_return_status,p_camv_rec);
673     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
674       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
675         x_return_status := l_return_status;
676         RAISE G_EXCEPTION_HALT_VALIDATION;
677       ELSE
678         x_return_status := l_return_status;
679       END IF;
680     END IF;
681 
682     -- ***
683     -- chr_id
684     -- ***
685     validate_chr_id(l_return_status, p_camv_rec);
686     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
687       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
688         x_return_status := l_return_status;
689         RAISE G_EXCEPTION_HALT_VALIDATION;
690       ELSE
691         x_return_status := l_return_status;
692       END IF;
693     END IF;
694 
695     -- ***
696     -- object_version_number
697     -- ***
698     validate_object_version_number(l_return_status, p_camv_rec);
699     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
700       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
701         x_return_status := l_return_status;
702         RAISE G_EXCEPTION_HALT_VALIDATION;
703       ELSE
704         x_return_status := l_return_status;
705       END IF;
706     END IF;
707 
708     -- ***
709     -- effective_date
710     -- ***
711     validate_effective_date(l_return_status, p_camv_rec);
712     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
713       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
714         x_return_status := l_return_status;
715         RAISE G_EXCEPTION_HALT_VALIDATION;
716       ELSE
717         x_return_status := l_return_status;
718       END IF;
719     END IF;
720 
721     RETURN(l_return_status);
722   EXCEPTION
723     WHEN G_EXCEPTION_HALT_VALIDATION THEN
724       RETURN(l_return_status);
725     WHEN OTHERS THEN
726       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
727                           ,p_msg_name     => G_UNEXPECTED_ERROR
728                           ,p_token1       => G_SQLCODE_TOKEN
729                           ,p_token1_value => SQLCODE
730                           ,p_token2       => G_SQLERRM_TOKEN
731                           ,p_token2_value => SQLERRM);
732       l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
733       RETURN(l_return_status);
734   END Validate_Attributes;
735   ---------------------------------------------------------------------------
736   -- PROCEDURE Validate_Record
737   ---------------------------------------------------------------------------
738   --------------------------------------------
739   -- Validate Record for:OKL_CURE_AMOUNTS_V --
740   --------------------------------------------
741   FUNCTION Validate_Record (
742     p_camv_rec IN camv_rec_type,
743     p_db_camv_rec IN camv_rec_type
744   ) RETURN VARCHAR2 IS
745     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
746   BEGIN
747     RETURN (l_return_status);
748   END Validate_Record;
749   FUNCTION Validate_Record (
750     p_camv_rec IN camv_rec_type
751   ) RETURN VARCHAR2 IS
752     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
753     l_db_camv_rec                  camv_rec_type := get_rec(p_camv_rec);
754   BEGIN
755     l_return_status := Validate_Record(p_camv_rec => p_camv_rec,
756                                        p_db_camv_rec => l_db_camv_rec);
757     RETURN (l_return_status);
758   END Validate_Record;
759 
760   ---------------------------------------------------------------------------
761   -- PROCEDURE Migrate
762   ---------------------------------------------------------------------------
763   PROCEDURE migrate (
764     p_from IN camv_rec_type,
765     p_to   IN OUT NOCOPY cam_rec_type
766   ) IS
767   BEGIN
768     p_to.cure_amount_id := p_from.cure_amount_id;
769     p_to.chr_id := p_from.chr_id;
770     p_to.cure_type := p_from.cure_type;
771     p_to.cure_amount := p_from.cure_amount;
772     p_to.repurchase_amount := p_from.repurchase_amount;
773     p_to.effective_date := p_from.effective_date;
774     p_to.times_cured := p_from.times_cured;
775     p_to.payments_remaining := p_from.payments_remaining;
776     p_to.eligible_cure_amount := p_from.eligible_cure_amount;
777     p_to.outstanding_amount := p_from.outstanding_amount;
778     p_to.past_due_amount := p_from.past_due_amount;
779     p_to.cures_in_possession := p_from.cures_in_possession;
780     p_to.status := p_from.status;
781     p_to.object_version_number := p_from.object_version_number;
782     p_to.org_id := p_from.org_id;
783     p_to.request_id := p_from.request_id;
784     p_to.program_application_id := p_from.program_application_id;
785     p_to.program_id := p_from.program_id;
786     p_to.program_update_date := p_from.program_update_date;
787     p_to.attribute_category := p_from.attribute_category;
788     p_to.attribute1 := p_from.attribute1;
789     p_to.attribute2 := p_from.attribute2;
790     p_to.attribute3 := p_from.attribute3;
791     p_to.attribute4 := p_from.attribute4;
792     p_to.attribute5 := p_from.attribute5;
793     p_to.attribute6 := p_from.attribute6;
794     p_to.attribute7 := p_from.attribute7;
795     p_to.attribute8 := p_from.attribute8;
796     p_to.attribute9 := p_from.attribute9;
797     p_to.attribute10 := p_from.attribute10;
798     p_to.attribute11 := p_from.attribute11;
799     p_to.attribute12 := p_from.attribute12;
800     p_to.attribute13 := p_from.attribute13;
801     p_to.attribute14 := p_from.attribute14;
802     p_to.attribute15 := p_from.attribute15;
803     p_to.created_by := p_from.created_by;
804     p_to.creation_date := p_from.creation_date;
805     p_to.last_updated_by := p_from.last_updated_by;
806     p_to.last_update_date := p_from.last_update_date;
807     p_to.last_update_login := p_from.last_update_login;
808     p_to.NEGOTIATED_AMOUNT := p_from.NEGOTIATED_AMOUNT;
809     p_to.RECEIVED_AMOUNT := p_from.RECEIVED_AMOUNT;
810     p_to.DELINQUENT_AMOUNT :=p_from.DELINQUENT_AMOUNT;
811     p_to.SHORT_FUND_AMOUNT := p_from.SHORT_FUND_AMOUNT;
812     p_to.CRT_ID := p_from.CRT_ID;
813     p_to.SHOW_ON_REQUEST := p_from.SHOW_ON_REQUEST;
814     p_to.SELECTED_ON_REQUEST := p_from.SELECTED_ON_REQUEST;
815     p_to.QTE_ID :=p_from.QTE_ID;
816     p_to.PROCESS :=p_from.PROCESS;
817   END migrate;
818   PROCEDURE migrate (
819     p_from IN cam_rec_type,
820     p_to   IN OUT NOCOPY camv_rec_type
821   ) IS
822   BEGIN
823     p_to.cure_amount_id := p_from.cure_amount_id;
824     p_to.chr_id := p_from.chr_id;
825     p_to.cure_type := p_from.cure_type;
826     p_to.cure_amount := p_from.cure_amount;
827     p_to.repurchase_amount := p_from.repurchase_amount;
828     p_to.effective_date := p_from.effective_date;
829     p_to.times_cured := p_from.times_cured;
830     p_to.payments_remaining := p_from.payments_remaining;
831     p_to.eligible_cure_amount := p_from.eligible_cure_amount;
832     p_to.outstanding_amount := p_from.outstanding_amount;
833     p_to.past_due_amount := p_from.past_due_amount;
834     p_to.cures_in_possession := p_from.cures_in_possession;
835     p_to.status := p_from.status;
836     p_to.object_version_number := p_from.object_version_number;
837     p_to.org_id := p_from.org_id;
838     p_to.request_id := p_from.request_id;
839     p_to.program_application_id := p_from.program_application_id;
840     p_to.program_id := p_from.program_id;
841     p_to.program_update_date := p_from.program_update_date;
842     p_to.attribute_category := p_from.attribute_category;
843     p_to.attribute1 := p_from.attribute1;
844     p_to.attribute2 := p_from.attribute2;
845     p_to.attribute3 := p_from.attribute3;
846     p_to.attribute4 := p_from.attribute4;
847     p_to.attribute5 := p_from.attribute5;
848     p_to.attribute6 := p_from.attribute6;
849     p_to.attribute7 := p_from.attribute7;
850     p_to.attribute8 := p_from.attribute8;
851     p_to.attribute9 := p_from.attribute9;
852     p_to.attribute10 := p_from.attribute10;
853     p_to.attribute11 := p_from.attribute11;
854     p_to.attribute12 := p_from.attribute12;
855     p_to.attribute13 := p_from.attribute13;
856     p_to.attribute14 := p_from.attribute14;
857     p_to.attribute15 := p_from.attribute15;
858     p_to.created_by := p_from.created_by;
859     p_to.creation_date := p_from.creation_date;
860     p_to.last_updated_by := p_from.last_updated_by;
861     p_to.last_update_date := p_from.last_update_date;
862     p_to.last_update_login := p_from.last_update_login;
863     p_to.NEGOTIATED_AMOUNT := p_from.NEGOTIATED_AMOUNT;
864     p_to.RECEIVED_AMOUNT := p_from.RECEIVED_AMOUNT;
865     p_to.DELINQUENT_AMOUNT := p_from.DELINQUENT_AMOUNT;
866     p_to.SHORT_FUND_AMOUNT := p_from.SHORT_FUND_AMOUNT;
867     p_to.CRT_ID := p_from.CRT_ID;
868     p_to.SHOW_ON_REQUEST := p_from.SHOW_ON_REQUEST;
869     p_to.SELECTED_ON_REQUEST := p_from.SELECTED_ON_REQUEST;
870     p_to.QTE_ID := p_from.QTE_ID;
871     p_to.PROCESS := p_from.PROCESS;
872   END migrate;
873   ---------------------------------------------------------------------------
874   -- PROCEDURE validate_row
875   ---------------------------------------------------------------------------
876   -----------------------------------------
877   -- validate_row for:OKL_CURE_AMOUNTS_V --
878   -----------------------------------------
879   PROCEDURE validate_row(
880     p_api_version                  IN NUMBER,
881     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
882     x_return_status                OUT NOCOPY VARCHAR2,
883     x_msg_count                    OUT NOCOPY NUMBER,
884     x_msg_data                     OUT NOCOPY VARCHAR2,
885     p_camv_rec                     IN camv_rec_type) IS
886 
887     l_api_version                  CONSTANT NUMBER := 1;
888     l_api_name                     CONSTANT VARCHAR2(30) := 'V_validate_row';
889     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
890     l_camv_rec                     camv_rec_type := p_camv_rec;
891     l_cam_rec                      cam_rec_type;
892     l_cam_rec                      cam_rec_type;
893   BEGIN
894     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
895                                               G_PKG_NAME,
896                                               p_init_msg_list,
897                                               l_api_version,
898                                               p_api_version,
899                                               '_PVT',
900                                               x_return_status);
901     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
902       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
903     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
904       RAISE OKL_API.G_EXCEPTION_ERROR;
905     END IF;
906     --- Validate all non-missing attributes (Item Level Validation)
907     l_return_status := Validate_Attributes(l_camv_rec);
908     --- If any errors happen abort API
909     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
910       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
911     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
912       RAISE OKL_API.G_EXCEPTION_ERROR;
913     END IF;
914     l_return_status := Validate_Record(l_camv_rec);
915     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
916       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
917     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
918       RAISE OKL_API.G_EXCEPTION_ERROR;
919     END IF;
920     x_return_status := l_return_status;
921   EXCEPTION
922     WHEN OKL_API.G_EXCEPTION_ERROR THEN
923       x_return_status := OKL_API.HANDLE_EXCEPTIONS
924       (
925         l_api_name,
926         G_PKG_NAME,
927         'OKL_API.G_RET_STS_ERROR',
928         x_msg_count,
929         x_msg_data,
930         '_PVT'
931       );
932     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
933       x_return_status := OKL_API.HANDLE_EXCEPTIONS
934       (
935         l_api_name,
936         G_PKG_NAME,
937         'OKL_API.G_RET_STS_UNEXP_ERROR',
938         x_msg_count,
939         x_msg_data,
940         '_PVT'
941       );
942     WHEN OTHERS THEN
943       x_return_status := OKL_API.HANDLE_EXCEPTIONS
944       (
945         l_api_name,
946         G_PKG_NAME,
947         'OTHERS',
948         x_msg_count,
949         x_msg_data,
950         '_PVT'
951       );
952   END validate_row;
953   ----------------------------------------------------
954   -- PL/SQL TBL validate_row for:OKL_CURE_AMOUNTS_V --
955   ----------------------------------------------------
956   PROCEDURE validate_row(
957     p_api_version                  IN NUMBER,
958     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
959     x_return_status                OUT NOCOPY VARCHAR2,
960     x_msg_count                    OUT NOCOPY NUMBER,
961     x_msg_data                     OUT NOCOPY VARCHAR2,
962     p_camv_tbl                     IN camv_tbl_type,
963     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
964 
965     l_api_version                  CONSTANT NUMBER := 1;
966     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_validate_row';
967     i                              NUMBER := 0;
968   BEGIN
969     OKL_API.init_msg_list(p_init_msg_list);
970     -- Make sure PL/SQL table has records in it before passing
971     IF (p_camv_tbl.COUNT > 0) THEN
972       i := p_camv_tbl.FIRST;
973       LOOP
974         DECLARE
975           l_error_rec         OKL_API.ERROR_REC_TYPE;
976         BEGIN
977           l_error_rec.api_name := l_api_name;
978           l_error_rec.api_package := G_PKG_NAME;
979           l_error_rec.idx := i;
980           validate_row (
981             p_api_version                  => p_api_version,
982             p_init_msg_list                => OKL_API.G_FALSE,
983             x_return_status                => l_error_rec.error_type,
984             x_msg_count                    => l_error_rec.msg_count,
985             x_msg_data                     => l_error_rec.msg_data,
986             p_camv_rec                     => p_camv_tbl(i));
987           IF (l_error_rec.error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
988             l_error_rec.sqlcode := SQLCODE;
989             load_error_tbl(l_error_rec, px_error_tbl);
990           ELSE
991             x_msg_count := l_error_rec.msg_count;
992             x_msg_data := l_error_rec.msg_data;
993           END IF;
994         EXCEPTION
995           WHEN OKL_API.G_EXCEPTION_ERROR THEN
996             l_error_rec.error_type := OKL_API.G_RET_STS_ERROR;
997             l_error_rec.sqlcode := SQLCODE;
998             load_error_tbl(l_error_rec, px_error_tbl);
999           WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1000             l_error_rec.error_type := OKL_API.G_RET_STS_UNEXP_ERROR;
1001             l_error_rec.sqlcode := SQLCODE;
1002             load_error_tbl(l_error_rec, px_error_tbl);
1003           WHEN OTHERS THEN
1004             l_error_rec.error_type := 'OTHERS';
1005             l_error_rec.sqlcode := SQLCODE;
1006             load_error_tbl(l_error_rec, px_error_tbl);
1007         END;
1008         EXIT WHEN (i = p_camv_tbl.LAST);
1009         i := p_camv_tbl.NEXT(i);
1010       END LOOP;
1011     END IF;
1012     -- Loop through the error_tbl to find the error with the highest severity
1013     -- and return it.
1014     x_return_status := find_highest_exception(px_error_tbl);
1015     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1016   EXCEPTION
1017     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1018       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1019       (
1020         l_api_name,
1021         G_PKG_NAME,
1022         'OKL_API.G_RET_STS_ERROR',
1023         x_msg_count,
1024         x_msg_data,
1025         '_PVT'
1026       );
1027     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1028       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1029       (
1030         l_api_name,
1031         G_PKG_NAME,
1032         'OKL_API.G_RET_STS_UNEXP_ERROR',
1033         x_msg_count,
1034         x_msg_data,
1035         '_PVT'
1036       );
1037     WHEN OTHERS THEN
1038       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1039       (
1040         l_api_name,
1041         G_PKG_NAME,
1042         'OTHERS',
1043         x_msg_count,
1044         x_msg_data,
1045         '_PVT'
1046       );
1047   END validate_row;
1048 
1049   ----------------------------------------------------
1050   -- PL/SQL TBL validate_row for:OKL_CURE_AMOUNTS_V --
1051   ----------------------------------------------------
1052   PROCEDURE validate_row(
1053     p_api_version                  IN NUMBER,
1054     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1055     x_return_status                OUT NOCOPY VARCHAR2,
1056     x_msg_count                    OUT NOCOPY NUMBER,
1057     x_msg_data                     OUT NOCOPY VARCHAR2,
1058     p_camv_tbl                     IN camv_tbl_type) IS
1059 
1060     l_api_version                  CONSTANT NUMBER := 1;
1061     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_validate_row';
1062     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1063     l_error_tbl                    OKL_API.ERROR_TBL_TYPE;
1064   BEGIN
1065     OKL_API.init_msg_list(p_init_msg_list);
1066     -- Make sure PL/SQL table has records in it before passing
1067     IF (p_camv_tbl.COUNT > 0) THEN
1068       validate_row (
1069         p_api_version                  => p_api_version,
1070         p_init_msg_list                => OKL_API.G_FALSE,
1071         x_return_status                => x_return_status,
1072         x_msg_count                    => x_msg_count,
1073         x_msg_data                     => x_msg_data,
1074         p_camv_tbl                     => p_camv_tbl,
1075         px_error_tbl                   => l_error_tbl);
1076     END IF;
1077     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1078   EXCEPTION
1079     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1080       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1081       (
1082         l_api_name,
1083         G_PKG_NAME,
1084         'OKL_API.G_RET_STS_ERROR',
1085         x_msg_count,
1086         x_msg_data,
1087         '_PVT'
1088       );
1089     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1090       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1091       (
1092         l_api_name,
1093         G_PKG_NAME,
1094         'OKL_API.G_RET_STS_UNEXP_ERROR',
1095         x_msg_count,
1096         x_msg_data,
1097         '_PVT'
1098       );
1099     WHEN OTHERS THEN
1100       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1101       (
1102         l_api_name,
1103         G_PKG_NAME,
1104         'OTHERS',
1105         x_msg_count,
1106         x_msg_data,
1107         '_PVT'
1108       );
1109   END validate_row;
1110 
1111   ---------------------------------------------------------------------------
1112   -- PROCEDURE insert_row
1113   ---------------------------------------------------------------------------
1114   -------------------------------------
1115   -- insert_row for:OKL_CURE_AMOUNTS --
1116   -------------------------------------
1117   PROCEDURE insert_row(
1118     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1119     x_return_status                OUT NOCOPY VARCHAR2,
1120     x_msg_count                    OUT NOCOPY NUMBER,
1121     x_msg_data                     OUT NOCOPY VARCHAR2,
1122     p_cam_rec                      IN cam_rec_type,
1123     x_cam_rec                      OUT NOCOPY cam_rec_type) IS
1124 
1125     l_api_version                  CONSTANT NUMBER := 1;
1126     l_api_name                     CONSTANT VARCHAR2(30) := 'B_insert_row';
1127     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1128     l_cam_rec                      cam_rec_type := p_cam_rec;
1129     l_def_cam_rec                  cam_rec_type;
1130     -----------------------------------------
1131     -- Set_Attributes for:OKL_CURE_AMOUNTS --
1132     -----------------------------------------
1133     FUNCTION Set_Attributes (
1134       p_cam_rec IN cam_rec_type,
1135       x_cam_rec OUT NOCOPY cam_rec_type
1136     ) RETURN VARCHAR2 IS
1137       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1138     BEGIN
1139       x_cam_rec := p_cam_rec;
1140       RETURN(l_return_status);
1141     END Set_Attributes;
1142   BEGIN
1143     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
1144                                               p_init_msg_list,
1145                                               '_PVT',
1146                                               x_return_status);
1147     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1148       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1149     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1150       RAISE OKL_API.G_EXCEPTION_ERROR;
1151     END IF;
1152     --- Setting item atributes
1153     l_return_status := Set_Attributes(
1154       p_cam_rec,                         -- IN
1155       l_cam_rec);                        -- OUT
1156     --- If any errors happen abort API
1157     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1158       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1159     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1160       RAISE OKL_API.G_EXCEPTION_ERROR;
1161     END IF;
1162     INSERT INTO OKL_CURE_AMOUNTS(
1163       cure_amount_id,
1164       chr_id,
1165       cure_type,
1166       cure_amount,
1167       repurchase_amount,
1168       effective_date,
1169       times_cured,
1170       payments_remaining,
1171       eligible_cure_amount,
1172       outstanding_amount,
1173       past_due_amount,
1174       cures_in_possession,
1175       status,
1176       object_version_number,
1177       org_id,
1178       request_id,
1179       program_application_id,
1180       program_id,
1181       program_update_date,
1182       attribute_category,
1183       attribute1,
1184       attribute2,
1185       attribute3,
1186       attribute4,
1187       attribute5,
1188       attribute6,
1189       attribute7,
1190       attribute8,
1191       attribute9,
1192       attribute10,
1193       attribute11,
1194       attribute12,
1195       attribute13,
1196       attribute14,
1197       attribute15,
1198       created_by,
1199       creation_date,
1200       last_updated_by,
1201       last_update_date,
1202       last_update_login,
1203       NEGOTIATED_AMOUNT,
1204       RECEIVED_AMOUNT,
1205       DELINQUENT_AMOUNT,
1206       SHORT_FUND_AMOUNT,
1207       CRT_ID,
1208       SHOW_ON_REQUEST,
1209       SELECTED_ON_REQUEST,
1210       QTE_ID,
1211       PROCESS)
1212     VALUES (
1213       l_cam_rec.cure_amount_id,
1214       l_cam_rec.chr_id,
1215       l_cam_rec.cure_type,
1216       l_cam_rec.cure_amount,
1217       l_cam_rec.repurchase_amount,
1218       l_cam_rec.effective_date,
1219       l_cam_rec.times_cured,
1220       l_cam_rec.payments_remaining,
1221       l_cam_rec.eligible_cure_amount,
1222       l_cam_rec.outstanding_amount,
1223       l_cam_rec.past_due_amount,
1224       l_cam_rec.cures_in_possession,
1225       l_cam_rec.status,
1226       l_cam_rec.object_version_number,
1227       l_cam_rec.org_id,
1228       l_cam_rec.request_id,
1229       l_cam_rec.program_application_id,
1230       l_cam_rec.program_id,
1231       l_cam_rec.program_update_date,
1232       l_cam_rec.attribute_category,
1233       l_cam_rec.attribute1,
1234       l_cam_rec.attribute2,
1235       l_cam_rec.attribute3,
1236       l_cam_rec.attribute4,
1237       l_cam_rec.attribute5,
1238       l_cam_rec.attribute6,
1239       l_cam_rec.attribute7,
1240       l_cam_rec.attribute8,
1241       l_cam_rec.attribute9,
1242       l_cam_rec.attribute10,
1243       l_cam_rec.attribute11,
1244       l_cam_rec.attribute12,
1245       l_cam_rec.attribute13,
1246       l_cam_rec.attribute14,
1247       l_cam_rec.attribute15,
1248       l_cam_rec.created_by,
1249       l_cam_rec.creation_date,
1250       l_cam_rec.last_updated_by,
1251       l_cam_rec.last_update_date,
1252       l_cam_rec.last_update_login,
1253       l_cam_rec.NEGOTIATED_AMOUNT,
1254       l_cam_rec.RECEIVED_AMOUNT,
1255       l_cam_rec.DELINQUENT_AMOUNT,
1256       l_cam_rec.SHORT_FUND_AMOUNT,
1257       l_cam_rec.CRT_ID,
1258       l_cam_rec.SHOW_ON_REQUEST,
1259       l_cam_rec.SELECTED_ON_REQUEST,
1260       l_cam_rec.qte_id,
1261       l_cam_rec.process);
1262     -- Set OUT values
1263     x_cam_rec := l_cam_rec;
1264     x_return_status := l_return_status;
1265     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1266   EXCEPTION
1267     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1268       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1269       (
1270         l_api_name,
1271         G_PKG_NAME,
1272         'OKL_API.G_RET_STS_ERROR',
1273         x_msg_count,
1274         x_msg_data,
1275         '_PVT'
1276       );
1277     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1278       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1279       (
1280         l_api_name,
1281         G_PKG_NAME,
1282         'OKL_API.G_RET_STS_UNEXP_ERROR',
1283         x_msg_count,
1284         x_msg_data,
1285         '_PVT'
1286       );
1287     WHEN OTHERS THEN
1288       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1289       (
1290         l_api_name,
1291         G_PKG_NAME,
1292         'OTHERS',
1293         x_msg_count,
1294         x_msg_data,
1295         '_PVT'
1296       );
1297   END insert_row;
1298   ----------------------------------------
1299   -- insert_row for :OKL_CURE_AMOUNTS_V --
1300   ----------------------------------------
1301   PROCEDURE insert_row(
1302     p_api_version                  IN NUMBER,
1303     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1304     x_return_status                OUT NOCOPY VARCHAR2,
1305     x_msg_count                    OUT NOCOPY NUMBER,
1306     x_msg_data                     OUT NOCOPY VARCHAR2,
1307     p_camv_rec                     IN camv_rec_type,
1308     x_camv_rec                     OUT NOCOPY camv_rec_type) IS
1309 
1310     l_api_version                  CONSTANT NUMBER := 1;
1311     l_api_name                     CONSTANT VARCHAR2(30) := 'V_insert_row';
1312     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1313     l_camv_rec                     camv_rec_type := p_camv_rec;
1314     l_def_camv_rec                 camv_rec_type;
1315     l_cam_rec                      cam_rec_type;
1316     lx_cam_rec                     cam_rec_type;
1317     -------------------------------
1318     -- FUNCTION fill_who_columns --
1319     -------------------------------
1320     FUNCTION fill_who_columns (
1321       p_camv_rec IN camv_rec_type
1322     ) RETURN camv_rec_type IS
1323       l_camv_rec camv_rec_type := p_camv_rec;
1324     BEGIN
1325       l_camv_rec.CREATION_DATE := SYSDATE;
1326       l_camv_rec.CREATED_BY := FND_GLOBAL.USER_ID;
1327       l_camv_rec.LAST_UPDATE_DATE := l_camv_rec.CREATION_DATE;
1328       l_camv_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1329       l_camv_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
1330       RETURN(l_camv_rec);
1331     END fill_who_columns;
1332     -------------------------------------------
1333     -- Set_Attributes for:OKL_CURE_AMOUNTS_V --
1334     -------------------------------------------
1335     FUNCTION Set_Attributes (
1336       p_camv_rec IN camv_rec_type,
1337       x_camv_rec OUT NOCOPY camv_rec_type
1338     ) RETURN VARCHAR2 IS
1339       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1340     BEGIN
1341       x_camv_rec := p_camv_rec;
1342       x_camv_rec.OBJECT_VERSION_NUMBER := 1;
1343       RETURN(l_return_status);
1344     END Set_Attributes;
1345   BEGIN
1346     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
1347                                               G_PKG_NAME,
1348                                               p_init_msg_list,
1349                                               l_api_version,
1350                                               p_api_version,
1351                                               '_PVT',
1352                                               x_return_status);
1353     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1354       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1355     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1356       RAISE OKL_API.G_EXCEPTION_ERROR;
1357     END IF;
1358     l_camv_rec := null_out_defaults(p_camv_rec);
1359     -- Set primary key value
1360     l_camv_rec.CURE_AMOUNT_ID := get_seq_id;
1361     -- Setting item attributes
1362     l_return_Status := Set_Attributes(
1363       l_camv_rec,                        -- IN
1364       l_def_camv_rec);                   -- OUT
1365     --- If any errors happen abort API
1366     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1367       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1368     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1369       RAISE OKL_API.G_EXCEPTION_ERROR;
1370     END IF;
1371     l_def_camv_rec := fill_who_columns(l_def_camv_rec);
1372     --- Validate all non-missing attributes (Item Level Validation)
1373     l_return_status := Validate_Attributes(l_def_camv_rec);
1374     --- If any errors happen abort API
1375     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1376       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1377     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1378       RAISE OKL_API.G_EXCEPTION_ERROR;
1379     END IF;
1380     l_return_status := Validate_Record(l_def_camv_rec);
1381     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1382       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1383     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1384       RAISE OKL_API.G_EXCEPTION_ERROR;
1385     END IF;
1386     -----------------------------------------
1387     -- Move VIEW record to "Child" records --
1388     -----------------------------------------
1389     migrate(l_def_camv_rec, l_cam_rec);
1390     -----------------------------------------------
1391     -- Call the INSERT_ROW for each child record --
1392     -----------------------------------------------
1393     insert_row(
1394       p_init_msg_list,
1395       l_return_status,
1396       x_msg_count,
1397       x_msg_data,
1398       l_cam_rec,
1399       lx_cam_rec
1400     );
1401     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1402       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1403     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1404       RAISE OKL_API.G_EXCEPTION_ERROR;
1405     END IF;
1406     migrate(lx_cam_rec, l_def_camv_rec);
1407     -- Set OUT values
1408     x_camv_rec := l_def_camv_rec;
1409     x_return_status := l_return_status;
1410     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1411   EXCEPTION
1412     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1413       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1414       (
1415         l_api_name,
1416         G_PKG_NAME,
1417         'OKL_API.G_RET_STS_ERROR',
1418         x_msg_count,
1419         x_msg_data,
1420         '_PVT'
1421       );
1422     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1423       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1424       (
1425         l_api_name,
1426         G_PKG_NAME,
1427         'OKL_API.G_RET_STS_UNEXP_ERROR',
1428         x_msg_count,
1429         x_msg_data,
1430         '_PVT'
1431       );
1432     WHEN OTHERS THEN
1433       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1434       (
1435         l_api_name,
1436         G_PKG_NAME,
1437         'OTHERS',
1438         x_msg_count,
1439         x_msg_data,
1440         '_PVT'
1441       );
1442   END insert_row;
1443   ----------------------------------------
1444   -- PL/SQL TBL insert_row for:CAMV_TBL --
1445   ----------------------------------------
1446   PROCEDURE insert_row(
1447     p_api_version                  IN NUMBER,
1448     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1449     x_return_status                OUT NOCOPY VARCHAR2,
1450     x_msg_count                    OUT NOCOPY NUMBER,
1451     x_msg_data                     OUT NOCOPY VARCHAR2,
1452     p_camv_tbl                     IN camv_tbl_type,
1453     x_camv_tbl                     OUT NOCOPY camv_tbl_type,
1454     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
1455 
1456     l_api_version                  CONSTANT NUMBER := 1;
1457     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_insert_row';
1458     i                              NUMBER := 0;
1459   BEGIN
1460     OKL_API.init_msg_list(p_init_msg_list);
1461     -- Make sure PL/SQL table has records in it before passing
1462     IF (p_camv_tbl.COUNT > 0) THEN
1463       i := p_camv_tbl.FIRST;
1464       LOOP
1465         DECLARE
1466           l_error_rec         OKL_API.ERROR_REC_TYPE;
1467         BEGIN
1468           l_error_rec.api_name := l_api_name;
1469           l_error_rec.api_package := G_PKG_NAME;
1470           l_error_rec.idx := i;
1471           insert_row (
1472             p_api_version                  => p_api_version,
1473             p_init_msg_list                => OKL_API.G_FALSE,
1474             x_return_status                => l_error_rec.error_type,
1475             x_msg_count                    => l_error_rec.msg_count,
1476             x_msg_data                     => l_error_rec.msg_data,
1477             p_camv_rec                     => p_camv_tbl(i),
1478             x_camv_rec                     => x_camv_tbl(i));
1479           IF (l_error_rec.error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
1480             l_error_rec.sqlcode := SQLCODE;
1481             load_error_tbl(l_error_rec, px_error_tbl);
1482           ELSE
1483             x_msg_count := l_error_rec.msg_count;
1484             x_msg_data := l_error_rec.msg_data;
1485           END IF;
1486         EXCEPTION
1487           WHEN OKL_API.G_EXCEPTION_ERROR THEN
1488             l_error_rec.error_type := OKL_API.G_RET_STS_ERROR;
1489             l_error_rec.sqlcode := SQLCODE;
1490             load_error_tbl(l_error_rec, px_error_tbl);
1491           WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1492             l_error_rec.error_type := OKL_API.G_RET_STS_UNEXP_ERROR;
1493             l_error_rec.sqlcode := SQLCODE;
1494             load_error_tbl(l_error_rec, px_error_tbl);
1495           WHEN OTHERS THEN
1496             l_error_rec.error_type := 'OTHERS';
1497             l_error_rec.sqlcode := SQLCODE;
1498             load_error_tbl(l_error_rec, px_error_tbl);
1499         END;
1500         EXIT WHEN (i = p_camv_tbl.LAST);
1501         i := p_camv_tbl.NEXT(i);
1502       END LOOP;
1503     END IF;
1504     -- Loop through the error_tbl to find the error with the highest severity
1505     -- and return it.
1506     x_return_status := find_highest_exception(px_error_tbl);
1507     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1508   EXCEPTION
1509     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1510       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1511       (
1512         l_api_name,
1513         G_PKG_NAME,
1514         'OKL_API.G_RET_STS_ERROR',
1515         x_msg_count,
1516         x_msg_data,
1517         '_PVT'
1518       );
1519     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1520       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1521       (
1522         l_api_name,
1523         G_PKG_NAME,
1524         'OKL_API.G_RET_STS_UNEXP_ERROR',
1525         x_msg_count,
1526         x_msg_data,
1527         '_PVT'
1528       );
1529     WHEN OTHERS THEN
1530       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1531       (
1532         l_api_name,
1533         G_PKG_NAME,
1534         'OTHERS',
1535         x_msg_count,
1536         x_msg_data,
1537         '_PVT'
1538       );
1539   END insert_row;
1540 
1541   ----------------------------------------
1542   -- PL/SQL TBL insert_row for:CAMV_TBL --
1543   ----------------------------------------
1544   PROCEDURE insert_row(
1545     p_api_version                  IN NUMBER,
1546     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1547     x_return_status                OUT NOCOPY VARCHAR2,
1548     x_msg_count                    OUT NOCOPY NUMBER,
1549     x_msg_data                     OUT NOCOPY VARCHAR2,
1550     p_camv_tbl                     IN camv_tbl_type,
1551     x_camv_tbl                     OUT NOCOPY camv_tbl_type) IS
1552 
1553     l_api_version                  CONSTANT NUMBER := 1;
1554     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_insert_row';
1555     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1556     l_error_tbl                    OKL_API.ERROR_TBL_TYPE;
1557   BEGIN
1558     OKL_API.init_msg_list(p_init_msg_list);
1559     -- Make sure PL/SQL table has records in it before passing
1560     IF (p_camv_tbl.COUNT > 0) THEN
1561       insert_row (
1562         p_api_version                  => p_api_version,
1563         p_init_msg_list                => OKL_API.G_FALSE,
1564         x_return_status                => x_return_status,
1565         x_msg_count                    => x_msg_count,
1566         x_msg_data                     => x_msg_data,
1567         p_camv_tbl                     => p_camv_tbl,
1568         x_camv_tbl                     => x_camv_tbl,
1569         px_error_tbl                   => l_error_tbl);
1570     END IF;
1571     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1572   EXCEPTION
1573     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1574       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1575       (
1576         l_api_name,
1577         G_PKG_NAME,
1578         'OKL_API.G_RET_STS_ERROR',
1579         x_msg_count,
1580         x_msg_data,
1581         '_PVT'
1582       );
1583     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1584       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1585       (
1586         l_api_name,
1587         G_PKG_NAME,
1588         'OKL_API.G_RET_STS_UNEXP_ERROR',
1589         x_msg_count,
1590         x_msg_data,
1591         '_PVT'
1592       );
1593     WHEN OTHERS THEN
1594       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1595       (
1596         l_api_name,
1597         G_PKG_NAME,
1598         'OTHERS',
1599         x_msg_count,
1600         x_msg_data,
1601         '_PVT'
1602       );
1603   END insert_row;
1604 
1605   ---------------------------------------------------------------------------
1606   -- PROCEDURE lock_row
1607   ---------------------------------------------------------------------------
1608   -----------------------------------
1609   -- lock_row for:OKL_CURE_AMOUNTS --
1610   -----------------------------------
1611   PROCEDURE lock_row(
1612     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1613     x_return_status                OUT NOCOPY VARCHAR2,
1614     x_msg_count                    OUT NOCOPY NUMBER,
1615     x_msg_data                     OUT NOCOPY VARCHAR2,
1616     p_cam_rec                      IN cam_rec_type) IS
1617 
1618     E_Resource_Busy                EXCEPTION;
1619     PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
1620     CURSOR lock_csr (p_cam_rec IN cam_rec_type) IS
1621     SELECT OBJECT_VERSION_NUMBER
1622       FROM OKL_CURE_AMOUNTS
1623      WHERE CURE_AMOUNT_ID = p_cam_rec.cure_amount_id
1624        AND OBJECT_VERSION_NUMBER = p_cam_rec.object_version_number
1625     FOR UPDATE OF OBJECT_VERSION_NUMBER NOWAIT;
1626 
1627     CURSOR lchk_csr (p_cam_rec IN cam_rec_type) IS
1628     SELECT OBJECT_VERSION_NUMBER
1629       FROM OKL_CURE_AMOUNTS
1630      WHERE CURE_AMOUNT_ID = p_cam_rec.cure_amount_id;
1631     l_api_version                  CONSTANT NUMBER := 1;
1632     l_api_name                     CONSTANT VARCHAR2(30) := 'B_lock_row';
1633     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1634     l_object_version_number        OKL_CURE_AMOUNTS.OBJECT_VERSION_NUMBER%TYPE;
1635     lc_object_version_number       OKL_CURE_AMOUNTS.OBJECT_VERSION_NUMBER%TYPE;
1636     l_row_notfound                 BOOLEAN := FALSE;
1637     lc_row_notfound                BOOLEAN := FALSE;
1638   BEGIN
1639     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
1640                                               p_init_msg_list,
1641                                               '_PVT',
1642                                               x_return_status);
1643     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1644       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1645     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1646       RAISE OKL_API.G_EXCEPTION_ERROR;
1647     END IF;
1648     BEGIN
1649       OPEN lock_csr(p_cam_rec);
1650       FETCH lock_csr INTO l_object_version_number;
1651       l_row_notfound := lock_csr%NOTFOUND;
1652       CLOSE lock_csr;
1653     EXCEPTION
1654       WHEN E_Resource_Busy THEN
1655         IF (lock_csr%ISOPEN) THEN
1656           CLOSE lock_csr;
1657         END IF;
1658         OKL_API.set_message(G_FND_APP,G_FORM_UNABLE_TO_RESERVE_REC);
1659         RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
1660     END;
1661 
1662     IF ( l_row_notfound ) THEN
1663       OPEN lchk_csr(p_cam_rec);
1664       FETCH lchk_csr INTO lc_object_version_number;
1665       lc_row_notfound := lchk_csr%NOTFOUND;
1666       CLOSE lchk_csr;
1667     END IF;
1668     IF (lc_row_notfound) THEN
1669       OKL_API.set_message(G_FND_APP,G_FORM_RECORD_DELETED);
1670       RAISE OKL_API.G_EXCEPTION_ERROR;
1671     ELSIF lc_object_version_number > p_cam_rec.object_version_number THEN
1672       OKL_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1673       RAISE OKL_API.G_EXCEPTION_ERROR;
1674     ELSIF lc_object_version_number <> p_cam_rec.object_version_number THEN
1675       OKL_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1676       RAISE OKL_API.G_EXCEPTION_ERROR;
1677     ELSIF lc_object_version_number = -1 THEN
1678       OKL_API.set_message(G_APP_NAME,G_RECORD_LOGICALLY_DELETED);
1679       RAISE OKL_API.G_EXCEPTION_ERROR;
1680     END IF;
1681     x_return_status := l_return_status;
1682     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1683   EXCEPTION
1684     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1685       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1686       (
1687         l_api_name,
1688         G_PKG_NAME,
1689         'OKL_API.G_RET_STS_ERROR',
1690         x_msg_count,
1691         x_msg_data,
1692         '_PVT'
1693       );
1694     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1695       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1696       (
1697         l_api_name,
1698         G_PKG_NAME,
1699         'OKL_API.G_RET_STS_UNEXP_ERROR',
1700         x_msg_count,
1701         x_msg_data,
1702         '_PVT'
1703       );
1704     WHEN OTHERS THEN
1705       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1706       (
1707         l_api_name,
1708         G_PKG_NAME,
1709         'OTHERS',
1710         x_msg_count,
1711         x_msg_data,
1712         '_PVT'
1713       );
1714   END lock_row;
1715   --------------------------------------
1716   -- lock_row for: OKL_CURE_AMOUNTS_V --
1717   --------------------------------------
1718   PROCEDURE lock_row(
1719     p_api_version                  IN NUMBER,
1720     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1721     x_return_status                OUT NOCOPY VARCHAR2,
1722     x_msg_count                    OUT NOCOPY NUMBER,
1723     x_msg_data                     OUT NOCOPY VARCHAR2,
1724     p_camv_rec                     IN camv_rec_type) IS
1725 
1726     l_api_version                  CONSTANT NUMBER := 1;
1727     l_api_name                     CONSTANT VARCHAR2(30) := 'V_lock_row';
1728     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1729     l_cam_rec                      cam_rec_type;
1730   BEGIN
1731     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
1732                                               G_PKG_NAME,
1733                                               p_init_msg_list,
1734                                               l_api_version,
1735                                               p_api_version,
1736                                               '_PVT',
1737                                               x_return_status);
1738     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1739       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1740     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1741       RAISE OKL_API.G_EXCEPTION_ERROR;
1742     END IF;
1743     -----------------------------------------
1744     -- Move VIEW record to "Child" records --
1745     -----------------------------------------
1746     migrate(p_camv_rec, l_cam_rec);
1747     ---------------------------------------------
1748     -- Call the LOCK_ROW for each child record --
1749     ---------------------------------------------
1750     lock_row(
1751       p_init_msg_list,
1752       l_return_status,
1753       x_msg_count,
1754       x_msg_data,
1755       l_cam_rec
1756     );
1757     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1758       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1759     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
1760       RAISE OKL_API.G_EXCEPTION_ERROR;
1761     END IF;
1762     x_return_status := l_return_status;
1763     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1764   EXCEPTION
1765     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1766       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1767       (
1768         l_api_name,
1769         G_PKG_NAME,
1770         'OKL_API.G_RET_STS_ERROR',
1771         x_msg_count,
1772         x_msg_data,
1773         '_PVT'
1774       );
1775     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1776       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1777       (
1778         l_api_name,
1779         G_PKG_NAME,
1780         'OKL_API.G_RET_STS_UNEXP_ERROR',
1781         x_msg_count,
1782         x_msg_data,
1783         '_PVT'
1784       );
1785     WHEN OTHERS THEN
1786       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1787       (
1788         l_api_name,
1789         G_PKG_NAME,
1790         'OTHERS',
1791         x_msg_count,
1792         x_msg_data,
1793         '_PVT'
1794       );
1795   END lock_row;
1796   --------------------------------------
1797   -- PL/SQL TBL lock_row for:CAMV_TBL --
1798   --------------------------------------
1799   PROCEDURE lock_row(
1800     p_api_version                  IN NUMBER,
1801     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1802     x_return_status                OUT NOCOPY VARCHAR2,
1803     x_msg_count                    OUT NOCOPY NUMBER,
1804     x_msg_data                     OUT NOCOPY VARCHAR2,
1805     p_camv_tbl                     IN camv_tbl_type,
1806     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
1807 
1808     l_api_version                  CONSTANT NUMBER := 1;
1809     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_lock_row';
1810     i                              NUMBER := 0;
1811   BEGIN
1812     OKL_API.init_msg_list(p_init_msg_list);
1813     -- Make sure PL/SQL table has recrods in it before passing
1814     IF (p_camv_tbl.COUNT > 0) THEN
1815       i := p_camv_tbl.FIRST;
1816       LOOP
1817         DECLARE
1818           l_error_rec         OKL_API.ERROR_REC_TYPE;
1819         BEGIN
1820           l_error_rec.api_name := l_api_name;
1821           l_error_rec.api_package := G_PKG_NAME;
1822           l_error_rec.idx := i;
1823           lock_row(
1824             p_api_version                  => p_api_version,
1825             p_init_msg_list                => OKL_API.G_FALSE,
1826             x_return_status                => l_error_rec.error_type,
1827             x_msg_count                    => l_error_rec.msg_count,
1828             x_msg_data                     => l_error_rec.msg_data,
1829             p_camv_rec                     => p_camv_tbl(i));
1830           IF (l_error_rec.error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
1831             l_error_rec.sqlcode := SQLCODE;
1832             load_error_tbl(l_error_rec, px_error_tbl);
1833           ELSE
1834             x_msg_count := l_error_rec.msg_count;
1835             x_msg_data := l_error_rec.msg_data;
1836           END IF;
1837         EXCEPTION
1838           WHEN OKL_API.G_EXCEPTION_ERROR THEN
1839             l_error_rec.error_type := OKL_API.G_RET_STS_ERROR;
1840             l_error_rec.sqlcode := SQLCODE;
1841             load_error_tbl(l_error_rec, px_error_tbl);
1842           WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1843             l_error_rec.error_type := OKL_API.G_RET_STS_UNEXP_ERROR;
1844             l_error_rec.sqlcode := SQLCODE;
1845             load_error_tbl(l_error_rec, px_error_tbl);
1846           WHEN OTHERS THEN
1847             l_error_rec.error_type := 'OTHERS';
1848             l_error_rec.sqlcode := SQLCODE;
1849             load_error_tbl(l_error_rec, px_error_tbl);
1850         END;
1851         EXIT WHEN (i = p_camv_tbl.LAST);
1852         i := p_camv_tbl.NEXT(i);
1853       END LOOP;
1854     END IF;
1855     -- Loop through the error_tbl to find the error with the highest severity
1856     -- and return it.
1857     x_return_status := find_highest_exception(px_error_tbl);
1858     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1859   EXCEPTION
1860     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1861       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1862       (
1863         l_api_name,
1864         G_PKG_NAME,
1865         'OKL_API.G_RET_STS_ERROR',
1866         x_msg_count,
1867         x_msg_data,
1868         '_PVT'
1869       );
1870     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1871       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1872       (
1873         l_api_name,
1874         G_PKG_NAME,
1875         'OKL_API.G_RET_STS_UNEXP_ERROR',
1876         x_msg_count,
1877         x_msg_data,
1878         '_PVT'
1879       );
1880     WHEN OTHERS THEN
1881       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1882       (
1883         l_api_name,
1884         G_PKG_NAME,
1885         'OTHERS',
1886         x_msg_count,
1887         x_msg_data,
1888         '_PVT'
1889       );
1890   END lock_row;
1891   --------------------------------------
1892   -- PL/SQL TBL lock_row for:CAMV_TBL --
1893   --------------------------------------
1894   PROCEDURE lock_row(
1895     p_api_version                  IN NUMBER,
1896     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1897     x_return_status                OUT NOCOPY VARCHAR2,
1898     x_msg_count                    OUT NOCOPY NUMBER,
1899     x_msg_data                     OUT NOCOPY VARCHAR2,
1900     p_camv_tbl                     IN camv_tbl_type) IS
1901 
1902     l_api_version                  CONSTANT NUMBER := 1;
1903     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_lock_row';
1904     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1905     l_error_tbl                    OKL_API.ERROR_TBL_TYPE;
1906   BEGIN
1907     OKL_API.init_msg_list(p_init_msg_list);
1908     -- Make sure PL/SQL table has recrods in it before passing
1909     IF (p_camv_tbl.COUNT > 0) THEN
1910       lock_row(
1911         p_api_version                  => p_api_version,
1912         p_init_msg_list                => OKL_API.G_FALSE,
1913         x_return_status                => x_return_status,
1914         x_msg_count                    => x_msg_count,
1915         x_msg_data                     => x_msg_data,
1916         p_camv_tbl                     => p_camv_tbl,
1917         px_error_tbl                   => l_error_tbl);
1918     END IF;
1919     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
1920   EXCEPTION
1921     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1922       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1923       (
1924         l_api_name,
1925         G_PKG_NAME,
1926         'OKL_API.G_RET_STS_ERROR',
1927         x_msg_count,
1928         x_msg_data,
1929         '_PVT'
1930       );
1931     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1932       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1933       (
1934         l_api_name,
1935         G_PKG_NAME,
1936         'OKL_API.G_RET_STS_UNEXP_ERROR',
1937         x_msg_count,
1938         x_msg_data,
1939         '_PVT'
1940       );
1941     WHEN OTHERS THEN
1942       x_return_status := OKL_API.HANDLE_EXCEPTIONS
1943       (
1944         l_api_name,
1945         G_PKG_NAME,
1946         'OTHERS',
1947         x_msg_count,
1948         x_msg_data,
1949         '_PVT'
1950       );
1951   END lock_row;
1952   ---------------------------------------------------------------------------
1953   -- PROCEDURE update_row
1954   ---------------------------------------------------------------------------
1955   -------------------------------------
1956   -- update_row for:OKL_CURE_AMOUNTS --
1957   -------------------------------------
1958   PROCEDURE update_row(
1959     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1960     x_return_status                OUT NOCOPY VARCHAR2,
1961     x_msg_count                    OUT NOCOPY NUMBER,
1962     x_msg_data                     OUT NOCOPY VARCHAR2,
1963     p_cam_rec                      IN cam_rec_type,
1964     x_cam_rec                      OUT NOCOPY cam_rec_type) IS
1965 
1966     l_api_version                  CONSTANT NUMBER := 1;
1967     l_api_name                     CONSTANT VARCHAR2(30) := 'B_update_row';
1968     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1969     l_cam_rec                      cam_rec_type := p_cam_rec;
1970     l_def_cam_rec                  cam_rec_type;
1971     l_row_notfound                 BOOLEAN := TRUE;
1972     ----------------------------------
1973     -- FUNCTION populate_new_record --
1974     ----------------------------------
1975     FUNCTION populate_new_record (
1976       p_cam_rec IN cam_rec_type,
1977       x_cam_rec OUT NOCOPY cam_rec_type
1978     ) RETURN VARCHAR2 IS
1979       l_cam_rec                      cam_rec_type;
1980       l_row_notfound                 BOOLEAN := TRUE;
1981       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1982     BEGIN
1983       x_cam_rec := p_cam_rec;
1984       -- Get current database values
1985       l_cam_rec := get_rec(p_cam_rec, l_return_status);
1986       IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
1987         IF (x_cam_rec.cure_amount_id = OKL_API.G_MISS_NUM)
1988         THEN
1989           x_cam_rec.cure_amount_id := l_cam_rec.cure_amount_id;
1990         END IF;
1991         IF (x_cam_rec.chr_id = OKL_API.G_MISS_NUM)
1992         THEN
1993           x_cam_rec.chr_id := l_cam_rec.chr_id;
1994         END IF;
1995         IF (x_cam_rec.cure_type = OKL_API.G_MISS_CHAR)
1996         THEN
1997           x_cam_rec.cure_type := l_cam_rec.cure_type;
1998         END IF;
1999         IF (x_cam_rec.cure_amount = OKL_API.G_MISS_NUM)
2000         THEN
2001           x_cam_rec.cure_amount := l_cam_rec.cure_amount;
2002         END IF;
2003         IF (x_cam_rec.repurchase_amount = OKL_API.G_MISS_NUM)
2004         THEN
2005           x_cam_rec.repurchase_amount := l_cam_rec.repurchase_amount;
2006         END IF;
2007         IF (x_cam_rec.effective_date = OKL_API.G_MISS_DATE)
2008         THEN
2009           x_cam_rec.effective_date := l_cam_rec.effective_date;
2010         END IF;
2011         IF (x_cam_rec.times_cured = OKL_API.G_MISS_NUM)
2012         THEN
2013           x_cam_rec.times_cured := l_cam_rec.times_cured;
2014         END IF;
2015         IF (x_cam_rec.payments_remaining = OKL_API.G_MISS_NUM)
2016         THEN
2017           x_cam_rec.payments_remaining := l_cam_rec.payments_remaining;
2018         END IF;
2019         IF (x_cam_rec.eligible_cure_amount = OKL_API.G_MISS_NUM)
2020         THEN
2021           x_cam_rec.eligible_cure_amount := l_cam_rec.eligible_cure_amount;
2022         END IF;
2023         IF (x_cam_rec.outstanding_amount = OKL_API.G_MISS_NUM)
2024         THEN
2025           x_cam_rec.outstanding_amount := l_cam_rec.outstanding_amount;
2026         END IF;
2027         IF (x_cam_rec.past_due_amount = OKL_API.G_MISS_NUM)
2028         THEN
2029           x_cam_rec.past_due_amount := l_cam_rec.past_due_amount;
2030         END IF;
2031         IF (x_cam_rec.cures_in_possession = OKL_API.G_MISS_NUM)
2032         THEN
2033           x_cam_rec.cures_in_possession := l_cam_rec.cures_in_possession;
2034         END IF;
2035         IF (x_cam_rec.status = OKL_API.G_MISS_CHAR)
2036         THEN
2037           x_cam_rec.status := l_cam_rec.status;
2038         END IF;
2039         IF (x_cam_rec.object_version_number = OKL_API.G_MISS_NUM)
2040         THEN
2041           x_cam_rec.object_version_number := l_cam_rec.object_version_number;
2042         END IF;
2043         IF (x_cam_rec.org_id = OKL_API.G_MISS_NUM)
2044         THEN
2045           x_cam_rec.org_id := l_cam_rec.org_id;
2046         END IF;
2047         IF (x_cam_rec.request_id = OKL_API.G_MISS_NUM)
2048         THEN
2049           x_cam_rec.request_id := l_cam_rec.request_id;
2050         END IF;
2051         IF (x_cam_rec.program_application_id = OKL_API.G_MISS_NUM)
2052         THEN
2053           x_cam_rec.program_application_id := l_cam_rec.program_application_id;
2054         END IF;
2055         IF (x_cam_rec.program_id = OKL_API.G_MISS_NUM)
2056         THEN
2057           x_cam_rec.program_id := l_cam_rec.program_id;
2058         END IF;
2059         IF (x_cam_rec.program_update_date = OKL_API.G_MISS_DATE)
2060         THEN
2061           x_cam_rec.program_update_date := l_cam_rec.program_update_date;
2062         END IF;
2063         IF (x_cam_rec.attribute_category = OKL_API.G_MISS_CHAR)
2064         THEN
2065           x_cam_rec.attribute_category := l_cam_rec.attribute_category;
2066         END IF;
2067         IF (x_cam_rec.attribute1 = OKL_API.G_MISS_CHAR)
2068         THEN
2069           x_cam_rec.attribute1 := l_cam_rec.attribute1;
2070         END IF;
2071         IF (x_cam_rec.attribute2 = OKL_API.G_MISS_CHAR)
2072         THEN
2073           x_cam_rec.attribute2 := l_cam_rec.attribute2;
2074         END IF;
2075         IF (x_cam_rec.attribute3 = OKL_API.G_MISS_CHAR)
2076         THEN
2077           x_cam_rec.attribute3 := l_cam_rec.attribute3;
2078         END IF;
2079         IF (x_cam_rec.attribute4 = OKL_API.G_MISS_CHAR)
2080         THEN
2081           x_cam_rec.attribute4 := l_cam_rec.attribute4;
2082         END IF;
2083         IF (x_cam_rec.attribute5 = OKL_API.G_MISS_CHAR)
2084         THEN
2085           x_cam_rec.attribute5 := l_cam_rec.attribute5;
2086         END IF;
2087         IF (x_cam_rec.attribute6 = OKL_API.G_MISS_CHAR)
2088         THEN
2089           x_cam_rec.attribute6 := l_cam_rec.attribute6;
2090         END IF;
2091         IF (x_cam_rec.attribute7 = OKL_API.G_MISS_CHAR)
2092         THEN
2093           x_cam_rec.attribute7 := l_cam_rec.attribute7;
2094         END IF;
2095         IF (x_cam_rec.attribute8 = OKL_API.G_MISS_CHAR)
2096         THEN
2097           x_cam_rec.attribute8 := l_cam_rec.attribute8;
2098         END IF;
2099         IF (x_cam_rec.attribute9 = OKL_API.G_MISS_CHAR)
2100         THEN
2101           x_cam_rec.attribute9 := l_cam_rec.attribute9;
2102         END IF;
2103         IF (x_cam_rec.attribute10 = OKL_API.G_MISS_CHAR)
2104         THEN
2105           x_cam_rec.attribute10 := l_cam_rec.attribute10;
2106         END IF;
2107         IF (x_cam_rec.attribute11 = OKL_API.G_MISS_CHAR)
2108         THEN
2109           x_cam_rec.attribute11 := l_cam_rec.attribute11;
2110         END IF;
2111         IF (x_cam_rec.attribute12 = OKL_API.G_MISS_CHAR)
2112         THEN
2113           x_cam_rec.attribute12 := l_cam_rec.attribute12;
2114         END IF;
2115         IF (x_cam_rec.attribute13 = OKL_API.G_MISS_CHAR)
2116         THEN
2117           x_cam_rec.attribute13 := l_cam_rec.attribute13;
2118         END IF;
2119         IF (x_cam_rec.attribute14 = OKL_API.G_MISS_CHAR)
2120         THEN
2121           x_cam_rec.attribute14 := l_cam_rec.attribute14;
2122         END IF;
2123         IF (x_cam_rec.attribute15 = OKL_API.G_MISS_CHAR)
2124         THEN
2125           x_cam_rec.attribute15 := l_cam_rec.attribute15;
2126         END IF;
2127         IF (x_cam_rec.created_by = OKL_API.G_MISS_NUM)
2128         THEN
2129           x_cam_rec.created_by := l_cam_rec.created_by;
2130         END IF;
2131         IF (x_cam_rec.creation_date = OKL_API.G_MISS_DATE)
2132         THEN
2133           x_cam_rec.creation_date := l_cam_rec.creation_date;
2134         END IF;
2135         IF (x_cam_rec.last_updated_by = OKL_API.G_MISS_NUM)
2136         THEN
2137           x_cam_rec.last_updated_by := l_cam_rec.last_updated_by;
2138         END IF;
2139         IF (x_cam_rec.last_update_date = OKL_API.G_MISS_DATE)
2140         THEN
2141           x_cam_rec.last_update_date := l_cam_rec.last_update_date;
2142         END IF;
2143         IF (x_cam_rec.last_update_login = OKL_API.G_MISS_NUM)
2144         THEN
2145           x_cam_rec.last_update_login := l_cam_rec.last_update_login;
2146         END IF;
2147         IF (x_cam_rec.NEGOTIATED_AMOUNT = OKL_API.G_MISS_NUM)
2148         THEN
2149           x_cam_rec.NEGOTIATED_AMOUNT := l_cam_rec.NEGOTIATED_AMOUNT;
2150         END IF;
2151         IF (x_cam_rec.RECEIVED_AMOUNT = OKL_API.G_MISS_NUM)
2152         THEN
2153           x_cam_rec.RECEIVED_AMOUNT := l_cam_rec.RECEIVED_AMOUNT;
2154         END IF;
2155         IF (x_cam_rec.DELINQUENT_AMOUNT = OKL_API.G_MISS_NUM)
2156         THEN
2157           x_cam_rec.DELINQUENT_AMOUNT := l_cam_rec.DELINQUENT_AMOUNT;
2158         END IF;
2159         IF (x_cam_rec.SHORT_FUND_AMOUNT = OKL_API.G_MISS_NUM)
2160         THEN
2161           x_cam_rec.SHORT_FUND_AMOUNT := l_cam_rec.SHORT_FUND_AMOUNT;
2162         END IF;
2163         IF (x_cam_rec.CRT_ID = OKL_API.G_MISS_NUM)
2164         THEN
2165           x_cam_rec.CRT_ID := l_cam_rec.CRT_ID;
2166         END IF;
2167         IF (x_cam_rec.SHOW_ON_REQUEST = OKL_API.G_MISS_CHAR)
2168         THEN
2169           x_cam_rec.SHOW_ON_REQUEST := l_cam_rec.SHOW_ON_REQUEST;
2170         END IF;
2171         IF (x_cam_rec.SELECTED_ON_REQUEST = OKL_API.G_MISS_CHAR)
2172         THEN
2173           x_cam_rec.SELECTED_ON_REQUEST := l_cam_rec.SELECTED_ON_REQUEST;
2174         END IF;
2175 
2176         IF (x_cam_rec.QTE_ID = OKL_API.G_MISS_NUM)
2177         THEN
2178           x_cam_rec.QTE_ID := l_cam_rec.QTE_ID;
2179         END IF;
2180 
2181         IF (x_cam_rec.PROCESS = OKL_API.G_MISS_CHAR)
2182         THEN
2183           x_cam_rec.PROCESS := l_cam_rec.PROCESS;
2184         END IF;
2185       END IF;
2186       RETURN(l_return_status);
2187     END populate_new_record;
2188     -----------------------------------------
2189     -- Set_Attributes for:OKL_CURE_AMOUNTS --
2190     -----------------------------------------
2191     FUNCTION Set_Attributes (
2192       p_cam_rec IN cam_rec_type,
2193       x_cam_rec OUT NOCOPY cam_rec_type
2194     ) RETURN VARCHAR2 IS
2195       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2196     BEGIN
2197       x_cam_rec := p_cam_rec;
2198       x_cam_rec.OBJECT_VERSION_NUMBER := p_cam_rec.OBJECT_VERSION_NUMBER + 1;
2199       RETURN(l_return_status);
2200     END Set_Attributes;
2201   BEGIN
2202     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
2203                                               p_init_msg_list,
2204                                               '_PVT',
2205                                               x_return_status);
2206     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2207       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2208     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2209       RAISE OKL_API.G_EXCEPTION_ERROR;
2210     END IF;
2211     --- Setting item attributes
2212     l_return_status := Set_Attributes(
2213       p_cam_rec,                         -- IN
2214       l_cam_rec);                        -- OUT
2215     --- If any errors happen abort API
2216     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2217       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2218     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2219       RAISE OKL_API.G_EXCEPTION_ERROR;
2220     END IF;
2221     l_return_status := populate_new_record(l_cam_rec, l_def_cam_rec);
2222     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2223       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2224     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2225       RAISE OKL_API.G_EXCEPTION_ERROR;
2226     END IF;
2227     UPDATE OKL_CURE_AMOUNTS
2228     SET CHR_ID = l_def_cam_rec.chr_id,
2229         CURE_TYPE = l_def_cam_rec.cure_type,
2230         CURE_AMOUNT = l_def_cam_rec.cure_amount,
2231         REPURCHASE_AMOUNT = l_def_cam_rec.repurchase_amount,
2232         EFFECTIVE_DATE = l_def_cam_rec.effective_date,
2233         TIMES_CURED = l_def_cam_rec.times_cured,
2234         PAYMENTS_REMAINING = l_def_cam_rec.payments_remaining,
2235         ELIGIBLE_CURE_AMOUNT = l_def_cam_rec.eligible_cure_amount,
2236         OUTSTANDING_AMOUNT = l_def_cam_rec.outstanding_amount,
2237         PAST_DUE_AMOUNT = l_def_cam_rec.past_due_amount,
2238         CURES_IN_POSSESSION = l_def_cam_rec.cures_in_possession,
2239         STATUS = l_def_cam_rec.status,
2240         OBJECT_VERSION_NUMBER = l_def_cam_rec.object_version_number,
2241         ORG_ID = l_def_cam_rec.org_id,
2242         REQUEST_ID = l_def_cam_rec.request_id,
2243         PROGRAM_APPLICATION_ID = l_def_cam_rec.program_application_id,
2244         PROGRAM_ID = l_def_cam_rec.program_id,
2245         PROGRAM_UPDATE_DATE = l_def_cam_rec.program_update_date,
2246         ATTRIBUTE_CATEGORY = l_def_cam_rec.attribute_category,
2247         ATTRIBUTE1 = l_def_cam_rec.attribute1,
2248         ATTRIBUTE2 = l_def_cam_rec.attribute2,
2249         ATTRIBUTE3 = l_def_cam_rec.attribute3,
2250         ATTRIBUTE4 = l_def_cam_rec.attribute4,
2251         ATTRIBUTE5 = l_def_cam_rec.attribute5,
2252         ATTRIBUTE6 = l_def_cam_rec.attribute6,
2253         ATTRIBUTE7 = l_def_cam_rec.attribute7,
2254         ATTRIBUTE8 = l_def_cam_rec.attribute8,
2255         ATTRIBUTE9 = l_def_cam_rec.attribute9,
2256         ATTRIBUTE10 = l_def_cam_rec.attribute10,
2257         ATTRIBUTE11 = l_def_cam_rec.attribute11,
2258         ATTRIBUTE12 = l_def_cam_rec.attribute12,
2259         ATTRIBUTE13 = l_def_cam_rec.attribute13,
2260         ATTRIBUTE14 = l_def_cam_rec.attribute14,
2261         ATTRIBUTE15 = l_def_cam_rec.attribute15,
2262         CREATED_BY = l_def_cam_rec.created_by,
2263         CREATION_DATE = l_def_cam_rec.creation_date,
2264         LAST_UPDATED_BY = l_def_cam_rec.last_updated_by,
2265         LAST_UPDATE_DATE = l_def_cam_rec.last_update_date,
2266         LAST_UPDATE_LOGIN = l_def_cam_rec.last_update_login,
2267         NEGOTIATED_AMOUNT = l_def_cam_rec.NEGOTIATED_AMOUNT,
2268         RECEIVED_AMOUNT = l_def_cam_rec.RECEIVED_AMOUNT,
2269         DELINQUENT_AMOUNT = l_def_cam_rec.DELINQUENT_AMOUNT,
2270         SHORT_FUND_AMOUNT = l_def_cam_rec.SHORT_FUND_AMOUNT,
2271         CRT_ID = l_def_cam_rec.CRT_ID,
2272         SHOW_ON_REQUEST = l_def_cam_rec.SHOW_ON_REQUEST,
2273         SELECTED_ON_REQUEST = l_def_cam_rec.SELECTED_ON_REQUEST,
2274         QTE_ID = l_def_cam_rec.QTE_ID,
2275         PROCESS = l_def_cam_rec.PROCESS
2276     WHERE CURE_AMOUNT_ID = l_def_cam_rec.cure_amount_id;
2277 
2278     x_cam_rec := l_cam_rec;
2279     x_return_status := l_return_status;
2280     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2281   EXCEPTION
2282     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2283       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2284       (
2285         l_api_name,
2286         G_PKG_NAME,
2287         'OKL_API.G_RET_STS_ERROR',
2288         x_msg_count,
2289         x_msg_data,
2290         '_PVT'
2291       );
2292     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2293       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2294       (
2295         l_api_name,
2296         G_PKG_NAME,
2297         'OKL_API.G_RET_STS_UNEXP_ERROR',
2298         x_msg_count,
2299         x_msg_data,
2300         '_PVT'
2301       );
2302     WHEN OTHERS THEN
2303       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2304       (
2305         l_api_name,
2306         G_PKG_NAME,
2307         'OTHERS',
2308         x_msg_count,
2309         x_msg_data,
2310         '_PVT'
2311       );
2312   END update_row;
2313   ---------------------------------------
2314   -- update_row for:OKL_CURE_AMOUNTS_V --
2315   ---------------------------------------
2316   PROCEDURE update_row(
2317     p_api_version                  IN NUMBER,
2318     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2319     x_return_status                OUT NOCOPY VARCHAR2,
2320     x_msg_count                    OUT NOCOPY NUMBER,
2321     x_msg_data                     OUT NOCOPY VARCHAR2,
2322     p_camv_rec                     IN camv_rec_type,
2323     x_camv_rec                     OUT NOCOPY camv_rec_type) IS
2324 
2325     l_api_version                  CONSTANT NUMBER := 1;
2326     l_api_name                     CONSTANT VARCHAR2(30) := 'V_update_row';
2327     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2328     l_camv_rec                     camv_rec_type := p_camv_rec;
2329     l_def_camv_rec                 camv_rec_type;
2330     l_db_camv_rec                  camv_rec_type;
2331     l_cam_rec                      cam_rec_type;
2332     lx_cam_rec                     cam_rec_type;
2333     -------------------------------
2334     -- FUNCTION fill_who_columns --
2335     -------------------------------
2336     FUNCTION fill_who_columns (
2337       p_camv_rec IN camv_rec_type
2338     ) RETURN camv_rec_type IS
2339       l_camv_rec camv_rec_type := p_camv_rec;
2340     BEGIN
2341       l_camv_rec.LAST_UPDATE_DATE := SYSDATE;
2342       l_camv_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
2343       l_camv_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
2344       RETURN(l_camv_rec);
2345     END fill_who_columns;
2346     ----------------------------------
2347     -- FUNCTION populate_new_record --
2348     ----------------------------------
2349     FUNCTION populate_new_record (
2350       p_camv_rec IN camv_rec_type,
2351       x_camv_rec OUT NOCOPY camv_rec_type
2352     ) RETURN VARCHAR2 IS
2353       l_row_notfound                 BOOLEAN := TRUE;
2354       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2355     BEGIN
2356       x_camv_rec := p_camv_rec;
2357       -- Get current database values
2358       -- NOTE: Never assign the OBJECT_VERSION_NUMBER.  Force the user to pass it
2359       --       so it may be verified through LOCK_ROW.
2360       l_db_camv_rec := get_rec(p_camv_rec, l_return_status);
2361       IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
2362         IF (x_camv_rec.cure_amount_id = OKL_API.G_MISS_NUM)
2363         THEN
2364           x_camv_rec.cure_amount_id := l_db_camv_rec.cure_amount_id;
2365         END IF;
2366         IF (x_camv_rec.chr_id = OKL_API.G_MISS_NUM)
2367         THEN
2368           x_camv_rec.chr_id := l_db_camv_rec.chr_id;
2369         END IF;
2370         IF (x_camv_rec.cure_type = OKL_API.G_MISS_CHAR)
2371         THEN
2372           x_camv_rec.cure_type := l_db_camv_rec.cure_type;
2373         END IF;
2374         IF (x_camv_rec.cure_amount = OKL_API.G_MISS_NUM)
2375         THEN
2376           x_camv_rec.cure_amount := l_db_camv_rec.cure_amount;
2377         END IF;
2378         IF (x_camv_rec.repurchase_amount = OKL_API.G_MISS_NUM)
2379         THEN
2380           x_camv_rec.repurchase_amount := l_db_camv_rec.repurchase_amount;
2381         END IF;
2382         IF (x_camv_rec.effective_date = OKL_API.G_MISS_DATE)
2383         THEN
2384           x_camv_rec.effective_date := l_db_camv_rec.effective_date;
2385         END IF;
2386         IF (x_camv_rec.times_cured = OKL_API.G_MISS_NUM)
2387         THEN
2388           x_camv_rec.times_cured := l_db_camv_rec.times_cured;
2389         END IF;
2390         IF (x_camv_rec.payments_remaining = OKL_API.G_MISS_NUM)
2391         THEN
2392           x_camv_rec.payments_remaining := l_db_camv_rec.payments_remaining;
2393         END IF;
2394         IF (x_camv_rec.eligible_cure_amount = OKL_API.G_MISS_NUM)
2395         THEN
2396           x_camv_rec.eligible_cure_amount := l_db_camv_rec.eligible_cure_amount;
2397         END IF;
2398         IF (x_camv_rec.outstanding_amount = OKL_API.G_MISS_NUM)
2399         THEN
2400           x_camv_rec.outstanding_amount := l_db_camv_rec.outstanding_amount;
2401         END IF;
2402         IF (x_camv_rec.past_due_amount = OKL_API.G_MISS_NUM)
2403         THEN
2404           x_camv_rec.past_due_amount := l_db_camv_rec.past_due_amount;
2405         END IF;
2406         IF (x_camv_rec.cures_in_possession = OKL_API.G_MISS_NUM)
2407         THEN
2408           x_camv_rec.cures_in_possession := l_db_camv_rec.cures_in_possession;
2409         END IF;
2410         IF (x_camv_rec.status = OKL_API.G_MISS_CHAR)
2411         THEN
2412           x_camv_rec.status := l_db_camv_rec.status;
2413         END IF;
2414         IF (x_camv_rec.org_id = OKL_API.G_MISS_NUM)
2415         THEN
2416           x_camv_rec.org_id := l_db_camv_rec.org_id;
2417         END IF;
2418         IF (x_camv_rec.request_id = OKL_API.G_MISS_NUM)
2419         THEN
2420           x_camv_rec.request_id := l_db_camv_rec.request_id;
2421         END IF;
2422         IF (x_camv_rec.program_application_id = OKL_API.G_MISS_NUM)
2423         THEN
2424           x_camv_rec.program_application_id := l_db_camv_rec.program_application_id;
2425         END IF;
2426         IF (x_camv_rec.program_id = OKL_API.G_MISS_NUM)
2427         THEN
2428           x_camv_rec.program_id := l_db_camv_rec.program_id;
2429         END IF;
2430         IF (x_camv_rec.program_update_date = OKL_API.G_MISS_DATE)
2431         THEN
2432           x_camv_rec.program_update_date := l_db_camv_rec.program_update_date;
2433         END IF;
2434         IF (x_camv_rec.attribute_category = OKL_API.G_MISS_CHAR)
2435         THEN
2436           x_camv_rec.attribute_category := l_db_camv_rec.attribute_category;
2437         END IF;
2438         IF (x_camv_rec.attribute1 = OKL_API.G_MISS_CHAR)
2439         THEN
2440           x_camv_rec.attribute1 := l_db_camv_rec.attribute1;
2441         END IF;
2442         IF (x_camv_rec.attribute2 = OKL_API.G_MISS_CHAR)
2443         THEN
2444           x_camv_rec.attribute2 := l_db_camv_rec.attribute2;
2445         END IF;
2446         IF (x_camv_rec.attribute3 = OKL_API.G_MISS_CHAR)
2447         THEN
2448           x_camv_rec.attribute3 := l_db_camv_rec.attribute3;
2449         END IF;
2450         IF (x_camv_rec.attribute4 = OKL_API.G_MISS_CHAR)
2451         THEN
2452           x_camv_rec.attribute4 := l_db_camv_rec.attribute4;
2453         END IF;
2454         IF (x_camv_rec.attribute5 = OKL_API.G_MISS_CHAR)
2455         THEN
2456           x_camv_rec.attribute5 := l_db_camv_rec.attribute5;
2457         END IF;
2458         IF (x_camv_rec.attribute6 = OKL_API.G_MISS_CHAR)
2459         THEN
2460           x_camv_rec.attribute6 := l_db_camv_rec.attribute6;
2461         END IF;
2462         IF (x_camv_rec.attribute7 = OKL_API.G_MISS_CHAR)
2463         THEN
2464           x_camv_rec.attribute7 := l_db_camv_rec.attribute7;
2465         END IF;
2466         IF (x_camv_rec.attribute8 = OKL_API.G_MISS_CHAR)
2467         THEN
2468           x_camv_rec.attribute8 := l_db_camv_rec.attribute8;
2469         END IF;
2470         IF (x_camv_rec.attribute9 = OKL_API.G_MISS_CHAR)
2471         THEN
2472           x_camv_rec.attribute9 := l_db_camv_rec.attribute9;
2473         END IF;
2474         IF (x_camv_rec.attribute10 = OKL_API.G_MISS_CHAR)
2475         THEN
2476           x_camv_rec.attribute10 := l_db_camv_rec.attribute10;
2477         END IF;
2478         IF (x_camv_rec.attribute11 = OKL_API.G_MISS_CHAR)
2479         THEN
2480           x_camv_rec.attribute11 := l_db_camv_rec.attribute11;
2481         END IF;
2482         IF (x_camv_rec.attribute12 = OKL_API.G_MISS_CHAR)
2483         THEN
2484           x_camv_rec.attribute12 := l_db_camv_rec.attribute12;
2485         END IF;
2486         IF (x_camv_rec.attribute13 = OKL_API.G_MISS_CHAR)
2487         THEN
2488           x_camv_rec.attribute13 := l_db_camv_rec.attribute13;
2489         END IF;
2490         IF (x_camv_rec.attribute14 = OKL_API.G_MISS_CHAR)
2491         THEN
2492           x_camv_rec.attribute14 := l_db_camv_rec.attribute14;
2493         END IF;
2494         IF (x_camv_rec.attribute15 = OKL_API.G_MISS_CHAR)
2495         THEN
2496           x_camv_rec.attribute15 := l_db_camv_rec.attribute15;
2497         END IF;
2498         IF (x_camv_rec.created_by = OKL_API.G_MISS_NUM)
2499         THEN
2500           x_camv_rec.created_by := l_db_camv_rec.created_by;
2501         END IF;
2502         IF (x_camv_rec.creation_date = OKL_API.G_MISS_DATE)
2503         THEN
2504           x_camv_rec.creation_date := l_db_camv_rec.creation_date;
2505         END IF;
2506         IF (x_camv_rec.last_updated_by = OKL_API.G_MISS_NUM)
2507         THEN
2508           x_camv_rec.last_updated_by := l_db_camv_rec.last_updated_by;
2509         END IF;
2510         IF (x_camv_rec.last_update_date = OKL_API.G_MISS_DATE)
2511         THEN
2512           x_camv_rec.last_update_date := l_db_camv_rec.last_update_date;
2513         END IF;
2514         IF (x_camv_rec.last_update_login = OKL_API.G_MISS_NUM)
2515         THEN
2516           x_camv_rec.last_update_login := l_db_camv_rec.last_update_login;
2517         END IF;
2518         IF (x_camv_rec.NEGOTIATED_AMOUNT = OKL_API.G_MISS_NUM)
2519         THEN
2520           x_camv_rec.NEGOTIATED_AMOUNT := l_db_camv_rec.NEGOTIATED_AMOUNT;
2521         END IF;
2522         IF (x_camv_rec.RECEIVED_AMOUNT = OKL_API.G_MISS_NUM)
2523         THEN
2524           x_camv_rec.RECEIVED_AMOUNT := l_db_camv_rec.RECEIVED_AMOUNT;
2525         END IF;
2526         IF (x_camv_rec.DELINQUENT_AMOUNT = OKL_API.G_MISS_NUM)
2527         THEN
2528           x_camv_rec.DELINQUENT_AMOUNT := l_db_camv_rec.DELINQUENT_AMOUNT;
2529         END IF;
2530 
2531         IF (x_camv_rec.SHORT_FUND_AMOUNT = OKL_API.G_MISS_NUM)
2532         THEN
2533           x_camv_rec.SHORT_FUND_AMOUNT := l_db_camv_rec.SHORT_FUND_AMOUNT;
2534         END IF;
2535         IF (x_camv_rec.CRT_ID = OKL_API.G_MISS_NUM)
2536         THEN
2537           x_camv_rec.CRT_ID := l_db_camv_rec.CRT_ID;
2538         END IF;
2539         IF (x_camv_rec.SHOW_ON_REQUEST = OKL_API.G_MISS_CHAR)
2540         THEN
2541           x_camv_rec.SHOW_ON_REQUEST := l_db_camv_rec.SHOW_ON_REQUEST;
2542         END IF;
2543         IF (x_camv_rec.SELECTED_ON_REQUEST = OKL_API.G_MISS_CHAR)
2544         THEN
2545           x_camv_rec.SELECTED_ON_REQUEST := l_db_camv_rec.SELECTED_ON_REQUEST;
2546         END IF;
2547 
2548         IF (x_camv_rec.QTE_ID= OKL_API.G_MISS_NUM)
2549         THEN
2550           x_camv_rec.QTE_ID:= l_db_camv_rec.QTE_ID;
2551         END IF;
2552 
2553         IF (x_camv_rec.PROCESS= OKL_API.G_MISS_CHAR)
2554         THEN
2555           x_camv_rec.PROCESS := l_db_camv_rec.PROCESS;
2556         END IF;
2557       END IF;
2558       RETURN(l_return_status);
2559     END populate_new_record;
2560     -------------------------------------------
2561     -- Set_Attributes for:OKL_CURE_AMOUNTS_V --
2562     -------------------------------------------
2563     FUNCTION Set_Attributes (
2564       p_camv_rec IN camv_rec_type,
2565       x_camv_rec OUT NOCOPY camv_rec_type
2566     ) RETURN VARCHAR2 IS
2567       l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2568     BEGIN
2569       x_camv_rec := p_camv_rec;
2570       RETURN(l_return_status);
2571     END Set_Attributes;
2572   BEGIN
2573     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
2574                                               G_PKG_NAME,
2575                                               p_init_msg_list,
2576                                               l_api_version,
2577                                               p_api_version,
2578                                               '_PVT',
2579                                               x_return_status);
2580     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2581       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2582     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2583       RAISE OKL_API.G_EXCEPTION_ERROR;
2584     END IF;
2585     --- Setting item attributes
2586     l_return_status := Set_Attributes(
2587       p_camv_rec,                        -- IN
2588       x_camv_rec);                       -- OUT
2589     --- If any errors happen abort API
2590     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2591       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2592     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2593       RAISE OKL_API.G_EXCEPTION_ERROR;
2594     END IF;
2595     l_return_status := populate_new_record(l_camv_rec, l_def_camv_rec);
2596     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2597       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2598     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2599       RAISE OKL_API.G_EXCEPTION_ERROR;
2600     END IF;
2601     l_def_camv_rec := fill_who_columns(l_def_camv_rec);
2602     --- Validate all non-missing attributes (Item Level Validation)
2603     l_return_status := Validate_Attributes(l_def_camv_rec);
2604     --- If any errors happen abort API
2605     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2606       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2607     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2608       RAISE OKL_API.G_EXCEPTION_ERROR;
2609     END IF;
2610     l_return_status := Validate_Record(l_def_camv_rec, l_db_camv_rec);
2611     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2612       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2613     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2614       RAISE OKL_API.G_EXCEPTION_ERROR;
2615     END IF;
2616 
2617     -- Lock the Record
2618     lock_row(
2619       p_api_version                  => p_api_version,
2620       p_init_msg_list                => p_init_msg_list,
2621       x_return_status                => l_return_status,
2622       x_msg_count                    => x_msg_count,
2623       x_msg_data                     => x_msg_data,
2624       p_camv_rec                     => p_camv_rec);
2625     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2626       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2627     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2628       RAISE OKL_API.G_EXCEPTION_ERROR;
2629     END IF;
2630 
2631     -----------------------------------------
2632     -- Move VIEW record to "Child" records --
2633     -----------------------------------------
2634     migrate(l_def_camv_rec, l_cam_rec);
2635     -----------------------------------------------
2636     -- Call the UPDATE_ROW for each child record --
2637     -----------------------------------------------
2638     update_row(
2639       p_init_msg_list,
2640       l_return_status,
2641       x_msg_count,
2642       x_msg_data,
2643       l_cam_rec,
2644       lx_cam_rec
2645     );
2646     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2647       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2648     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2649       RAISE OKL_API.G_EXCEPTION_ERROR;
2650     END IF;
2651     migrate(lx_cam_rec, l_def_camv_rec);
2652     x_camv_rec := l_def_camv_rec;
2653     x_return_status := l_return_status;
2654     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2655   EXCEPTION
2656     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2657       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2658       (
2659         l_api_name,
2660         G_PKG_NAME,
2661         'OKL_API.G_RET_STS_ERROR',
2662         x_msg_count,
2663         x_msg_data,
2664         '_PVT'
2665       );
2666     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2667       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2668       (
2669         l_api_name,
2670         G_PKG_NAME,
2671         'OKL_API.G_RET_STS_UNEXP_ERROR',
2672         x_msg_count,
2673         x_msg_data,
2674         '_PVT'
2675       );
2676     WHEN OTHERS THEN
2677       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2678       (
2679         l_api_name,
2680         G_PKG_NAME,
2681         'OTHERS',
2682         x_msg_count,
2683         x_msg_data,
2684         '_PVT'
2685       );
2686   END update_row;
2687   ----------------------------------------
2688   -- PL/SQL TBL update_row for:camv_tbl --
2689   ----------------------------------------
2690   PROCEDURE update_row(
2691     p_api_version                  IN NUMBER,
2692     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2693     x_return_status                OUT NOCOPY VARCHAR2,
2694     x_msg_count                    OUT NOCOPY NUMBER,
2695     x_msg_data                     OUT NOCOPY VARCHAR2,
2696     p_camv_tbl                     IN camv_tbl_type,
2697     x_camv_tbl                     OUT NOCOPY camv_tbl_type,
2698     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
2699 
2700     l_api_version                  CONSTANT NUMBER := 1;
2701     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_update_row';
2702     i                              NUMBER := 0;
2703   BEGIN
2704     OKL_API.init_msg_list(p_init_msg_list);
2705     -- Make sure PL/SQL table has records in it before passing
2706     IF (p_camv_tbl.COUNT > 0) THEN
2707       i := p_camv_tbl.FIRST;
2708       LOOP
2709         DECLARE
2710           l_error_rec         OKL_API.ERROR_REC_TYPE;
2711         BEGIN
2712           l_error_rec.api_name := l_api_name;
2713           l_error_rec.api_package := G_PKG_NAME;
2714           l_error_rec.idx := i;
2715           update_row (
2716             p_api_version                  => p_api_version,
2717             p_init_msg_list                => OKL_API.G_FALSE,
2718             x_return_status                => l_error_rec.error_type,
2719             x_msg_count                    => l_error_rec.msg_count,
2720             x_msg_data                     => l_error_rec.msg_data,
2721             p_camv_rec                     => p_camv_tbl(i),
2722             x_camv_rec                     => x_camv_tbl(i));
2723           IF (l_error_rec.error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
2724             l_error_rec.sqlcode := SQLCODE;
2725             load_error_tbl(l_error_rec, px_error_tbl);
2726           ELSE
2727             x_msg_count := l_error_rec.msg_count;
2728             x_msg_data := l_error_rec.msg_data;
2729           END IF;
2730         EXCEPTION
2731           WHEN OKL_API.G_EXCEPTION_ERROR THEN
2732             l_error_rec.error_type := OKL_API.G_RET_STS_ERROR;
2733             l_error_rec.sqlcode := SQLCODE;
2734             load_error_tbl(l_error_rec, px_error_tbl);
2735           WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2736             l_error_rec.error_type := OKL_API.G_RET_STS_UNEXP_ERROR;
2737             l_error_rec.sqlcode := SQLCODE;
2738             load_error_tbl(l_error_rec, px_error_tbl);
2739           WHEN OTHERS THEN
2740             l_error_rec.error_type := 'OTHERS';
2741             l_error_rec.sqlcode := SQLCODE;
2742             load_error_tbl(l_error_rec, px_error_tbl);
2743         END;
2744         EXIT WHEN (i = p_camv_tbl.LAST);
2745         i := p_camv_tbl.NEXT(i);
2746       END LOOP;
2747     END IF;
2748     -- Loop through the error_tbl to find the error with the highest severity
2749     -- and return it.
2750     x_return_status := find_highest_exception(px_error_tbl);
2751     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2752   EXCEPTION
2753     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2754       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2755       (
2756         l_api_name,
2757         G_PKG_NAME,
2758         'OKL_API.G_RET_STS_ERROR',
2759         x_msg_count,
2760         x_msg_data,
2761         '_PVT'
2762       );
2763     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2764       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2765       (
2766         l_api_name,
2767         G_PKG_NAME,
2768         'OKL_API.G_RET_STS_UNEXP_ERROR',
2769         x_msg_count,
2770         x_msg_data,
2771         '_PVT'
2772       );
2773     WHEN OTHERS THEN
2774       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2775       (
2776         l_api_name,
2777         G_PKG_NAME,
2778         'OTHERS',
2779         x_msg_count,
2780         x_msg_data,
2781         '_PVT'
2782       );
2783   END update_row;
2784 
2785   ----------------------------------------
2786   -- PL/SQL TBL update_row for:CAMV_TBL --
2787   ----------------------------------------
2788   PROCEDURE update_row(
2789     p_api_version                  IN NUMBER,
2790     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2791     x_return_status                OUT NOCOPY VARCHAR2,
2792     x_msg_count                    OUT NOCOPY NUMBER,
2793     x_msg_data                     OUT NOCOPY VARCHAR2,
2794     p_camv_tbl                     IN camv_tbl_type,
2795     x_camv_tbl                     OUT NOCOPY camv_tbl_type) IS
2796 
2797     l_api_version                  CONSTANT NUMBER := 1;
2798     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_update_row';
2799     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2800     l_error_tbl                    OKL_API.ERROR_TBL_TYPE;
2801   BEGIN
2802     OKL_API.init_msg_list(p_init_msg_list);
2803     -- Make sure PL/SQL table has records in it before passing
2804     IF (p_camv_tbl.COUNT > 0) THEN
2805       update_row (
2806         p_api_version                  => p_api_version,
2807         p_init_msg_list                => OKL_API.G_FALSE,
2808         x_return_status                => x_return_status,
2809         x_msg_count                    => x_msg_count,
2810         x_msg_data                     => x_msg_data,
2811         p_camv_tbl                     => p_camv_tbl,
2812         x_camv_tbl                     => x_camv_tbl,
2813         px_error_tbl                   => l_error_tbl);
2814     END IF;
2815     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2816   EXCEPTION
2817     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2818       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2819       (
2820         l_api_name,
2821         G_PKG_NAME,
2822         'OKL_API.G_RET_STS_ERROR',
2823         x_msg_count,
2824         x_msg_data,
2825         '_PVT'
2826       );
2827     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2828       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2829       (
2830         l_api_name,
2831         G_PKG_NAME,
2832         'OKL_API.G_RET_STS_UNEXP_ERROR',
2833         x_msg_count,
2834         x_msg_data,
2835         '_PVT'
2836       );
2837     WHEN OTHERS THEN
2838       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2839       (
2840         l_api_name,
2841         G_PKG_NAME,
2842         'OTHERS',
2843         x_msg_count,
2844         x_msg_data,
2845         '_PVT'
2846       );
2847   END update_row;
2848 
2849   ---------------------------------------------------------------------------
2850   -- PROCEDURE delete_row
2851   ---------------------------------------------------------------------------
2852   -------------------------------------
2853   -- delete_row for:OKL_CURE_AMOUNTS --
2854   -------------------------------------
2855   PROCEDURE delete_row(
2856     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2857     x_return_status                OUT NOCOPY VARCHAR2,
2858     x_msg_count                    OUT NOCOPY NUMBER,
2859     x_msg_data                     OUT NOCOPY VARCHAR2,
2860     p_cam_rec                      IN cam_rec_type) IS
2861 
2862     l_api_version                  CONSTANT NUMBER := 1;
2863     l_api_name                     CONSTANT VARCHAR2(30) := 'B_delete_row';
2864     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2865     l_cam_rec                      cam_rec_type := p_cam_rec;
2866     l_row_notfound                 BOOLEAN := TRUE;
2867   BEGIN
2868     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
2869                                               p_init_msg_list,
2870                                               '_PVT',
2871                                               x_return_status);
2872     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2873       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2874     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2875       RAISE OKL_API.G_EXCEPTION_ERROR;
2876     END IF;
2877 
2878     DELETE FROM OKL_CURE_AMOUNTS
2879      WHERE CURE_AMOUNT_ID = p_cam_rec.cure_amount_id;
2880 
2881     x_return_status := l_return_status;
2882     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2883   EXCEPTION
2884     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2885       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2886       (
2887         l_api_name,
2888         G_PKG_NAME,
2889         'OKL_API.G_RET_STS_ERROR',
2890         x_msg_count,
2891         x_msg_data,
2892         '_PVT'
2893       );
2894     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2895       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2896       (
2897         l_api_name,
2898         G_PKG_NAME,
2899         'OKL_API.G_RET_STS_UNEXP_ERROR',
2900         x_msg_count,
2901         x_msg_data,
2902         '_PVT'
2903       );
2904     WHEN OTHERS THEN
2905       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2906       (
2907         l_api_name,
2908         G_PKG_NAME,
2909         'OTHERS',
2910         x_msg_count,
2911         x_msg_data,
2912         '_PVT'
2913       );
2914   END delete_row;
2915   ---------------------------------------
2916   -- delete_row for:OKL_CURE_AMOUNTS_V --
2917   ---------------------------------------
2918   PROCEDURE delete_row(
2919     p_api_version                  IN NUMBER,
2920     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2921     x_return_status                OUT NOCOPY VARCHAR2,
2922     x_msg_count                    OUT NOCOPY NUMBER,
2923     x_msg_data                     OUT NOCOPY VARCHAR2,
2924     p_camv_rec                     IN camv_rec_type) IS
2925 
2926     l_api_version                  CONSTANT NUMBER := 1;
2927     l_api_name                     CONSTANT VARCHAR2(30) := 'V_delete_row';
2928     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2929     l_camv_rec                     camv_rec_type := p_camv_rec;
2930     l_cam_rec                      cam_rec_type;
2931   BEGIN
2932     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
2933                                               G_PKG_NAME,
2934                                               p_init_msg_list,
2935                                               l_api_version,
2936                                               p_api_version,
2937                                               '_PVT',
2938                                               x_return_status);
2939     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2940       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2941     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2942       RAISE OKL_API.G_EXCEPTION_ERROR;
2943     END IF;
2944     -----------------------------------------
2945     -- Move VIEW record to "Child" records --
2946     -----------------------------------------
2947     migrate(l_camv_rec, l_cam_rec);
2948     -----------------------------------------------
2949     -- Call the DELETE_ROW for each child record --
2950     -----------------------------------------------
2951     delete_row(
2952       p_init_msg_list,
2953       l_return_status,
2954       x_msg_count,
2955       x_msg_data,
2956       l_cam_rec
2957     );
2958     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2959       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2960     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2961       RAISE OKL_API.G_EXCEPTION_ERROR;
2962     END IF;
2963     x_return_status := l_return_status;
2964     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
2965   EXCEPTION
2966     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2967       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2968       (
2969         l_api_name,
2970         G_PKG_NAME,
2971         'OKL_API.G_RET_STS_ERROR',
2972         x_msg_count,
2973         x_msg_data,
2974         '_PVT'
2975       );
2976     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2977       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2978       (
2979         l_api_name,
2980         G_PKG_NAME,
2981         'OKL_API.G_RET_STS_UNEXP_ERROR',
2982         x_msg_count,
2983         x_msg_data,
2984         '_PVT'
2985       );
2986     WHEN OTHERS THEN
2987       x_return_status := OKL_API.HANDLE_EXCEPTIONS
2988       (
2989         l_api_name,
2990         G_PKG_NAME,
2991         'OTHERS',
2992         x_msg_count,
2993         x_msg_data,
2994         '_PVT'
2995       );
2996   END delete_row;
2997   --------------------------------------------------
2998   -- PL/SQL TBL delete_row for:OKL_CURE_AMOUNTS_V --
2999   --------------------------------------------------
3000   PROCEDURE delete_row(
3001     p_api_version                  IN NUMBER,
3002     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3003     x_return_status                OUT NOCOPY VARCHAR2,
3004     x_msg_count                    OUT NOCOPY NUMBER,
3005     x_msg_data                     OUT NOCOPY VARCHAR2,
3006     p_camv_tbl                     IN camv_tbl_type,
3007     px_error_tbl                   IN OUT NOCOPY OKL_API.ERROR_TBL_TYPE) IS
3008 
3009     l_api_version                  CONSTANT NUMBER := 1;
3010     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_delete_row';
3011     i                              NUMBER := 0;
3012   BEGIN
3013     OKL_API.init_msg_list(p_init_msg_list);
3014     -- Make sure PL/SQL table has records in it before passing
3015     IF (p_camv_tbl.COUNT > 0) THEN
3016       i := p_camv_tbl.FIRST;
3017       LOOP
3018         DECLARE
3019           l_error_rec         OKL_API.ERROR_REC_TYPE;
3020         BEGIN
3021           l_error_rec.api_name := l_api_name;
3022           l_error_rec.api_package := G_PKG_NAME;
3023           l_error_rec.idx := i;
3024           delete_row (
3025             p_api_version                  => p_api_version,
3026             p_init_msg_list                => OKL_API.G_FALSE,
3027             x_return_status                => l_error_rec.error_type,
3028             x_msg_count                    => l_error_rec.msg_count,
3029             x_msg_data                     => l_error_rec.msg_data,
3030             p_camv_rec                     => p_camv_tbl(i));
3031           IF (l_error_rec.error_type <> OKL_API.G_RET_STS_SUCCESS) THEN
3032             l_error_rec.sqlcode := SQLCODE;
3033             load_error_tbl(l_error_rec, px_error_tbl);
3034           ELSE
3035             x_msg_count := l_error_rec.msg_count;
3036             x_msg_data := l_error_rec.msg_data;
3037           END IF;
3038         EXCEPTION
3039           WHEN OKL_API.G_EXCEPTION_ERROR THEN
3040             l_error_rec.error_type := OKL_API.G_RET_STS_ERROR;
3041             l_error_rec.sqlcode := SQLCODE;
3042             load_error_tbl(l_error_rec, px_error_tbl);
3043           WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3044             l_error_rec.error_type := OKL_API.G_RET_STS_UNEXP_ERROR;
3045             l_error_rec.sqlcode := SQLCODE;
3046             load_error_tbl(l_error_rec, px_error_tbl);
3047           WHEN OTHERS THEN
3048             l_error_rec.error_type := 'OTHERS';
3049             l_error_rec.sqlcode := SQLCODE;
3050             load_error_tbl(l_error_rec, px_error_tbl);
3051         END;
3052         EXIT WHEN (i = p_camv_tbl.LAST);
3053         i := p_camv_tbl.NEXT(i);
3054       END LOOP;
3055     END IF;
3056     -- Loop through the error_tbl to find the error with the highest severity
3057     -- and return it.
3058     x_return_status := find_highest_exception(px_error_tbl);
3059     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3060   EXCEPTION
3061     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3062       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3063       (
3064         l_api_name,
3065         G_PKG_NAME,
3066         'OKL_API.G_RET_STS_ERROR',
3067         x_msg_count,
3068         x_msg_data,
3069         '_PVT'
3070       );
3071     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3072       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3073       (
3074         l_api_name,
3075         G_PKG_NAME,
3076         'OKL_API.G_RET_STS_UNEXP_ERROR',
3077         x_msg_count,
3078         x_msg_data,
3079         '_PVT'
3080       );
3081     WHEN OTHERS THEN
3082       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3083       (
3084         l_api_name,
3085         G_PKG_NAME,
3086         'OTHERS',
3087         x_msg_count,
3088         x_msg_data,
3089         '_PVT'
3090       );
3091   END delete_row;
3092 
3093   --------------------------------------------------
3094   -- PL/SQL TBL delete_row for:OKL_CURE_AMOUNTS_V --
3095   --------------------------------------------------
3096   PROCEDURE delete_row(
3097     p_api_version                  IN NUMBER,
3098     p_init_msg_list                IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3099     x_return_status                OUT NOCOPY VARCHAR2,
3100     x_msg_count                    OUT NOCOPY NUMBER,
3101     x_msg_data                     OUT NOCOPY VARCHAR2,
3102     p_camv_tbl                     IN camv_tbl_type) IS
3103 
3104     l_api_version                  CONSTANT NUMBER := 1;
3105     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_delete_row';
3106     l_return_status                VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3107     l_error_tbl                    OKL_API.ERROR_TBL_TYPE;
3108   BEGIN
3109     OKL_API.init_msg_list(p_init_msg_list);
3110     -- Make sure PL/SQL table has records in it before passing
3111     IF (p_camv_tbl.COUNT > 0) THEN
3112       delete_row (
3113         p_api_version                  => p_api_version,
3114         p_init_msg_list                => OKL_API.G_FALSE,
3115         x_return_status                => x_return_status,
3116         x_msg_count                    => x_msg_count,
3117         x_msg_data                     => x_msg_data,
3118         p_camv_tbl                     => p_camv_tbl,
3119         px_error_tbl                   => l_error_tbl);
3120     END IF;
3121     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3122   EXCEPTION
3123     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3124       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3125       (
3126         l_api_name,
3127         G_PKG_NAME,
3128         'OKL_API.G_RET_STS_ERROR',
3129         x_msg_count,
3130         x_msg_data,
3131         '_PVT'
3132       );
3133     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3134       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3135       (
3136         l_api_name,
3137         G_PKG_NAME,
3138         'OKL_API.G_RET_STS_UNEXP_ERROR',
3139         x_msg_count,
3140         x_msg_data,
3141         '_PVT'
3142       );
3143     WHEN OTHERS THEN
3144       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3145       (
3146         l_api_name,
3147         G_PKG_NAME,
3148         'OTHERS',
3149         x_msg_count,
3150         x_msg_data,
3151         '_PVT'
3152       );
3153   END delete_row;
3154 
3155 END OKL_CAM_PVT;