DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CLL_PVT

Source


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