DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_QCN_PVT

Source


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