DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_KPL_PVT

Source


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