DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKS_BTL_PRINT_PREVIEW_PVT

Source


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