DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_IPM_PVT

Source


1 PACKAGE BODY OKL_IPM_PVT AS
2 /* $Header: OKLSIPMB.pls 115.1 2002/11/30 09:14:45 spillaip noship $ */
3   ---------------------------------------------------------------------------
4   -- PROCEDURE load_error_tbl
5   ---------------------------------------------------------------------------
6   PROCEDURE load_error_tbl (
7     px_error_rec                   IN OUT NOCOPY OKC_API.ERROR_REC_TYPE,
8     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
9 
10     j                              INTEGER := NVL(px_error_tbl.LAST, 0) + 1;
11     last_msg_idx                   INTEGER := FND_MSG_PUB.COUNT_MSG;
12     l_msg_idx                      INTEGER := FND_MSG_PUB.G_NEXT;
13   BEGIN
14     -- FND_MSG_PUB has a small error in it.  If we call FND_MSG_PUB.COUNT_AND_GET before
15     -- we call FND_MSG_PUB.GET, the variable FND_MSG_PUB uses to control the index of the
16     -- message stack gets set to 1.  This makes sense until we call FND_MSG_PUB.GET which
17     -- automatically increments the index by 1, (making it 2), however, when the GET function
18     -- attempts to pull message 2, we get a NO_DATA_FOUND exception because there isn't any
19     -- message 2.  To circumvent this problem, check the amount of messages and compensate.
20     -- Again, this error only occurs when 1 message is on the stack because COUNT_AND_GET
21     -- will only update the index variable when 1 and only 1 message is on the stack.
22     IF (last_msg_idx = 1) THEN
23       l_msg_idx := FND_MSG_PUB.G_FIRST;
24     END IF;
25     LOOP
26       fnd_msg_pub.get(
27             p_msg_index     => l_msg_idx,
28             p_encoded       => fnd_api.g_false,
29             p_data          => px_error_rec.msg_data,
30             p_msg_index_out => px_error_rec.msg_count);
31       px_error_tbl(j) := px_error_rec;
32       j := j + 1;
33     EXIT WHEN (px_error_rec.msg_count = last_msg_idx);
34     END LOOP;
35   END load_error_tbl;
36   ---------------------------------------------------------------------------
37   -- FUNCTION find_highest_exception
38   ---------------------------------------------------------------------------
39   -- Finds the highest exception (G_RET_STS_UNEXP_ERROR)
40   -- in a OKC_API.ERROR_TBL_TYPE, and returns it.
41   FUNCTION find_highest_exception(
42     p_error_tbl                    IN OKC_API.ERROR_TBL_TYPE
43   ) RETURN VARCHAR2 IS
44     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
45     i                              INTEGER := 1;
46   BEGIN
47     IF (p_error_tbl.COUNT > 0) THEN
48       i := p_error_tbl.FIRST;
49       LOOP
50         IF (p_error_tbl(i).error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
51           IF (l_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
52             l_return_status := p_error_tbl(i).error_type;
53           END IF;
54         END IF;
55         EXIT WHEN (i = p_error_tbl.LAST);
56         i := p_error_tbl.NEXT(i);
57       END LOOP;
58     END IF;
59     RETURN(l_return_status);
60   END find_highest_exception;
61   ---------------------------------------------------------------------------
62   -- FUNCTION get_seq_id
63   ---------------------------------------------------------------------------
64   FUNCTION get_seq_id RETURN NUMBER IS
65   BEGIN
66     RETURN(okc_p_util.raw_to_number(sys_guid()));
67   END get_seq_id;
68 
69   ---------------------------------------------------------------------------
70   -- PROCEDURE qc
71   ---------------------------------------------------------------------------
72   PROCEDURE qc IS
73   BEGIN
74     null;
75   END qc;
76 
77   ---------------------------------------------------------------------------
78   -- PROCEDURE change_version
79   ---------------------------------------------------------------------------
80   PROCEDURE change_version IS
81   BEGIN
82     null;
83   END change_version;
84 
85   ---------------------------------------------------------------------------
86   -- PROCEDURE api_copy
87   ---------------------------------------------------------------------------
88   PROCEDURE api_copy IS
89   BEGIN
90     null;
91   END api_copy;
92 
93   ---------------------------------------------------------------------------
94   -- FUNCTION get_rec for: OKL_TRX_PARAMS_B
95   ---------------------------------------------------------------------------
96   FUNCTION get_rec (
97     p_ipm_rec                      IN ipm_rec_type,
98     x_no_data_found                OUT NOCOPY BOOLEAN
99   ) RETURN ipm_rec_type IS
100     CURSOR okl_trx_params_b_pk_csr (p_id IN NUMBER) IS
101     SELECT
102             ID,
103             SOURCE_TABLE,
104             SOURCE_ID,
105             PARAM_NAME,
106             PARAM_VALUE,
107             CREATED_BY,
108             CREATION_DATE,
109             LAST_UPDATED_BY,
110             LAST_UPDATE_DATE,
111             LAST_UPDATE_LOGIN
112       FROM Okl_Trx_Params_B
113      WHERE okl_trx_params_b.id  = p_id;
114     l_okl_trx_params_b_pk          okl_trx_params_b_pk_csr%ROWTYPE;
115     l_ipm_rec                      ipm_rec_type;
116   BEGIN
117     x_no_data_found := TRUE;
118     -- Get current database values
119     OPEN okl_trx_params_b_pk_csr (p_ipm_rec.id);
120     FETCH okl_trx_params_b_pk_csr INTO
121               l_ipm_rec.id,
122               l_ipm_rec.source_table,
123               l_ipm_rec.source_id,
124               l_ipm_rec.param_name,
125               l_ipm_rec.param_value,
126               l_ipm_rec.created_by,
127               l_ipm_rec.creation_date,
128               l_ipm_rec.last_updated_by,
129               l_ipm_rec.last_update_date,
130               l_ipm_rec.last_update_login;
131     x_no_data_found := okl_trx_params_b_pk_csr%NOTFOUND;
132     CLOSE okl_trx_params_b_pk_csr;
133     RETURN(l_ipm_rec);
134   END get_rec;
135 
136   ------------------------------------------------------------------
137   -- This version of get_rec sets error messages if no data found --
138   ------------------------------------------------------------------
139   FUNCTION get_rec (
140     p_ipm_rec                      IN ipm_rec_type,
141     x_return_status                OUT NOCOPY VARCHAR2
142   ) RETURN ipm_rec_type IS
143     l_ipm_rec                      ipm_rec_type;
144     l_row_notfound                 BOOLEAN := TRUE;
145   BEGIN
146     x_return_status := OKC_API.G_RET_STS_SUCCESS;
147     l_ipm_rec := get_rec(p_ipm_rec, l_row_notfound);
148     IF (l_row_notfound) THEN
149       OKC_API.set_message(G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'ID');
150       x_return_status := OKC_API.G_RET_STS_ERROR;
151     END IF;
152     RETURN(l_ipm_rec);
153   END get_rec;
154   -----------------------------------------------------------
155   -- So we don't have to pass an "l_row_notfound" variable --
156   -----------------------------------------------------------
157   FUNCTION get_rec (
158     p_ipm_rec                      IN ipm_rec_type
159   ) RETURN ipm_rec_type IS
160     l_row_not_found                BOOLEAN := TRUE;
161   BEGIN
162     RETURN(get_rec(p_ipm_rec, l_row_not_found));
163   END get_rec;
164   ---------------------------------------------------------------------------
165   -- FUNCTION null_out_defaults for: OKL_TRX_PARAMS_B
166   ---------------------------------------------------------------------------
167   FUNCTION null_out_defaults (
168     p_ipm_rec   IN ipm_rec_type
169   ) RETURN ipm_rec_type IS
170     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
171   BEGIN
172     IF (l_ipm_rec.id = OKC_API.G_MISS_NUM ) THEN
173       l_ipm_rec.id := NULL;
174     END IF;
175     IF (l_ipm_rec.source_table = OKC_API.G_MISS_CHAR ) THEN
176       l_ipm_rec.source_table := NULL;
177     END IF;
178     IF (l_ipm_rec.source_id = OKC_API.G_MISS_NUM ) THEN
179       l_ipm_rec.source_id := NULL;
180     END IF;
181     IF (l_ipm_rec.param_name = OKC_API.G_MISS_CHAR ) THEN
182       l_ipm_rec.param_name := NULL;
183     END IF;
184     IF (l_ipm_rec.param_value = OKC_API.G_MISS_CHAR ) THEN
185       l_ipm_rec.param_value := NULL;
186     END IF;
187     IF (l_ipm_rec.created_by = OKC_API.G_MISS_NUM ) THEN
188       l_ipm_rec.created_by := NULL;
189     END IF;
190     IF (l_ipm_rec.creation_date = OKC_API.G_MISS_DATE ) THEN
191       l_ipm_rec.creation_date := NULL;
192     END IF;
193     IF (l_ipm_rec.last_updated_by = OKC_API.G_MISS_NUM ) THEN
194       l_ipm_rec.last_updated_by := NULL;
195     END IF;
196     IF (l_ipm_rec.last_update_date = OKC_API.G_MISS_DATE ) THEN
197       l_ipm_rec.last_update_date := NULL;
198     END IF;
199     IF (l_ipm_rec.last_update_login = OKC_API.G_MISS_NUM ) THEN
200       l_ipm_rec.last_update_login := NULL;
201     END IF;
202     RETURN(l_ipm_rec);
203   END null_out_defaults;
204   ---------------------------------
205   -- Validate_Attributes for: ID --
206   ---------------------------------
207   PROCEDURE validate_id(
208     x_return_status                OUT NOCOPY VARCHAR2,
209     p_id                           IN NUMBER) IS
210   BEGIN
211     x_return_status := OKC_API.G_RET_STS_SUCCESS;
212 -- dbms_output.put_line('No. 4'||p_id);
213     IF (p_id = OKC_API.G_MISS_NUM OR
214         p_id IS NULL)
215     THEN
216       OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'id');
217       x_return_status := OKC_API.G_RET_STS_ERROR;
218       RAISE G_EXCEPTION_HALT_VALIDATION;
219     END IF;
220 -- dbms_output.put_line('No. 5');
221   EXCEPTION
222     WHEN G_EXCEPTION_HALT_VALIDATION THEN
223       null;
224     WHEN OTHERS THEN
225       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
226                           ,p_msg_name     => G_UNEXPECTED_ERROR
227                           ,p_token1       => G_SQLCODE_TOKEN
228                           ,p_token1_value => SQLCODE
229                           ,p_token2       => G_SQLERRM_TOKEN
230                           ,p_token2_value => SQLERRM);
231       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
232   END validate_id;
233   -------------------------------------------
234   -- Validate_Attributes for: PARAM_NAME --
235   -------------------------------------------
236   PROCEDURE validate_param_name(
237     x_return_status                OUT NOCOPY VARCHAR2,
238     p_param_name                 IN VARCHAR2) IS
239 
240  	l_param_name_status VARCHAR2(1);
241   BEGIN
242     x_return_status := OKC_API.G_RET_STS_SUCCESS;
243     IF (p_param_name = OKC_API.G_MISS_CHAR OR
244         p_param_name IS NULL)
245     THEN
246       OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'param_name');
247       x_return_status := OKC_API.G_RET_STS_ERROR;
248       RAISE G_EXCEPTION_HALT_VALIDATION;
249     END IF;
250 
251 	  l_param_name_status := OKL_ACCOUNTING_UTIL.validate_lookup_code
252                                  (p_lookup_type => 'OKL_TRX_PARAM_NAME',
253 	                             p_lookup_code => p_param_name,
254 	                             p_app_id => 540,
255 	                             p_view_app_id => 0);
256 
257 -- dbms_output.put_line('No. 7'||l_param_name_status||p_param_name);
258 	  IF l_param_name_status = 'T' THEN
259         x_return_status := OKC_API.G_RET_STS_SUCCESS;
260       ELSE
261         OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'param_name');
262         x_return_status := OKC_API.G_RET_STS_ERROR;
263       RAISE G_EXCEPTION_HALT_VALIDATION;
264     END IF;
265   EXCEPTION
266     WHEN G_EXCEPTION_HALT_VALIDATION THEN
267       null;
268     WHEN OTHERS THEN
269       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
270                           ,p_msg_name     => G_UNEXPECTED_ERROR
271                           ,p_token1       => G_SQLCODE_TOKEN
272                           ,p_token1_value => SQLCODE
273                           ,p_token2       => G_SQLERRM_TOKEN
274                           ,p_token2_value => SQLERRM);
275       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
276   END validate_param_name;
277   -------------------------------------------
278   -- Validate_Attributes for: SOURCE_TABLE --
279   -------------------------------------------
280   PROCEDURE validate_source_table(
281     x_return_status                OUT NOCOPY VARCHAR2,
282     p_source_table                 IN VARCHAR2) IS
283 
284  	l_source_table_status VARCHAR2(1);
285   BEGIN
286     x_return_status := OKC_API.G_RET_STS_SUCCESS;
287     IF (p_source_table = OKC_API.G_MISS_CHAR OR
288         p_source_table IS NULL)
289     THEN
290       OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'source_table');
291       x_return_status := OKC_API.G_RET_STS_ERROR;
292       RAISE G_EXCEPTION_HALT_VALIDATION;
293     END IF;
294 
295 	  l_source_table_status := OKL_ACCOUNTING_UTIL.validate_lookup_code
296                                  (p_lookup_type => 'OKL_TRX_PARAM_SOURCE_TABLE',
297 	                             p_lookup_code => p_source_table,
298 	                             p_app_id => 540,
299 	                             p_view_app_id => 0);
300 
301 	  IF l_source_table_status = 'T' THEN
302         x_return_status := OKC_API.G_RET_STS_SUCCESS;
303       ELSE
304         OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'source_table');
305         x_return_status := OKC_API.G_RET_STS_ERROR;
306       RAISE G_EXCEPTION_HALT_VALIDATION;
307     END IF;
308   EXCEPTION
309     WHEN G_EXCEPTION_HALT_VALIDATION THEN
310       null;
311     WHEN OTHERS THEN
312       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
313                           ,p_msg_name     => G_UNEXPECTED_ERROR
314                           ,p_token1       => G_SQLCODE_TOKEN
315                           ,p_token1_value => SQLCODE
316                           ,p_token2       => G_SQLERRM_TOKEN
317                           ,p_token2_value => SQLERRM);
318       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
319   END validate_source_table;
320   ----------------------------------------
321   -- Validate_Attributes for: SOURCE_ID --
322   ----------------------------------------
323   PROCEDURE validate_source_id(
324     x_return_status                OUT NOCOPY VARCHAR2,
325     p_source_id                    IN NUMBER) IS
326   BEGIN
327     x_return_status := OKC_API.G_RET_STS_SUCCESS;
328     IF (p_source_id = OKC_API.G_MISS_NUM OR
329         p_source_id IS NULL)
330     THEN
331       OKC_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'source_id');
332       x_return_status := OKC_API.G_RET_STS_ERROR;
333       RAISE G_EXCEPTION_HALT_VALIDATION;
334     END IF;
335   EXCEPTION
336     WHEN G_EXCEPTION_HALT_VALIDATION THEN
337       null;
338     WHEN OTHERS THEN
339       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
340                           ,p_msg_name     => G_UNEXPECTED_ERROR
341                           ,p_token1       => G_SQLCODE_TOKEN
342                           ,p_token1_value => SQLCODE
343                           ,p_token2       => G_SQLERRM_TOKEN
344                           ,p_token2_value => SQLERRM);
345       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
346   END validate_source_id;
347   ---------------------------------------------------------------------------
348   -- FUNCTION Validate_Attributes
349   ---------------------------------------------------------------------------
350   ----------------------------------------------
351   -- Validate_Attributes for:OKL_TRX_PARAMS_B --
352   ----------------------------------------------
353   FUNCTION Validate_Attributes (
354     p_ipm_rec                      IN ipm_rec_type
355   ) RETURN VARCHAR2 IS
356     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
357     x_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
358   BEGIN
359     -----------------------------
360     -- Column Level Validation --
361     -----------------------------
362     -- ***
363     -- id
364     -- ***
365 -- dbms_output.put_line('No. 1');
366     validate_id(x_return_status, p_ipm_rec.id);
367     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
368       l_return_status := x_return_status;
369       RAISE G_EXCEPTION_HALT_VALIDATION;
370     END IF;
371 
372     -- ***
373     -- source_table
374     -- ***
375 -- dbms_output.put_line('No. 2');
376     validate_source_table(x_return_status, p_ipm_rec.source_table);
377     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
378       l_return_status := x_return_status;
379       RAISE G_EXCEPTION_HALT_VALIDATION;
380     END IF;
381 
382     -- ***
383     -- source_id
384     -- ***
385 -- dbms_output.put_line('No. 3');
386     validate_source_id(x_return_status, p_ipm_rec.source_id);
387     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
388       l_return_status := x_return_status;
389       RAISE G_EXCEPTION_HALT_VALIDATION;
390     END IF;
391 
392     -- ***
393     -- param_name
394     -- ***
395 -- dbms_output.put_line('No. 4');
396     validate_param_name(x_return_status, p_ipm_rec.param_name);
397     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
398       l_return_status := x_return_status;
399       RAISE G_EXCEPTION_HALT_VALIDATION;
400     END IF;
401 -- dbms_output.put_line('No. 6');
402 
403     RETURN(l_return_status);
404   EXCEPTION
405     WHEN G_EXCEPTION_HALT_VALIDATION THEN
406       RETURN(l_return_status);
407     WHEN OTHERS THEN
408       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
409                           ,p_msg_name     => G_UNEXPECTED_ERROR
410                           ,p_token1       => G_SQLCODE_TOKEN
411                           ,p_token1_value => SQLCODE
412                           ,p_token2       => G_SQLERRM_TOKEN
413                           ,p_token2_value => SQLERRM);
414       l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
415       RETURN(l_return_status);
416   END Validate_Attributes;
417 
418   ---------------------------------------------------------------------------
419   -- PROCEDURE Validate_Record
420   ---------------------------------------------------------------------------
421   ------------------------------------------
422   -- Validate Record for:OKL_TRX_PARAMS_B --
423   ------------------------------------------
424   FUNCTION Validate_Record (
425     p_ipm_rec IN ipm_rec_type,
426     p_db_ipm_rec IN ipm_rec_type
427   ) RETURN VARCHAR2 IS
428     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
429   BEGIN
430     RETURN (l_return_status);
431   END Validate_Record;
432   FUNCTION Validate_Record (
433     p_ipm_rec IN ipm_rec_type
434   ) RETURN VARCHAR2 IS
435     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
436     l_db_ipm_rec                   ipm_rec_type := get_rec(p_ipm_rec);
437   BEGIN
438     l_return_status := Validate_Record(p_ipm_rec => p_ipm_rec,
439                                        p_db_ipm_rec => l_db_ipm_rec);
440     RETURN (l_return_status);
441   END Validate_Record;
442 
443   ---------------------------------------------------------------------------
444   -- PROCEDURE Migrate
445   ---------------------------------------------------------------------------
446   PROCEDURE migrate (
447     p_from IN ipm_rec_type,
448     p_to   IN OUT NOCOPY ipm_rec_type
449   ) IS
450   BEGIN
451     p_to.id := p_from.id;
452     p_to.source_table := p_from.source_table;
453     p_to.source_id := p_from.source_id;
454     p_to.param_name := p_from.param_name;
455     p_to.param_value := p_from.param_value;
456     p_to.created_by := p_from.created_by;
457     p_to.creation_date := p_from.creation_date;
458     p_to.last_updated_by := p_from.last_updated_by;
459     p_to.last_update_date := p_from.last_update_date;
460     p_to.last_update_login := p_from.last_update_login;
461   END migrate;
462   ---------------------------------------------------------------------------
463   -- PROCEDURE validate_row
464   ---------------------------------------------------------------------------
465   ---------------------------------------
466   -- validate_row for:OKL_TRX_PARAMS_B --
467   ---------------------------------------
468   PROCEDURE validate_row(
469     p_api_version                  IN NUMBER,
470     p_init_msg_list                IN VARCHAR2,
471     x_return_status                OUT NOCOPY VARCHAR2,
472     x_msg_count                    OUT NOCOPY NUMBER,
473     x_msg_data                     OUT NOCOPY VARCHAR2,
474     p_ipm_rec                      IN ipm_rec_type) IS
475 
476     l_api_version                  CONSTANT NUMBER := 1;
477     l_api_name                     CONSTANT VARCHAR2(30) := 'V_validate_row';
478     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
479     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
480   BEGIN
481     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
482                                               G_PKG_NAME,
483                                               p_init_msg_list,
484                                               l_api_version,
485                                               p_api_version,
486                                               '_PVT',
487                                               x_return_status);
488     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
489       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
490     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
491       RAISE OKC_API.G_EXCEPTION_ERROR;
492     END IF;
493     --- Validate all non-missing attributes (Item Level Validation)
494     l_return_status := Validate_Attributes(l_ipm_rec);
495     --- If any errors happen abort API
496     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
497       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
498     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
499       RAISE OKC_API.G_EXCEPTION_ERROR;
500     END IF;
501     l_return_status := Validate_Record(l_ipm_rec);
502     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
503       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
504     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
505       RAISE OKC_API.G_EXCEPTION_ERROR;
506     END IF;
507     x_return_status := l_return_status;
508   EXCEPTION
509     WHEN OKC_API.G_EXCEPTION_ERROR THEN
510       x_return_status := OKC_API.HANDLE_EXCEPTIONS
511       (
512         l_api_name,
513         G_PKG_NAME,
514         'OKC_API.G_RET_STS_ERROR',
515         x_msg_count,
516         x_msg_data,
517         '_PVT'
518       );
519     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
520       x_return_status := OKC_API.HANDLE_EXCEPTIONS
521       (
522         l_api_name,
523         G_PKG_NAME,
524         'OKC_API.G_RET_STS_UNEXP_ERROR',
525         x_msg_count,
526         x_msg_data,
527         '_PVT'
528       );
529     WHEN OTHERS THEN
530       x_return_status := OKC_API.HANDLE_EXCEPTIONS
531       (
532         l_api_name,
533         G_PKG_NAME,
534         'OTHERS',
535         x_msg_count,
536         x_msg_data,
537         '_PVT'
538       );
539   END validate_row;
540   --------------------------------------------------
541   -- PL/SQL TBL validate_row for:OKL_TRX_PARAMS_B --
542   --------------------------------------------------
543   PROCEDURE validate_row(
544     p_api_version                  IN NUMBER,
545     p_init_msg_list                IN VARCHAR2,
546     x_return_status                OUT NOCOPY VARCHAR2,
547     x_msg_count                    OUT NOCOPY NUMBER,
548     x_msg_data                     OUT NOCOPY VARCHAR2,
549     p_ipm_tbl                      IN ipm_tbl_type,
550     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
551 
552     l_api_version                  CONSTANT NUMBER := 1;
553     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_validate_row';
554     i                              NUMBER := 0;
555   BEGIN
556     OKC_API.init_msg_list(p_init_msg_list);
557     -- Make sure PL/SQL table has records in it before passing
558     IF (p_ipm_tbl.COUNT > 0) THEN
559       i := p_ipm_tbl.FIRST;
560       LOOP
561         DECLARE
562           l_error_rec         OKC_API.ERROR_REC_TYPE;
563         BEGIN
564           l_error_rec.api_name := l_api_name;
565           l_error_rec.api_package := G_PKG_NAME;
566           l_error_rec.idx := i;
567           validate_row (
568             p_api_version                  => p_api_version,
569             p_init_msg_list                => OKC_API.G_FALSE,
570             x_return_status                => l_error_rec.error_type,
571             x_msg_count                    => l_error_rec.msg_count,
572             x_msg_data                     => l_error_rec.msg_data,
573             p_ipm_rec                      => p_ipm_tbl(i));
574           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
575             l_error_rec.sqlcode := SQLCODE;
576             load_error_tbl(l_error_rec, px_error_tbl);
577           ELSE
578             x_msg_count := l_error_rec.msg_count;
579             x_msg_data := l_error_rec.msg_data;
580           END IF;
581         EXCEPTION
582           WHEN OKC_API.G_EXCEPTION_ERROR THEN
583             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
584             l_error_rec.sqlcode := SQLCODE;
585             load_error_tbl(l_error_rec, px_error_tbl);
586           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
587             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
588             l_error_rec.sqlcode := SQLCODE;
589             load_error_tbl(l_error_rec, px_error_tbl);
590           WHEN OTHERS THEN
591             l_error_rec.error_type := 'OTHERS';
592             l_error_rec.sqlcode := SQLCODE;
593             load_error_tbl(l_error_rec, px_error_tbl);
594         END;
595         EXIT WHEN (i = p_ipm_tbl.LAST);
596         i := p_ipm_tbl.NEXT(i);
597       END LOOP;
598     END IF;
599     -- Loop through the error_tbl to find the error with the highest severity
600     -- and return it.
601     x_return_status := find_highest_exception(px_error_tbl);
602     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
603   EXCEPTION
604     WHEN OKC_API.G_EXCEPTION_ERROR THEN
605       x_return_status := OKC_API.HANDLE_EXCEPTIONS
606       (
607         l_api_name,
608         G_PKG_NAME,
609         'OKC_API.G_RET_STS_ERROR',
610         x_msg_count,
611         x_msg_data,
612         '_PVT'
613       );
614     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
615       x_return_status := OKC_API.HANDLE_EXCEPTIONS
616       (
617         l_api_name,
618         G_PKG_NAME,
619         'OKC_API.G_RET_STS_UNEXP_ERROR',
620         x_msg_count,
621         x_msg_data,
622         '_PVT'
623       );
624     WHEN OTHERS THEN
625       x_return_status := OKC_API.HANDLE_EXCEPTIONS
626       (
627         l_api_name,
628         G_PKG_NAME,
629         'OTHERS',
630         x_msg_count,
631         x_msg_data,
632         '_PVT'
633       );
634   END validate_row;
635 
636   --------------------------------------------------
637   -- PL/SQL TBL validate_row for:OKL_TRX_PARAMS_B --
638   --------------------------------------------------
639   PROCEDURE validate_row(
640     p_api_version                  IN NUMBER,
641     p_init_msg_list                IN VARCHAR2,
642     x_return_status                OUT NOCOPY VARCHAR2,
643     x_msg_count                    OUT NOCOPY NUMBER,
644     x_msg_data                     OUT NOCOPY VARCHAR2,
645     p_ipm_tbl                      IN ipm_tbl_type) IS
646 
647     l_api_version                  CONSTANT NUMBER := 1;
648     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_validate_row';
649     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
650     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
651   BEGIN
652     OKC_API.init_msg_list(p_init_msg_list);
653     -- Make sure PL/SQL table has records in it before passing
654     IF (p_ipm_tbl.COUNT > 0) THEN
655       validate_row (
656         p_api_version                  => p_api_version,
657         p_init_msg_list                => OKC_API.G_FALSE,
658         x_return_status                => x_return_status,
659         x_msg_count                    => x_msg_count,
660         x_msg_data                     => x_msg_data,
661         p_ipm_tbl                      => p_ipm_tbl,
662         px_error_tbl                   => l_error_tbl);
663     END IF;
664     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
665   EXCEPTION
666     WHEN OKC_API.G_EXCEPTION_ERROR THEN
667       x_return_status := OKC_API.HANDLE_EXCEPTIONS
668       (
669         l_api_name,
670         G_PKG_NAME,
671         'OKC_API.G_RET_STS_ERROR',
672         x_msg_count,
673         x_msg_data,
674         '_PVT'
675       );
676     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
677       x_return_status := OKC_API.HANDLE_EXCEPTIONS
678       (
679         l_api_name,
680         G_PKG_NAME,
681         'OKC_API.G_RET_STS_UNEXP_ERROR',
682         x_msg_count,
683         x_msg_data,
684         '_PVT'
685       );
686     WHEN OTHERS THEN
687       x_return_status := OKC_API.HANDLE_EXCEPTIONS
688       (
689         l_api_name,
690         G_PKG_NAME,
691         'OTHERS',
692         x_msg_count,
693         x_msg_data,
694         '_PVT'
695       );
696   END validate_row;
697 
698   ---------------------------------------------------------------------------
699   -- PROCEDURE insert_row
700   ---------------------------------------------------------------------------
701   -------------------------------------
702   -- insert_row for:OKL_TRX_PARAMS_B --
703   -------------------------------------
704   PROCEDURE insert_row(
705     p_api_version                  IN NUMBER,
706     p_init_msg_list                IN VARCHAR2,
707     x_return_status                OUT NOCOPY VARCHAR2,
708     x_msg_count                    OUT NOCOPY NUMBER,
709     x_msg_data                     OUT NOCOPY VARCHAR2,
710     p_ipm_rec                      IN ipm_rec_type,
711     x_ipm_rec                      OUT NOCOPY ipm_rec_type) IS
712 
713     l_api_version                  CONSTANT NUMBER := 1;
714     l_api_name                     CONSTANT VARCHAR2(30) := 'B_insert_row';
715     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
716     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
717     l_def_ipm_rec                  ipm_rec_type;
718 
719     -------------------------------
720     -- FUNCTION fill_who_columns --
721     -------------------------------
722     FUNCTION fill_who_columns (
723       p_ipm_rec	IN ipm_rec_type
724     ) RETURN ipm_rec_type IS
725       l_ipm_rec	ipm_rec_type := p_ipm_rec;
726     BEGIN
727       l_ipm_rec.CREATION_DATE := SYSDATE;
728       l_ipm_rec.CREATED_BY := Fnd_Global.USER_ID;
729       l_ipm_rec.LAST_UPDATE_DATE := SYSDATE;
730       l_ipm_rec.LAST_UPDATED_BY := Fnd_Global.USER_ID;
731       l_ipm_rec.LAST_UPDATE_LOGIN := Fnd_Global.LOGIN_ID;
732     -- dbms_output.put_line('created_by1 : '||to_char(l_ipm_rec.CREATED_BY));
733       RETURN(l_ipm_rec);
734     END fill_who_columns;
735     -----------------------------------------
736     -- Set_Attributes for:OKL_TRX_PARAMS_B --
737     -----------------------------------------
738     FUNCTION Set_Attributes (
739       p_ipm_rec IN ipm_rec_type,
740       x_ipm_rec OUT NOCOPY ipm_rec_type
741     ) RETURN VARCHAR2 IS
742       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
743     BEGIN
744       x_ipm_rec := p_ipm_rec;
745       RETURN(l_return_status);
746     END Set_Attributes;
747   BEGIN
748     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
749                                               p_init_msg_list,
750                                               '_PVT',
751                                               x_return_status);
752     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
753       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
754     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
755       RAISE OKC_API.G_EXCEPTION_ERROR;
756     END IF;
757     -- dbms_output.put_line('created_by1 : '||to_char(l_ipm_rec.CREATED_BY));
758     -- dbms_output.put_line('Message 1');
759     l_ipm_rec := null_out_defaults(p_ipm_rec);
760     -- Set primary key value
761     l_ipm_rec.ID := get_seq_id;
762     l_return_status := Validate_Attributes(l_ipm_rec);
763     IF (l_return_status = Okc_Api.G_RET_STS_UNEXP_ERROR) THEN
764       RAISE Okc_Api.G_EXCEPTION_UNEXPECTED_ERROR;
765     ELSIF (l_return_status = Okc_Api.G_RET_STS_ERROR) THEN
766       RAISE Okc_Api.G_EXCEPTION_ERROR;
767     END IF;
768     -- dbms_output.put_line('ID: '||l_ipm_rec.ID);
769     --- Setting item atributes
770     l_return_status := Set_Attributes(
771       p_ipm_rec,                         -- IN
772       l_ipm_rec);                        -- OUT
773 
774     l_ipm_rec := fill_who_columns(l_ipm_rec);
775     l_ipm_rec.ID := get_seq_id;
776 
777 --    -- dbms_output.put_line('Message 2');
778     -- dbms_output.put_line('ID: '||l_ipm_rec.ID);
779     -- dbms_output.put_line('Source Table: '||l_ipm_rec.source_table);
780     -- dbms_output.put_line('Source ID: '||l_ipm_rec.source_id);
781     -- dbms_output.put_line('param_name: '||l_ipm_rec.param_name);
782     -- dbms_output.put_line('param_value: '||l_ipm_rec.param_value);
783     -- dbms_output.put_line('created_by: '||to_char(l_ipm_rec.created_by));
784     -- dbms_output.put_line('creation_date: '||l_ipm_rec.creation_date);
785     -- dbms_output.put_line('last_updated_by: '||to_char(l_ipm_rec.last_updated_by));
786     -- dbms_output.put_line('last_update_date: '||l_ipm_rec.last_update_date);
787     -- dbms_output.put_line('last_update_login: '||to_char(l_ipm_rec.last_update_login));
788     --- If any errors happen abort API
789     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
790       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
791     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
792       RAISE OKC_API.G_EXCEPTION_ERROR;
793     END IF;
794     INSERT INTO OKL_TRX_PARAMS_B(
795       id,
796       source_table,
797       source_id,
798       param_name,
799       param_value,
800       created_by,
801       creation_date,
802       last_updated_by,
803       last_update_date,
804       last_update_login)
805     VALUES (
806       l_ipm_rec.id,
807       l_ipm_rec.source_table,
808       l_ipm_rec.source_id,
809       l_ipm_rec.param_name,
810       l_ipm_rec.param_value,
811       l_ipm_rec.created_by,
812       l_ipm_rec.creation_date,
813       l_ipm_rec.last_updated_by,
814       l_ipm_rec.last_update_date,
815       l_ipm_rec.last_update_login);
816     -- Set OUT values
817     -- dbms_output.put_line('Message 3');
818     x_ipm_rec := l_ipm_rec;
819     x_return_status := l_return_status;
820     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
821   EXCEPTION
822     WHEN OKC_API.G_EXCEPTION_ERROR THEN
823       x_return_status := OKC_API.HANDLE_EXCEPTIONS
824       (
825         l_api_name,
826         G_PKG_NAME,
827         'OKC_API.G_RET_STS_ERROR',
828         x_msg_count,
829         x_msg_data,
830         '_PVT'
831       );
832     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
833       x_return_status := OKC_API.HANDLE_EXCEPTIONS
834       (
835         l_api_name,
836         G_PKG_NAME,
837         'OKC_API.G_RET_STS_UNEXP_ERROR',
838         x_msg_count,
839         x_msg_data,
840         '_PVT'
841       );
842     WHEN OTHERS THEN
843       x_return_status := OKC_API.HANDLE_EXCEPTIONS
844       (
845         l_api_name,
846         G_PKG_NAME,
847         'OTHERS',
848         x_msg_count,
849         x_msg_data,
850         '_PVT'
851       );
852   END insert_row;
853   ----------------------------------------
854   -- PL/SQL TBL insert_row for:ipm_TBL --
855   ----------------------------------------
856   PROCEDURE insert_row(
857     p_api_version                  IN NUMBER,
858     p_init_msg_list                IN VARCHAR2,
859     x_return_status                OUT NOCOPY VARCHAR2,
860     x_msg_count                    OUT NOCOPY NUMBER,
861     x_msg_data                     OUT NOCOPY VARCHAR2,
862     p_ipm_tbl                     IN ipm_tbl_type,
863     x_ipm_tbl                     OUT NOCOPY ipm_tbl_type) IS
864 
865     l_api_version                 CONSTANT NUMBER := 1;
866     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_insert_row';
867     l_return_status                VARCHAR2(1) := okl_api.G_RET_STS_SUCCESS;
868     l_overall_status                VARCHAR2(1) := okl_api.G_RET_STS_SUCCESS;
869     i                              NUMBER := 0;
870   BEGIN
871     okl_api.init_msg_list(p_init_msg_list);
872     -- Make sure PL/SQL table has records in it before passing
873     IF (p_ipm_tbl.COUNT > 0) THEN
874       i := p_ipm_tbl.FIRST;
875       LOOP
876         insert_row (
877           p_api_version                  => p_api_version,
878           p_init_msg_list                => okl_api.G_FALSE,
879           x_return_status                => x_return_status,
880           x_msg_count                    => x_msg_count,
881           x_msg_data                     => x_msg_data,
882           p_ipm_rec                     => p_ipm_tbl(i),
883           x_ipm_rec                     => x_ipm_tbl(i));
884 	-- Store the highest degree of error
885 	IF x_return_status <> okl_api.G_RET_STS_SUCCESS THEN
886 	   IF l_overall_status <> okl_api.G_RET_STS_UNEXP_ERROR THEN
887 	   	  l_overall_status := x_return_status;
888 	   END IF;
889 	END IF;
890         EXIT WHEN (i = p_ipm_tbl.LAST);
891         i := p_ipm_tbl.NEXT(i);
892       END LOOP;
893    -- return overall status
894    	  x_return_status := l_overall_status;
895     END IF;
896   EXCEPTION
897     WHEN okl_api.G_EXCEPTION_ERROR THEN
898       x_return_status := okl_api.HANDLE_EXCEPTIONS
899       (
900         l_api_name,
901         G_PKG_NAME,
902         'okl_api.G_RET_STS_ERROR',
903         x_msg_count,
904         x_msg_data,
905         '_PVT'
906       );
907     WHEN okl_api.G_EXCEPTION_UNEXPECTED_ERROR THEN
908       x_return_status :=okl_api.HANDLE_EXCEPTIONS
909       (
910         l_api_name,
911         G_PKG_NAME,
912         'okl_api.G_RET_STS_UNEXP_ERROR',
913         x_msg_count,
914         x_msg_data,
915         '_PVT'
916       );
917     WHEN OTHERS THEN
918       x_return_status :=okl_api.HANDLE_EXCEPTIONS
919       (
920         l_api_name,
921         G_PKG_NAME,
922         'OTHERS',
923         x_msg_count,
924         x_msg_data,
925         '_PVT'
926       );
927   END insert_row;
928 
929   ---------------------------------------------------------------------------
930   -- PROCEDURE lock_row
931   ---------------------------------------------------------------------------
932   -----------------------------------
933   -- lock_row for:OKL_TRX_PARAMS_B --
934   -----------------------------------
935   PROCEDURE lock_row(
936     p_init_msg_list                IN VARCHAR2,
937     x_return_status                OUT NOCOPY VARCHAR2,
938     x_msg_count                    OUT NOCOPY NUMBER,
939     x_msg_data                     OUT NOCOPY VARCHAR2,
940     p_ipm_rec                      IN ipm_rec_type) IS
941 
942     E_Resource_Busy                EXCEPTION;
943     PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
944     CURSOR lock_csr (p_ipm_rec IN ipm_rec_type) IS
945     SELECT *
946       FROM OKL_TRX_PARAMS_B
947      WHERE ID = p_ipm_rec.id
948     FOR UPDATE NOWAIT;
949 
950     l_api_version                  CONSTANT NUMBER := 1;
951     l_api_name                     CONSTANT VARCHAR2(30) := 'B_lock_row';
952     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
953     l_lock_var                     lock_csr%ROWTYPE;
954     l_row_notfound                 BOOLEAN := FALSE;
955     lc_row_notfound                BOOLEAN := FALSE;
956   BEGIN
957     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
958                                               p_init_msg_list,
959                                               '_PVT',
960                                               x_return_status);
961     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
962       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
963     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
964       RAISE OKC_API.G_EXCEPTION_ERROR;
965     END IF;
966     BEGIN
967       OPEN lock_csr(p_ipm_rec);
968       FETCH lock_csr INTO l_lock_var;
969       l_row_notfound := lock_csr%NOTFOUND;
970       CLOSE lock_csr;
971     EXCEPTION
972       WHEN E_Resource_Busy THEN
973         IF (lock_csr%ISOPEN) THEN
974           CLOSE lock_csr;
975         END IF;
976         OKC_API.set_message(G_FND_APP,G_FORM_UNABLE_TO_RESERVE_REC);
977         RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
978     END;
979 
980     IF ( l_row_notfound ) THEN
981       OKC_API.set_message(G_FND_APP,G_FORM_RECORD_DELETED);
982       RAISE OKC_API.G_EXCEPTION_ERROR;
983     ELSE
984       IF (l_lock_var.id <> p_ipm_rec.id) THEN
985         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
986         RAISE OKC_API.G_EXCEPTION_ERROR;
987       END IF;
988       IF (l_lock_var.source_table <> p_ipm_rec.source_table) THEN
989         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
990         RAISE OKC_API.G_EXCEPTION_ERROR;
991       END IF;
992       IF (l_lock_var.source_id <> p_ipm_rec.source_id) THEN
993         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
994         RAISE OKC_API.G_EXCEPTION_ERROR;
995       END IF;
996       IF (l_lock_var.param_name <> p_ipm_rec.param_name) THEN
997         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
998         RAISE OKC_API.G_EXCEPTION_ERROR;
999       END IF;
1000       IF (l_lock_var.param_value <> p_ipm_rec.param_value) THEN
1001         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1002         RAISE OKC_API.G_EXCEPTION_ERROR;
1003       END IF;
1004       IF (l_lock_var.created_by <> p_ipm_rec.created_by) THEN
1005         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1006         RAISE OKC_API.G_EXCEPTION_ERROR;
1007       END IF;
1008       IF (l_lock_var.creation_date <> p_ipm_rec.creation_date) THEN
1009         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1010         RAISE OKC_API.G_EXCEPTION_ERROR;
1011       END IF;
1012       IF (l_lock_var.last_updated_by <> p_ipm_rec.last_updated_by) THEN
1013         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1014         RAISE OKC_API.G_EXCEPTION_ERROR;
1015       END IF;
1016       IF (l_lock_var.last_update_date <> p_ipm_rec.last_update_date) THEN
1017         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1018         RAISE OKC_API.G_EXCEPTION_ERROR;
1019       END IF;
1020       IF (l_lock_var.last_update_login <> p_ipm_rec.last_update_login) THEN
1021         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
1022         RAISE OKC_API.G_EXCEPTION_ERROR;
1023       END IF;
1024     END IF;
1025     x_return_status := l_return_status;
1026     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1027   EXCEPTION
1028     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1029       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1030       (
1031         l_api_name,
1032         G_PKG_NAME,
1033         'OKC_API.G_RET_STS_ERROR',
1034         x_msg_count,
1035         x_msg_data,
1036         '_PVT'
1037       );
1038     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1039       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1040       (
1041         l_api_name,
1042         G_PKG_NAME,
1043         'OKC_API.G_RET_STS_UNEXP_ERROR',
1044         x_msg_count,
1045         x_msg_data,
1046         '_PVT'
1047       );
1048     WHEN OTHERS THEN
1049       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1050       (
1051         l_api_name,
1052         G_PKG_NAME,
1053         'OTHERS',
1054         x_msg_count,
1055         x_msg_data,
1056         '_PVT'
1057       );
1058   END lock_row;
1059   ------------------------------------
1060   -- lock_row for: OKL_TRX_PARAMS_B --
1061   ------------------------------------
1062   PROCEDURE lock_row(
1063     p_api_version                  IN NUMBER,
1064     p_init_msg_list                IN VARCHAR2,
1065     x_return_status                OUT NOCOPY VARCHAR2,
1066     x_msg_count                    OUT NOCOPY NUMBER,
1067     x_msg_data                     OUT NOCOPY VARCHAR2,
1068     p_ipm_rec                      IN ipm_rec_type) IS
1069 
1070     l_api_version                  CONSTANT NUMBER := 1;
1071     l_api_name                     CONSTANT VARCHAR2(30) := 'V_lock_row';
1072     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1073     l_ipm_rec                      ipm_rec_type;
1074   BEGIN
1075     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
1076                                               G_PKG_NAME,
1077                                               p_init_msg_list,
1078                                               l_api_version,
1079                                               p_api_version,
1080                                               '_PVT',
1081                                               x_return_status);
1082     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1083       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1084     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1085       RAISE OKC_API.G_EXCEPTION_ERROR;
1086     END IF;
1087     -----------------------------------------
1088     -- Move VIEW record to "Child" records --
1089     -----------------------------------------
1090     migrate(p_ipm_rec, l_ipm_rec);
1091     ---------------------------------------------
1092     -- Call the LOCK_ROW for each child record --
1093     ---------------------------------------------
1094     lock_row(
1095       p_init_msg_list,
1096       l_return_status,
1097       x_msg_count,
1098       x_msg_data,
1099       l_ipm_rec
1100     );
1101     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1102       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1103     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1104       RAISE OKC_API.G_EXCEPTION_ERROR;
1105     END IF;
1106     x_return_status := l_return_status;
1107     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1108   EXCEPTION
1109     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1110       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1111       (
1112         l_api_name,
1113         G_PKG_NAME,
1114         'OKC_API.G_RET_STS_ERROR',
1115         x_msg_count,
1116         x_msg_data,
1117         '_PVT'
1118       );
1119     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1120       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1121       (
1122         l_api_name,
1123         G_PKG_NAME,
1124         'OKC_API.G_RET_STS_UNEXP_ERROR',
1125         x_msg_count,
1126         x_msg_data,
1127         '_PVT'
1128       );
1129     WHEN OTHERS THEN
1130       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1131       (
1132         l_api_name,
1133         G_PKG_NAME,
1134         'OTHERS',
1135         x_msg_count,
1136         x_msg_data,
1137         '_PVT'
1138       );
1139   END lock_row;
1140   -------------------------------------
1141   -- PL/SQL TBL lock_row for:IPM_TBL --
1142   -------------------------------------
1143   PROCEDURE lock_row(
1144     p_api_version                  IN NUMBER,
1145     p_init_msg_list                IN VARCHAR2,
1146     x_return_status                OUT NOCOPY VARCHAR2,
1147     x_msg_count                    OUT NOCOPY NUMBER,
1148     x_msg_data                     OUT NOCOPY VARCHAR2,
1149     p_ipm_tbl                      IN ipm_tbl_type,
1150     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
1151 
1152     l_api_version                  CONSTANT NUMBER := 1;
1153     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_lock_row';
1154     i                              NUMBER := 0;
1155   BEGIN
1156     OKC_API.init_msg_list(p_init_msg_list);
1157     -- Make sure PL/SQL table has recrods in it before passing
1158     IF (p_ipm_tbl.COUNT > 0) THEN
1159       i := p_ipm_tbl.FIRST;
1160       LOOP
1161         DECLARE
1162           l_error_rec         OKC_API.ERROR_REC_TYPE;
1163         BEGIN
1164           l_error_rec.api_name := l_api_name;
1165           l_error_rec.api_package := G_PKG_NAME;
1166           l_error_rec.idx := i;
1167           lock_row(
1168             p_api_version                  => p_api_version,
1169             p_init_msg_list                => OKC_API.G_FALSE,
1170             x_return_status                => l_error_rec.error_type,
1171             x_msg_count                    => l_error_rec.msg_count,
1172             x_msg_data                     => l_error_rec.msg_data,
1173             p_ipm_rec                      => p_ipm_tbl(i));
1174           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
1175             l_error_rec.sqlcode := SQLCODE;
1176             load_error_tbl(l_error_rec, px_error_tbl);
1177           ELSE
1178             x_msg_count := l_error_rec.msg_count;
1179             x_msg_data := l_error_rec.msg_data;
1180           END IF;
1181         EXCEPTION
1182           WHEN OKC_API.G_EXCEPTION_ERROR THEN
1183             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
1184             l_error_rec.sqlcode := SQLCODE;
1185             load_error_tbl(l_error_rec, px_error_tbl);
1186           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1187             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
1188             l_error_rec.sqlcode := SQLCODE;
1189             load_error_tbl(l_error_rec, px_error_tbl);
1190           WHEN OTHERS THEN
1191             l_error_rec.error_type := 'OTHERS';
1192             l_error_rec.sqlcode := SQLCODE;
1193             load_error_tbl(l_error_rec, px_error_tbl);
1194         END;
1195         EXIT WHEN (i = p_ipm_tbl.LAST);
1196         i := p_ipm_tbl.NEXT(i);
1197       END LOOP;
1198     END IF;
1199     -- Loop through the error_tbl to find the error with the highest severity
1200     -- and return it.
1201     x_return_status := find_highest_exception(px_error_tbl);
1202     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1203   EXCEPTION
1204     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1205       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1206       (
1207         l_api_name,
1208         G_PKG_NAME,
1209         'OKC_API.G_RET_STS_ERROR',
1210         x_msg_count,
1211         x_msg_data,
1212         '_PVT'
1213       );
1214     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1215       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1216       (
1217         l_api_name,
1218         G_PKG_NAME,
1219         'OKC_API.G_RET_STS_UNEXP_ERROR',
1220         x_msg_count,
1221         x_msg_data,
1222         '_PVT'
1223       );
1224     WHEN OTHERS THEN
1225       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1226       (
1227         l_api_name,
1228         G_PKG_NAME,
1229         'OTHERS',
1230         x_msg_count,
1231         x_msg_data,
1232         '_PVT'
1233       );
1234   END lock_row;
1235   -------------------------------------
1236   -- PL/SQL TBL lock_row for:IPM_TBL --
1237   -------------------------------------
1238   PROCEDURE lock_row(
1239     p_api_version                  IN NUMBER,
1240     p_init_msg_list                IN VARCHAR2,
1241     x_return_status                OUT NOCOPY VARCHAR2,
1242     x_msg_count                    OUT NOCOPY NUMBER,
1243     x_msg_data                     OUT NOCOPY VARCHAR2,
1244     p_ipm_tbl                      IN ipm_tbl_type) IS
1245 
1246     l_api_version                  CONSTANT NUMBER := 1;
1247     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_lock_row';
1248     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1249     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
1250   BEGIN
1251     OKC_API.init_msg_list(p_init_msg_list);
1252     -- Make sure PL/SQL table has recrods in it before passing
1253     IF (p_ipm_tbl.COUNT > 0) THEN
1254       lock_row(
1255         p_api_version                  => p_api_version,
1256         p_init_msg_list                => OKC_API.G_FALSE,
1257         x_return_status                => x_return_status,
1258         x_msg_count                    => x_msg_count,
1259         x_msg_data                     => x_msg_data,
1260         p_ipm_tbl                      => p_ipm_tbl,
1261         px_error_tbl                   => l_error_tbl);
1262     END IF;
1263     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1264   EXCEPTION
1265     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1266       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1267       (
1268         l_api_name,
1269         G_PKG_NAME,
1270         'OKC_API.G_RET_STS_ERROR',
1271         x_msg_count,
1272         x_msg_data,
1273         '_PVT'
1274       );
1275     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1276       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1277       (
1278         l_api_name,
1279         G_PKG_NAME,
1280         'OKC_API.G_RET_STS_UNEXP_ERROR',
1281         x_msg_count,
1282         x_msg_data,
1283         '_PVT'
1284       );
1285     WHEN OTHERS THEN
1286       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1287       (
1288         l_api_name,
1289         G_PKG_NAME,
1290         'OTHERS',
1291         x_msg_count,
1292         x_msg_data,
1293         '_PVT'
1294       );
1295   END lock_row;
1296   ---------------------------------------------------------------------------
1297   -- PROCEDURE update_row
1298   ---------------------------------------------------------------------------
1299   -------------------------------------
1300   -- update_row for:OKL_TRX_PARAMS_B --
1301   -------------------------------------
1302   PROCEDURE update_row(
1303     p_init_msg_list                IN VARCHAR2,
1304     x_return_status                OUT NOCOPY VARCHAR2,
1305     x_msg_count                    OUT NOCOPY NUMBER,
1306     x_msg_data                     OUT NOCOPY VARCHAR2,
1307     p_ipm_rec                      IN ipm_rec_type,
1308     x_ipm_rec                      OUT NOCOPY ipm_rec_type) IS
1309 
1310     l_api_version                  CONSTANT NUMBER := 1;
1311     l_api_name                     CONSTANT VARCHAR2(30) := 'B_update_row';
1312     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1313     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
1314     l_def_ipm_rec                  ipm_rec_type;
1315     l_row_notfound                 BOOLEAN := TRUE;
1316     ----------------------------------
1317     -- FUNCTION populate_new_record --
1318     ----------------------------------
1319     FUNCTION populate_new_record (
1320       p_ipm_rec IN ipm_rec_type,
1321       x_ipm_rec OUT NOCOPY ipm_rec_type
1322     ) RETURN VARCHAR2 IS
1323       l_ipm_rec                      ipm_rec_type;
1324       l_row_notfound                 BOOLEAN := TRUE;
1325       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1326     BEGIN
1327       x_ipm_rec := p_ipm_rec;
1328       -- Get current database values
1329       l_ipm_rec := get_rec(p_ipm_rec, l_return_status);
1330       IF (l_return_status = OKC_API.G_RET_STS_SUCCESS) THEN
1331         IF (x_ipm_rec.id = OKC_API.G_MISS_NUM)
1332         THEN
1333           x_ipm_rec.id := l_ipm_rec.id;
1334         END IF;
1335         IF (x_ipm_rec.source_table = OKC_API.G_MISS_CHAR)
1336         THEN
1337           x_ipm_rec.source_table := l_ipm_rec.source_table;
1338         END IF;
1339         IF (x_ipm_rec.source_id = OKC_API.G_MISS_NUM)
1340         THEN
1341           x_ipm_rec.source_id := l_ipm_rec.source_id;
1342         END IF;
1343         IF (x_ipm_rec.param_name = OKC_API.G_MISS_CHAR)
1344         THEN
1345           x_ipm_rec.param_name := l_ipm_rec.param_name;
1346         END IF;
1347         IF (x_ipm_rec.param_value = OKC_API.G_MISS_CHAR)
1348         THEN
1349           x_ipm_rec.param_value := l_ipm_rec.param_value;
1350         END IF;
1351         IF (x_ipm_rec.created_by = OKC_API.G_MISS_NUM)
1352         THEN
1353           x_ipm_rec.created_by := l_ipm_rec.created_by;
1354         END IF;
1355         IF (x_ipm_rec.creation_date = OKC_API.G_MISS_DATE)
1356         THEN
1357           x_ipm_rec.creation_date := l_ipm_rec.creation_date;
1358         END IF;
1359         IF (x_ipm_rec.last_updated_by = OKC_API.G_MISS_NUM)
1360         THEN
1361           x_ipm_rec.last_updated_by := l_ipm_rec.last_updated_by;
1362         END IF;
1363         IF (x_ipm_rec.last_update_date = OKC_API.G_MISS_DATE)
1364         THEN
1365           x_ipm_rec.last_update_date := l_ipm_rec.last_update_date;
1366         END IF;
1367         IF (x_ipm_rec.last_update_login = OKC_API.G_MISS_NUM)
1368         THEN
1369           x_ipm_rec.last_update_login := l_ipm_rec.last_update_login;
1370         END IF;
1371       END IF;
1372       RETURN(l_return_status);
1373     END populate_new_record;
1374     -----------------------------------------
1375     -- Set_Attributes for:OKL_TRX_PARAMS_B --
1376     -----------------------------------------
1377     FUNCTION Set_Attributes (
1378       p_ipm_rec IN ipm_rec_type,
1379       x_ipm_rec OUT NOCOPY ipm_rec_type
1380     ) RETURN VARCHAR2 IS
1381       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1382     BEGIN
1383       x_ipm_rec := p_ipm_rec;
1384       RETURN(l_return_status);
1385     END Set_Attributes;
1386   BEGIN
1387     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
1388                                               p_init_msg_list,
1389                                               '_PVT',
1390                                               x_return_status);
1391     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1392       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1393     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1394       RAISE OKC_API.G_EXCEPTION_ERROR;
1395     END IF;
1396     --- Setting item attributes
1397     l_return_status := Set_Attributes(
1398       p_ipm_rec,                         -- IN
1399       l_ipm_rec);                        -- OUT
1400     --- If any errors happen abort API
1401     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1402       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1403     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1404       RAISE OKC_API.G_EXCEPTION_ERROR;
1405     END IF;
1406     l_return_status := populate_new_record(l_ipm_rec, l_def_ipm_rec);
1407     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1408       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1409     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1410       RAISE OKC_API.G_EXCEPTION_ERROR;
1411     END IF;
1412     UPDATE OKL_TRX_PARAMS_B
1413     SET SOURCE_TABLE = l_def_ipm_rec.source_table,
1414         SOURCE_ID = l_def_ipm_rec.source_id,
1415         PARAM_NAME = l_def_ipm_rec.param_name,
1416         PARAM_VALUE = l_def_ipm_rec.param_value,
1417         CREATED_BY = l_def_ipm_rec.created_by,
1418         CREATION_DATE = l_def_ipm_rec.creation_date,
1419         LAST_UPDATED_BY = l_def_ipm_rec.last_updated_by,
1420         LAST_UPDATE_DATE = l_def_ipm_rec.last_update_date,
1421         LAST_UPDATE_LOGIN = l_def_ipm_rec.last_update_login
1422     WHERE ID = l_def_ipm_rec.id;
1423 
1424     x_ipm_rec := l_ipm_rec;
1425     x_return_status := l_return_status;
1426     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1427   EXCEPTION
1428     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1429       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1430       (
1431         l_api_name,
1432         G_PKG_NAME,
1433         'OKC_API.G_RET_STS_ERROR',
1434         x_msg_count,
1435         x_msg_data,
1436         '_PVT'
1437       );
1438     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1439       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1440       (
1441         l_api_name,
1442         G_PKG_NAME,
1443         'OKC_API.G_RET_STS_UNEXP_ERROR',
1444         x_msg_count,
1445         x_msg_data,
1446         '_PVT'
1447       );
1448     WHEN OTHERS THEN
1449       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1450       (
1451         l_api_name,
1452         G_PKG_NAME,
1453         'OTHERS',
1454         x_msg_count,
1455         x_msg_data,
1456         '_PVT'
1457       );
1458   END update_row;
1459   -------------------------------------
1460   -- update_row for:OKL_TRX_PARAMS_B --
1461   -------------------------------------
1462   PROCEDURE update_row(
1463     p_api_version                  IN NUMBER,
1464     p_init_msg_list                IN VARCHAR2,
1465     x_return_status                OUT NOCOPY VARCHAR2,
1466     x_msg_count                    OUT NOCOPY NUMBER,
1467     x_msg_data                     OUT NOCOPY VARCHAR2,
1468     p_ipm_rec                      IN ipm_rec_type,
1469     x_ipm_rec                      OUT NOCOPY ipm_rec_type) IS
1470 
1471     l_api_version                  CONSTANT NUMBER := 1;
1472     l_api_name                     CONSTANT VARCHAR2(30) := 'V_update_row';
1473     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1474     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
1475     l_def_ipm_rec                  ipm_rec_type;
1476     l_db_ipm_rec                   ipm_rec_type;
1477     lx_ipm_rec                     ipm_rec_type;
1478     -------------------------------
1479     -- FUNCTION fill_who_columns --
1480     -------------------------------
1481     FUNCTION fill_who_columns (
1482       p_ipm_rec IN ipm_rec_type
1483     ) RETURN ipm_rec_type IS
1484       l_ipm_rec ipm_rec_type := p_ipm_rec;
1485     BEGIN
1486       l_ipm_rec.LAST_UPDATE_DATE := SYSDATE;
1487       l_ipm_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1488       l_ipm_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
1489       RETURN(l_ipm_rec);
1490     END fill_who_columns;
1491     ----------------------------------
1492     -- FUNCTION populate_new_record --
1493     ----------------------------------
1494     FUNCTION populate_new_record (
1495       p_ipm_rec IN ipm_rec_type,
1496       x_ipm_rec OUT NOCOPY ipm_rec_type
1497     ) RETURN VARCHAR2 IS
1498       l_row_notfound                 BOOLEAN := TRUE;
1499       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1500     BEGIN
1501       x_ipm_rec := p_ipm_rec;
1502       -- Get current database values
1503       -- NOTE: Never assign the OBJECT_VERSION_NUMBER.  Force the user to pass it
1504       --       so it may be verified through LOCK_ROW.
1505       l_db_ipm_rec := get_rec(p_ipm_rec, l_return_status);
1506       IF (l_return_status = OKC_API.G_RET_STS_SUCCESS) THEN
1507         IF (x_ipm_rec.id = OKC_API.G_MISS_NUM)
1508         THEN
1509           x_ipm_rec.id := l_db_ipm_rec.id;
1510         END IF;
1511         IF (x_ipm_rec.source_table = OKC_API.G_MISS_CHAR)
1512         THEN
1513           x_ipm_rec.source_table := l_db_ipm_rec.source_table;
1514         END IF;
1515         IF (x_ipm_rec.source_id = OKC_API.G_MISS_NUM)
1516         THEN
1517           x_ipm_rec.source_id := l_db_ipm_rec.source_id;
1518         END IF;
1519         IF (x_ipm_rec.param_name = OKC_API.G_MISS_CHAR)
1520         THEN
1521           x_ipm_rec.param_name := l_db_ipm_rec.param_name;
1522         END IF;
1523         IF (x_ipm_rec.param_value = OKC_API.G_MISS_CHAR)
1524         THEN
1525           x_ipm_rec.param_value := l_db_ipm_rec.param_value;
1526         END IF;
1527         IF (x_ipm_rec.created_by = OKC_API.G_MISS_NUM)
1528         THEN
1529           x_ipm_rec.created_by := l_db_ipm_rec.created_by;
1530         END IF;
1531         IF (x_ipm_rec.creation_date = OKC_API.G_MISS_DATE)
1532         THEN
1533           x_ipm_rec.creation_date := l_db_ipm_rec.creation_date;
1534         END IF;
1535         IF (x_ipm_rec.last_updated_by = OKC_API.G_MISS_NUM)
1536         THEN
1537           x_ipm_rec.last_updated_by := l_db_ipm_rec.last_updated_by;
1538         END IF;
1539         IF (x_ipm_rec.last_update_date = OKC_API.G_MISS_DATE)
1540         THEN
1541           x_ipm_rec.last_update_date := l_db_ipm_rec.last_update_date;
1542         END IF;
1543         IF (x_ipm_rec.last_update_login = OKC_API.G_MISS_NUM)
1544         THEN
1545           x_ipm_rec.last_update_login := l_db_ipm_rec.last_update_login;
1546         END IF;
1547       END IF;
1548       RETURN(l_return_status);
1549     END populate_new_record;
1550     -----------------------------------------
1551     -- Set_Attributes for:OKL_TRX_PARAMS_B --
1552     -----------------------------------------
1553     FUNCTION Set_Attributes (
1554       p_ipm_rec IN ipm_rec_type,
1555       x_ipm_rec OUT NOCOPY ipm_rec_type
1556     ) RETURN VARCHAR2 IS
1557       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1558     BEGIN
1559       x_ipm_rec := p_ipm_rec;
1560       RETURN(l_return_status);
1561     END Set_Attributes;
1562   BEGIN
1563     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
1564                                               G_PKG_NAME,
1565                                               p_init_msg_list,
1566                                               l_api_version,
1567                                               p_api_version,
1568                                               '_PVT',
1569                                               x_return_status);
1570     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1571       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1572     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1573       RAISE OKC_API.G_EXCEPTION_ERROR;
1574     END IF;
1575     --- Setting item attributes
1576     l_return_status := Set_Attributes(
1577       p_ipm_rec,                         -- IN
1578       x_ipm_rec);                        -- OUT
1579     --- If any errors happen abort API
1580     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1581       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1582     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1583       RAISE OKC_API.G_EXCEPTION_ERROR;
1584     END IF;
1585     l_return_status := populate_new_record(l_ipm_rec, l_def_ipm_rec);
1586     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1587       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1588     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1589       RAISE OKC_API.G_EXCEPTION_ERROR;
1590     END IF;
1591     l_def_ipm_rec := fill_who_columns(l_def_ipm_rec);
1592     --- Validate all non-missing attributes (Item Level Validation)
1593     l_return_status := Validate_Attributes(l_def_ipm_rec);
1594     --- If any errors happen abort API
1595     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1596       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1597     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1598       RAISE OKC_API.G_EXCEPTION_ERROR;
1599     END IF;
1600     l_return_status := Validate_Record(l_def_ipm_rec, l_db_ipm_rec);
1601     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1602       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1603     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1604       RAISE OKC_API.G_EXCEPTION_ERROR;
1605     END IF;
1606 
1607     -- Lock the Record
1608     lock_row(
1609       p_api_version                  => p_api_version,
1610       p_init_msg_list                => p_init_msg_list,
1611       x_return_status                => l_return_status,
1612       x_msg_count                    => x_msg_count,
1613       x_msg_data                     => x_msg_data,
1614       p_ipm_rec                      => p_ipm_rec);
1615     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1616       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1617     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1618       RAISE OKC_API.G_EXCEPTION_ERROR;
1619     END IF;
1620 
1621     -----------------------------------------
1622     -- Move VIEW record to "Child" records --
1623     -----------------------------------------
1624     migrate(l_def_ipm_rec, l_ipm_rec);
1625     -----------------------------------------------
1626     -- Call the UPDATE_ROW for each child record --
1627     -----------------------------------------------
1628     update_row(
1629       p_init_msg_list,
1630       l_return_status,
1631       x_msg_count,
1632       x_msg_data,
1633       l_ipm_rec,
1634       lx_ipm_rec
1635     );
1636     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1637       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1638     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1639       RAISE OKC_API.G_EXCEPTION_ERROR;
1640     END IF;
1641     migrate(lx_ipm_rec, l_def_ipm_rec);
1642     x_ipm_rec := l_def_ipm_rec;
1643     x_return_status := l_return_status;
1644     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1645   EXCEPTION
1646     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1647       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1648       (
1649         l_api_name,
1650         G_PKG_NAME,
1651         'OKC_API.G_RET_STS_ERROR',
1652         x_msg_count,
1653         x_msg_data,
1654         '_PVT'
1655       );
1656     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1657       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1658       (
1659         l_api_name,
1660         G_PKG_NAME,
1661         'OKC_API.G_RET_STS_UNEXP_ERROR',
1662         x_msg_count,
1663         x_msg_data,
1664         '_PVT'
1665       );
1666     WHEN OTHERS THEN
1667       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1668       (
1669         l_api_name,
1670         G_PKG_NAME,
1671         'OTHERS',
1672         x_msg_count,
1673         x_msg_data,
1674         '_PVT'
1675       );
1676   END update_row;
1677   ---------------------------------------
1678   -- PL/SQL TBL update_row for:ipm_tbl --
1679   ---------------------------------------
1680   PROCEDURE update_row(
1681     p_api_version                  IN NUMBER,
1682     p_init_msg_list                IN VARCHAR2,
1683     x_return_status                OUT NOCOPY VARCHAR2,
1684     x_msg_count                    OUT NOCOPY NUMBER,
1685     x_msg_data                     OUT NOCOPY VARCHAR2,
1686     p_ipm_tbl                      IN ipm_tbl_type,
1687     x_ipm_tbl                      OUT NOCOPY ipm_tbl_type,
1688     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
1689 
1690     l_api_version                  CONSTANT NUMBER := 1;
1691     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_update_row';
1692     i                              NUMBER := 0;
1693   BEGIN
1694     OKC_API.init_msg_list(p_init_msg_list);
1695     -- Make sure PL/SQL table has records in it before passing
1696     IF (p_ipm_tbl.COUNT > 0) THEN
1697       i := p_ipm_tbl.FIRST;
1698       LOOP
1699         DECLARE
1700           l_error_rec         OKC_API.ERROR_REC_TYPE;
1701         BEGIN
1702           l_error_rec.api_name := l_api_name;
1703           l_error_rec.api_package := G_PKG_NAME;
1704           l_error_rec.idx := i;
1705           update_row (
1706             p_api_version                  => p_api_version,
1707             p_init_msg_list                => OKC_API.G_FALSE,
1708             x_return_status                => l_error_rec.error_type,
1709             x_msg_count                    => l_error_rec.msg_count,
1710             x_msg_data                     => l_error_rec.msg_data,
1711             p_ipm_rec                      => p_ipm_tbl(i),
1712             x_ipm_rec                      => x_ipm_tbl(i));
1713           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
1714             l_error_rec.sqlcode := SQLCODE;
1715             load_error_tbl(l_error_rec, px_error_tbl);
1716           ELSE
1717             x_msg_count := l_error_rec.msg_count;
1718             x_msg_data := l_error_rec.msg_data;
1719           END IF;
1720         EXCEPTION
1721           WHEN OKC_API.G_EXCEPTION_ERROR THEN
1722             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
1723             l_error_rec.sqlcode := SQLCODE;
1724             load_error_tbl(l_error_rec, px_error_tbl);
1725           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1726             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
1727             l_error_rec.sqlcode := SQLCODE;
1728             load_error_tbl(l_error_rec, px_error_tbl);
1729           WHEN OTHERS THEN
1730             l_error_rec.error_type := 'OTHERS';
1731             l_error_rec.sqlcode := SQLCODE;
1732             load_error_tbl(l_error_rec, px_error_tbl);
1733         END;
1734         EXIT WHEN (i = p_ipm_tbl.LAST);
1735         i := p_ipm_tbl.NEXT(i);
1736       END LOOP;
1737     END IF;
1738     -- Loop through the error_tbl to find the error with the highest severity
1739     -- and return it.
1740     x_return_status := find_highest_exception(px_error_tbl);
1741     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1742   EXCEPTION
1743     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1744       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1745       (
1746         l_api_name,
1747         G_PKG_NAME,
1748         'OKC_API.G_RET_STS_ERROR',
1749         x_msg_count,
1750         x_msg_data,
1751         '_PVT'
1752       );
1753     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1754       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1755       (
1756         l_api_name,
1757         G_PKG_NAME,
1758         'OKC_API.G_RET_STS_UNEXP_ERROR',
1759         x_msg_count,
1760         x_msg_data,
1761         '_PVT'
1762       );
1763     WHEN OTHERS THEN
1764       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1765       (
1766         l_api_name,
1767         G_PKG_NAME,
1768         'OTHERS',
1769         x_msg_count,
1770         x_msg_data,
1771         '_PVT'
1772       );
1773   END update_row;
1774 
1775   ---------------------------------------
1776   -- PL/SQL TBL update_row for:IPM_TBL --
1777   ---------------------------------------
1778   PROCEDURE update_row(
1779     p_api_version                  IN NUMBER,
1780     p_init_msg_list                IN VARCHAR2,
1781     x_return_status                OUT NOCOPY VARCHAR2,
1782     x_msg_count                    OUT NOCOPY NUMBER,
1783     x_msg_data                     OUT NOCOPY VARCHAR2,
1784     p_ipm_tbl                      IN ipm_tbl_type,
1785     x_ipm_tbl                      OUT NOCOPY ipm_tbl_type) IS
1786 
1787     l_api_version                  CONSTANT NUMBER := 1;
1788     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_update_row';
1789     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1790     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
1791   BEGIN
1792     OKC_API.init_msg_list(p_init_msg_list);
1793     -- Make sure PL/SQL table has records in it before passing
1794     IF (p_ipm_tbl.COUNT > 0) THEN
1795       update_row (
1796         p_api_version                  => p_api_version,
1797         p_init_msg_list                => OKC_API.G_FALSE,
1798         x_return_status                => x_return_status,
1799         x_msg_count                    => x_msg_count,
1800         x_msg_data                     => x_msg_data,
1801         p_ipm_tbl                      => p_ipm_tbl,
1802         x_ipm_tbl                      => x_ipm_tbl,
1803         px_error_tbl                   => l_error_tbl);
1804     END IF;
1805     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1806   EXCEPTION
1807     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1808       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1809       (
1810         l_api_name,
1811         G_PKG_NAME,
1812         'OKC_API.G_RET_STS_ERROR',
1813         x_msg_count,
1814         x_msg_data,
1815         '_PVT'
1816       );
1817     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1818       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1819       (
1820         l_api_name,
1821         G_PKG_NAME,
1822         'OKC_API.G_RET_STS_UNEXP_ERROR',
1823         x_msg_count,
1824         x_msg_data,
1825         '_PVT'
1826       );
1827     WHEN OTHERS THEN
1828       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1829       (
1830         l_api_name,
1831         G_PKG_NAME,
1832         'OTHERS',
1833         x_msg_count,
1834         x_msg_data,
1835         '_PVT'
1836       );
1837   END update_row;
1838 
1839   ---------------------------------------------------------------------------
1840   -- PROCEDURE delete_row
1841   ---------------------------------------------------------------------------
1842   -------------------------------------
1843   -- delete_row for:OKL_TRX_PARAMS_B --
1844   -------------------------------------
1845   PROCEDURE delete_row(
1846     p_init_msg_list                IN VARCHAR2,
1847     x_return_status                OUT NOCOPY VARCHAR2,
1848     x_msg_count                    OUT NOCOPY NUMBER,
1849     x_msg_data                     OUT NOCOPY VARCHAR2,
1850     p_ipm_rec                      IN ipm_rec_type) IS
1851 
1852     l_api_version                  CONSTANT NUMBER := 1;
1853     l_api_name                     CONSTANT VARCHAR2(30) := 'B_delete_row';
1854     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1855     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
1856     l_row_notfound                 BOOLEAN := TRUE;
1857   BEGIN
1858     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
1859                                               p_init_msg_list,
1860                                               '_PVT',
1861                                               x_return_status);
1862     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1863       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1864     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1865       RAISE OKC_API.G_EXCEPTION_ERROR;
1866     END IF;
1867 
1868     DELETE FROM OKL_TRX_PARAMS_B
1869      WHERE ID = p_ipm_rec.id;
1870 
1871     x_return_status := l_return_status;
1872     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1873   EXCEPTION
1874     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1875       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1876       (
1877         l_api_name,
1878         G_PKG_NAME,
1879         'OKC_API.G_RET_STS_ERROR',
1880         x_msg_count,
1881         x_msg_data,
1882         '_PVT'
1883       );
1884     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1885       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1886       (
1887         l_api_name,
1888         G_PKG_NAME,
1889         'OKC_API.G_RET_STS_UNEXP_ERROR',
1890         x_msg_count,
1891         x_msg_data,
1892         '_PVT'
1893       );
1894     WHEN OTHERS THEN
1895       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1896       (
1897         l_api_name,
1898         G_PKG_NAME,
1899         'OTHERS',
1900         x_msg_count,
1901         x_msg_data,
1902         '_PVT'
1903       );
1904   END delete_row;
1905   -------------------------------------
1906   -- delete_row for:OKL_TRX_PARAMS_B --
1907   -------------------------------------
1908   PROCEDURE delete_row(
1909     p_api_version                  IN NUMBER,
1910     p_init_msg_list                IN VARCHAR2,
1911     x_return_status                OUT NOCOPY VARCHAR2,
1912     x_msg_count                    OUT NOCOPY NUMBER,
1913     x_msg_data                     OUT NOCOPY VARCHAR2,
1914     p_ipm_rec                      IN ipm_rec_type) IS
1915 
1916     l_api_version                  CONSTANT NUMBER := 1;
1917     l_api_name                     CONSTANT VARCHAR2(30) := 'V_delete_row';
1918     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1919     l_ipm_rec                      ipm_rec_type := p_ipm_rec;
1920   BEGIN
1921     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
1922                                               G_PKG_NAME,
1923                                               p_init_msg_list,
1924                                               l_api_version,
1925                                               p_api_version,
1926                                               '_PVT',
1927                                               x_return_status);
1928     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1929       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1930     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1931       RAISE OKC_API.G_EXCEPTION_ERROR;
1932     END IF;
1933     -----------------------------------------
1934     -- Move VIEW record to "Child" records --
1935     -----------------------------------------
1936     migrate(l_ipm_rec, l_ipm_rec);
1937     -----------------------------------------------
1938     -- Call the DELETE_ROW for each child record --
1939     -----------------------------------------------
1940     delete_row(
1941       p_init_msg_list,
1942       l_return_status,
1943       x_msg_count,
1944       x_msg_data,
1945       l_ipm_rec
1946     );
1947     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1948       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1949     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
1950       RAISE OKC_API.G_EXCEPTION_ERROR;
1951     END IF;
1952     x_return_status := l_return_status;
1953     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
1954   EXCEPTION
1955     WHEN OKC_API.G_EXCEPTION_ERROR THEN
1956       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1957       (
1958         l_api_name,
1959         G_PKG_NAME,
1960         'OKC_API.G_RET_STS_ERROR',
1961         x_msg_count,
1962         x_msg_data,
1963         '_PVT'
1964       );
1965     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1966       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1967       (
1968         l_api_name,
1969         G_PKG_NAME,
1970         'OKC_API.G_RET_STS_UNEXP_ERROR',
1971         x_msg_count,
1972         x_msg_data,
1973         '_PVT'
1974       );
1975     WHEN OTHERS THEN
1976       x_return_status := OKC_API.HANDLE_EXCEPTIONS
1977       (
1978         l_api_name,
1979         G_PKG_NAME,
1980         'OTHERS',
1981         x_msg_count,
1982         x_msg_data,
1983         '_PVT'
1984       );
1985   END delete_row;
1986   ------------------------------------------------
1987   -- PL/SQL TBL delete_row for:OKL_TRX_PARAMS_B --
1988   ------------------------------------------------
1989   PROCEDURE delete_row(
1990     p_api_version                  IN NUMBER,
1991     p_init_msg_list                IN VARCHAR2,
1992     x_return_status                OUT NOCOPY VARCHAR2,
1993     x_msg_count                    OUT NOCOPY NUMBER,
1994     x_msg_data                     OUT NOCOPY VARCHAR2,
1995     p_ipm_tbl                      IN ipm_tbl_type,
1996     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
1997 
1998     l_api_version                  CONSTANT NUMBER := 1;
1999     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_delete_row';
2000     i                              NUMBER := 0;
2001   BEGIN
2002     OKC_API.init_msg_list(p_init_msg_list);
2003     -- Make sure PL/SQL table has records in it before passing
2004     IF (p_ipm_tbl.COUNT > 0) THEN
2005       i := p_ipm_tbl.FIRST;
2006       LOOP
2007         DECLARE
2008           l_error_rec         OKC_API.ERROR_REC_TYPE;
2009         BEGIN
2010           l_error_rec.api_name := l_api_name;
2011           l_error_rec.api_package := G_PKG_NAME;
2012           l_error_rec.idx := i;
2013           delete_row (
2014             p_api_version                  => p_api_version,
2015             p_init_msg_list                => OKC_API.G_FALSE,
2016             x_return_status                => l_error_rec.error_type,
2017             x_msg_count                    => l_error_rec.msg_count,
2018             x_msg_data                     => l_error_rec.msg_data,
2019             p_ipm_rec                      => p_ipm_tbl(i));
2020           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
2021             l_error_rec.sqlcode := SQLCODE;
2022             load_error_tbl(l_error_rec, px_error_tbl);
2023           ELSE
2024             x_msg_count := l_error_rec.msg_count;
2025             x_msg_data := l_error_rec.msg_data;
2026           END IF;
2027         EXCEPTION
2028           WHEN OKC_API.G_EXCEPTION_ERROR THEN
2029             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
2030             l_error_rec.sqlcode := SQLCODE;
2031             load_error_tbl(l_error_rec, px_error_tbl);
2032           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2033             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
2034             l_error_rec.sqlcode := SQLCODE;
2035             load_error_tbl(l_error_rec, px_error_tbl);
2036           WHEN OTHERS THEN
2037             l_error_rec.error_type := 'OTHERS';
2038             l_error_rec.sqlcode := SQLCODE;
2039             load_error_tbl(l_error_rec, px_error_tbl);
2040         END;
2041         EXIT WHEN (i = p_ipm_tbl.LAST);
2042         i := p_ipm_tbl.NEXT(i);
2043       END LOOP;
2044     END IF;
2045     -- Loop through the error_tbl to find the error with the highest severity
2046     -- and return it.
2047     x_return_status := find_highest_exception(px_error_tbl);
2048     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
2049   EXCEPTION
2050     WHEN OKC_API.G_EXCEPTION_ERROR THEN
2051       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2052       (
2053         l_api_name,
2054         G_PKG_NAME,
2055         'OKC_API.G_RET_STS_ERROR',
2056         x_msg_count,
2057         x_msg_data,
2058         '_PVT'
2059       );
2060     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2061       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2062       (
2063         l_api_name,
2064         G_PKG_NAME,
2065         'OKC_API.G_RET_STS_UNEXP_ERROR',
2066         x_msg_count,
2067         x_msg_data,
2068         '_PVT'
2069       );
2070     WHEN OTHERS THEN
2071       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2072       (
2073         l_api_name,
2074         G_PKG_NAME,
2075         'OTHERS',
2076         x_msg_count,
2077         x_msg_data,
2078         '_PVT'
2079       );
2080   END delete_row;
2081 
2082   ------------------------------------------------
2083   -- PL/SQL TBL delete_row for:OKL_TRX_PARAMS_B --
2084   ------------------------------------------------
2085   PROCEDURE delete_row(
2086     p_api_version                  IN NUMBER,
2087     p_init_msg_list                IN VARCHAR2,
2088     x_return_status                OUT NOCOPY VARCHAR2,
2089     x_msg_count                    OUT NOCOPY NUMBER,
2090     x_msg_data                     OUT NOCOPY VARCHAR2,
2091     p_ipm_tbl                      IN ipm_tbl_type) IS
2092 
2093     l_api_version                  CONSTANT NUMBER := 1;
2094     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_delete_row';
2095     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
2096     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
2097   BEGIN
2098     OKC_API.init_msg_list(p_init_msg_list);
2099     -- Make sure PL/SQL table has records in it before passing
2100     IF (p_ipm_tbl.COUNT > 0) THEN
2101       delete_row (
2102         p_api_version                  => p_api_version,
2103         p_init_msg_list                => OKC_API.G_FALSE,
2104         x_return_status                => x_return_status,
2105         x_msg_count                    => x_msg_count,
2106         x_msg_data                     => x_msg_data,
2107         p_ipm_tbl                      => p_ipm_tbl,
2108         px_error_tbl                   => l_error_tbl);
2109     END IF;
2110     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
2111   EXCEPTION
2112     WHEN OKC_API.G_EXCEPTION_ERROR THEN
2113       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2114       (
2115         l_api_name,
2116         G_PKG_NAME,
2117         'OKC_API.G_RET_STS_ERROR',
2118         x_msg_count,
2119         x_msg_data,
2120         '_PVT'
2121       );
2122     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2123       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2124       (
2125         l_api_name,
2126         G_PKG_NAME,
2127         'OKC_API.G_RET_STS_UNEXP_ERROR',
2128         x_msg_count,
2129         x_msg_data,
2130         '_PVT'
2131       );
2132     WHEN OTHERS THEN
2133       x_return_status := OKC_API.HANDLE_EXCEPTIONS
2134       (
2135         l_api_name,
2136         G_PKG_NAME,
2137         'OTHERS',
2138         x_msg_count,
2139         x_msg_data,
2140         '_PVT'
2141       );
2142   END delete_row;
2143 
2144 END OKL_IPM_PVT;