95: l_api_name CONSTANT VARCHAR2 (30) := 'CREATE_SPEC';
96: l_api_version CONSTANT NUMBER := 2.0;
97: l_msg_count NUMBER :=0;
98: l_msg_data VARCHAR2(2000);
99: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
100: l_spec GMD_SPECIFICATIONS%ROWTYPE;
101: l_spec_out GMD_SPECIFICATIONS%ROWTYPE;
102: l_spec_tests GMD_SPEC_TESTS%ROWTYPE;
103: l_spec_tests_out GMD_SPEC_TESTS%ROWTYPE;
132: SAVEPOINT Create_Spec;
133:
134: -- Standard call to check for call compatibility
135: -- =============================================
136: IF NOT FND_API.Compatible_API_CALL
137: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
138: THEN
139: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
140: END IF;
135: -- =============================================
136: IF NOT FND_API.Compatible_API_CALL
137: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
138: THEN
139: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
140: END IF;
141:
142: -- Initialize message list if p_int_msg_list is set TRUE.
143: -- ======================================================
140: END IF;
141:
142: -- Initialize message list if p_int_msg_list is set TRUE.
143: -- ======================================================
144: IF FND_API.to_boolean(p_init_msg_list)
145: THEN
146: FND_MSG_PUB.Initialize;
147: END IF;
148:
147: END IF;
148:
149: -- Initialize API return Parameters
150: -- ================================
151: l_return_status := FND_API.G_RET_STS_SUCCESS;
152:
153: -- Validate User Name Parameter
154: -- ============================
155: GMD_SPEC_GRP.Get_Who ( p_user_name => p_user_name
158: IF NVL(l_user_id, -1) < 0
159: THEN
160: GMD_API_PUB.Log_Message('GMD_INVALID_USER_NAME',
161: 'l_user_name', p_user_name);
162: RAISE FND_API.G_EXC_ERROR;
163:
164: ELSE
165: -- Added below for BUG 2711643. Hverddin
166: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
165: -- Added below for BUG 2711643. Hverddin
166: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
167: x_return_status => l_return_status);
168:
169: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
170: RAISE FND_API.G_EXC_ERROR;
171: END IF;
172:
173: END IF;
166: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
167: x_return_status => l_return_status);
168:
169: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
170: RAISE FND_API.G_EXC_ERROR;
171: END IF;
172:
173: END IF;
174:
202: , p_operation => 'INSERT'
203: , x_return_status => l_return_status
204: );
205:
206: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
207: RAISE FND_API.G_EXC_ERROR;
208: END IF;
209:
210: -- Set the Who column definitions ahead of creating SPEC header
203: , x_return_status => l_return_status
204: );
205:
206: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
207: RAISE FND_API.G_EXC_ERROR;
208: END IF;
209:
210: -- Set the Who column definitions ahead of creating SPEC header
211: -- =============================================================
219: GMD_API_PUB.Log_Message('GMD_FAILED_TO_INSERT_ROW',
220: 'l_table_name', 'GMD_SPECIFICATIONS',
221: 'l_column_name', 'SPEC_ID',
222: 'l_key_value', l_spec.spec_id);
223: RAISE FND_API.G_EXC_ERROR;
224: END IF;
225: -- All test specs must conform to newly created spec_id
226: -- ====================================================
227: l_spec_id := l_spec.spec_id;
233: IF l_spec_id is NULL
234: THEN
235: GMD_API_PUB.Log_Message('GMD_SPEC_ID_REQUIRED');
236: GMD_API_PUB.Log_Message('GMD_SPEC_TEST_REQUIRES_SPEC_ID');
237: RAISE FND_API.G_EXC_ERROR;
238: END IF;
239:
240: END IF;
241:
288: IF ( NVL(l_spec_tests.spec_id, l_spec.spec_id ) <> l_spec_id)
289: THEN
290: GMD_API_PUB.Log_Message('GMD_INCONSISTENT_SPEC_ID',
291: 'SPEC_ID', l_spec_tests.spec_id);
292: RAISE FND_API.G_EXC_ERROR;
293: END IF;
294:
295: -- Ensure SPEC_ID is assigned
296: -- ==========================
305: , x_spec_test => l_spec_tests_out
306: , x_return_status => l_return_status
307: );
308:
309: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
310: -- Message detailing cause of validation failure is already on
311: -- the stack. But ensure the precise record is identified
312: -- ==========================================================
313: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
313: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
314: 'l_table_name', 'GMD_SPEC_TESTS',
315: 'l_column_name', 'TEST_ID',
316: 'l_key_value', l_spec_tests.test_id);
317: RAISE FND_API.G_EXC_ERROR;
318: END IF;
319:
320: l_spec_tests := l_spec_tests_out;
321:
329: GMD_API_PUB.Log_Message('GMD_FAILED_TO_INSERT_ROW',
330: 'l_table_name', 'GMD_SPEC_TESTS',
331: 'l_column_name', 'TEST_ID',
332: 'l_key_value', l_spec_tests.test_id);
333: RAISE FND_API.G_EXC_ERROR;
334: END IF;
335:
336: -- Update Return Parameter Tbl
337: -- ===========================
348: p_spec_id => l_spec_id
349: , x_return_status => l_return_status
350: );
351:
352: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
353: -- Message detailing cause of validation failure is already on
354: -- the stack. But ensure the precise record is identified
355: -- ==========================================================
356: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
356: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
357: 'l_table_name', 'GMD_SPECIFICATIONS',
358: 'l_column_name', 'SPEC_NAME',
359: 'l_key_value', l_spec.spec_name);
360: RAISE FND_API.G_EXC_ERROR;
361: END IF;
362:
363: -- Standard Check of p_commit.
364: -- ==========================
361: END IF;
362:
363: -- Standard Check of p_commit.
364: -- ==========================
365: IF FND_API.to_boolean(p_commit)
366: THEN
367: COMMIT WORK;
368: END IF;
369:
371: x_spec := l_spec;
372: x_spec_tests_tbl := l_spec_tests_tbl;
373:
374: EXCEPTION
375: WHEN FND_API.G_EXC_ERROR THEN
376: ROLLBACK TO Create_Spec;
377: x_return_status := FND_API.G_RET_STS_ERROR;
378: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
379: , p_count => x_msg_count
373:
374: EXCEPTION
375: WHEN FND_API.G_EXC_ERROR THEN
376: ROLLBACK TO Create_Spec;
377: x_return_status := FND_API.G_RET_STS_ERROR;
378: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
379: , p_count => x_msg_count
380: , p_data => x_msg_data
381: );
374: EXCEPTION
375: WHEN FND_API.G_EXC_ERROR THEN
376: ROLLBACK TO Create_Spec;
377: x_return_status := FND_API.G_RET_STS_ERROR;
378: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
379: , p_count => x_msg_count
380: , p_data => x_msg_data
381: );
382:
379: , p_count => x_msg_count
380: , p_data => x_msg_data
381: );
382:
383: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
384: ROLLBACK TO Create_Spec;
385: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
386: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
387: , p_count => x_msg_count
381: );
382:
383: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
384: ROLLBACK TO Create_Spec;
385: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
386: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
387: , p_count => x_msg_count
388: , p_data => x_msg_data
389: );
382:
383: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
384: ROLLBACK TO Create_Spec;
385: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
386: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
387: , p_count => x_msg_count
388: , p_data => x_msg_data
389: );
390:
388: , p_data => x_msg_data
389: );
390:
391: WHEN OTHERS THEN
392: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
393: ROLLBACK TO Create_Spec;
394: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
395: , l_api_name
396: );
394: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
395: , l_api_name
396: );
397:
398: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
399: , p_count => x_msg_count
400: , p_data => x_msg_data
401: );
402:
439: l_api_name CONSTANT VARCHAR2 (30) := 'DELETE_SPEC';
440: l_api_version CONSTANT NUMBER := 1.0;
441: l_msg_count NUMBER :=0;
442: l_msg_data VARCHAR2(2000);
443: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
444: l_spec GMD_SPECIFICATIONS%ROWTYPE;
445: l_deleted_rows NUMBER :=0;
446:
447: BEGIN
452: SAVEPOINT Delete_Spec;
453:
454: -- Standard call to check for call compatibility.
455: -- ==============================================
456: IF NOT FND_API.Compatible_API_CALL
457: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
458: THEN
459: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
460: END IF;
455: -- ==============================================
456: IF NOT FND_API.Compatible_API_CALL
457: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
458: THEN
459: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
460: END IF;
461:
462: -- Initialize message list if p_int_msg_list is set TRUE.
463: -- ======================================================
460: END IF;
461:
462: -- Initialize message list if p_int_msg_list is set TRUE.
463: -- ======================================================
464: IF FND_API.to_boolean(p_init_msg_list)
465: THEN
466: FND_MSG_PUB.Initialize;
467: END IF;
468:
467: END IF;
468:
469: -- Initialize API return Parameters
470: -- ================================
471: x_return_status := FND_API.G_RET_STS_SUCCESS;
472:
473: -- Validate user_name
474: -- ==================
475: GMD_SPEC_GRP.Get_Who ( p_user_name => p_user_name
478: IF NVL(l_spec.last_updated_by, -1) < 0
479: THEN
480: GMD_API_PUB.Log_Message('GMD_INVALID_USER_NAME',
481: 'l_user_name', p_user_name);
482: RAISE FND_API.G_EXC_ERROR;
483: ELSE
484: -- Added below for BUG 2711643. Hverddin
485: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
486: x_return_status => l_return_status);
484: -- Added below for BUG 2711643. Hverddin
485: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
486: x_return_status => l_return_status);
487:
488: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
489: RAISE FND_API.G_EXC_ERROR;
490: END IF;
491:
492: END IF;
485: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
486: x_return_status => l_return_status);
487:
488: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
489: RAISE FND_API.G_EXC_ERROR;
490: END IF;
491:
492: END IF;
493:
496: GMD_SPEC_GRP.Validate_Before_Delete( p_spec_id => p_spec.spec_id
497: , x_return_status => l_return_status
498: , x_message_data => l_msg_data
499: );
500: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
501: -- Diagnostic messages already on stack from group level
502: RAISE FND_API.G_EXC_ERROR;
503: END IF;
504:
498: , x_message_data => l_msg_data
499: );
500: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
501: -- Diagnostic messages already on stack from group level
502: RAISE FND_API.G_EXC_ERROR;
503: END IF;
504:
505: -- Lock the row ahead of delete marking
506: -- ====================================
511: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
512: 'l_table_name', 'GMD_SPECIFICATIONS',
513: 'l_column_name', 'SPEC_ID',
514: 'l_key_value', p_spec.spec_id);
515: RAISE FND_API.G_EXC_ERROR;
516: END IF;
517:
518: IF NOT GMD_Specifications_PVT.Mark_for_Delete ( p_spec_id => p_spec.spec_id
519: , p_last_update_date => sysdate
528: x_deleted_rows := 1;
529: END IF;
530:
531: -- Standard Check of p_commit.
532: IF FND_API.to_boolean(p_commit)
533: THEN
534: COMMIT WORK;
535: END IF;
536:
536:
537: x_return_status := l_return_status;
538:
539: EXCEPTION
540: WHEN FND_API.G_EXC_ERROR THEN
541: ROLLBACK TO Delete_Spec;
542: x_deleted_rows := 0;
543: x_return_status := FND_API.G_RET_STS_ERROR;
544: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
539: EXCEPTION
540: WHEN FND_API.G_EXC_ERROR THEN
541: ROLLBACK TO Delete_Spec;
542: x_deleted_rows := 0;
543: x_return_status := FND_API.G_RET_STS_ERROR;
544: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
545: , p_count => x_msg_count
546: , p_data => x_msg_data
547: );
540: WHEN FND_API.G_EXC_ERROR THEN
541: ROLLBACK TO Delete_Spec;
542: x_deleted_rows := 0;
543: x_return_status := FND_API.G_RET_STS_ERROR;
544: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
545: , p_count => x_msg_count
546: , p_data => x_msg_data
547: );
548:
545: , p_count => x_msg_count
546: , p_data => x_msg_data
547: );
548:
549: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
550: ROLLBACK TO Delete_Spec;
551: x_deleted_rows := 0;
552: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
553: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
548:
549: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
550: ROLLBACK TO Delete_Spec;
551: x_deleted_rows := 0;
552: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
553: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
554: , p_count => x_msg_count
555: , p_data => x_msg_data
556: );
549: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
550: ROLLBACK TO Delete_Spec;
551: x_deleted_rows := 0;
552: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
553: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
554: , p_count => x_msg_count
555: , p_data => x_msg_data
556: );
557:
557:
558:
559:
560: WHEN OTHERS THEN
561: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
562: x_deleted_rows := 0;
563: ROLLBACK TO Delete_Spec;
564: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
565: , l_api_name
564: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
565: , l_api_name
566: );
567:
568: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
569: , p_count => x_msg_count
570: , p_data => x_msg_data
571: );
572:
605: l_api_name CONSTANT VARCHAR2 (30) := 'DELETE_SPEC_TESTS';
606: l_api_version CONSTANT NUMBER := 1.0;
607: l_msg_count NUMBER :=0;
608: l_msg_data VARCHAR2(2000);
609: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
610: l_spec_id NUMBER :=0;
611: l_spec_tests GMD_SPEC_TESTS%ROWTYPE;
612: l_spec_tests_out GMD_SPEC_TESTS%ROWTYPE;
613: l_deleted_rows NUMBER :=0;
620: SAVEPOINT Delete_Spec_Tests;
621:
622: -- Standard call to check for call compatibility.
623: -- ==============================================
624: IF NOT FND_API.Compatible_API_CALL
625: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
626: THEN
627: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
628: END IF;
623: -- ==============================================
624: IF NOT FND_API.Compatible_API_CALL
625: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
626: THEN
627: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
628: END IF;
629:
630: -- Initialize message list if p_int_msg_list is set TRUE.
631: -- ======================================================
628: END IF;
629:
630: -- Initialize message list if p_int_msg_list is set TRUE.
631: -- ======================================================
632: IF FND_API.to_boolean(p_init_msg_list)
633: THEN
634: FND_MSG_PUB.Initialize;
635: END IF;
636:
635: END IF;
636:
637: -- Initialize API return Parameters
638: -- ================================
639: x_return_status := FND_API.G_RET_STS_SUCCESS;
640:
641: -- Process each of the spec tests
642: -- ===============================
643: FOR i in 1..p_spec_tests_tbl.COUNT LOOP
647: IF ( l_spec_tests.spec_id IS NULL )
648: THEN
649: -- raise validation error
650: GMD_API_PUB.Log_Message('GMD_SPEC_ID_REQUIRED');
651: RAISE FND_API.G_EXC_ERROR;
652: END IF;
653:
654: -- First loop only ,validate the owning SPEC
655: -- ==========================================
660: GMD_SPEC_GRP.Validate_Before_Delete( p_spec_id => l_spec_tests.spec_id
661: , x_return_status => l_return_status
662: , x_message_data => l_msg_data
663: );
664: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
665: -- Diagnostic messages already on stack from group level
666: RAISE FND_API.G_EXC_ERROR;
667: END IF;
668:
662: , x_message_data => l_msg_data
663: );
664: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
665: -- Diagnostic messages already on stack from group level
666: RAISE FND_API.G_EXC_ERROR;
667: END IF;
668:
669: -- All spec_tests processed, must relate to this spec_id
670: -- =====================================================
679: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
680: 'l_table_name', 'GMD_SPECIFICATIONS',
681: 'l_column_name', 'SPEC_ID',
682: 'l_key_value', l_spec_tests.spec_id);
683: RAISE FND_API.G_EXC_ERROR;
684: END IF;
685:
686: -- All spec_tests must relate to the same owning spec
687: -- ==================================================
689: THEN
690: GMD_API_PUB.Log_Message('GMD_SUPPLY_CONSISTENT_SPEC_IDS',
691: 'SPEC_ID1', l_spec_id,
692: 'SPEC_ID2', l_spec_tests.spec_id);
693: RAISE FND_API.G_EXC_ERROR;
694: END IF; -- end of spec validation
695:
696: -- Fetch to ensure spec_test exists
697: -- ================================
701: GMD_API_PUB.Log_Message('GMD_FAILED_TO_FETCH_ROW',
702: 'l_table_name', 'GMD_SPEC_TESTS',
703: 'l_column_name', 'TEST_ID',
704: 'l_key_value', l_spec_tests.test_id);
705: RAISE FND_API.G_EXC_ERROR;
706: END IF;
707: l_spec_tests := l_spec_tests_out;
708:
709: -- Lock the spec_test ahead of deleting
715: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
716: 'l_table_name', 'GMD_SPEC_TESTS',
717: 'l_column_name', 'TEST_ID',
718: 'l_key_value', l_spec_tests.test_id);
719: RAISE FND_API.G_EXC_ERROR;
720: END IF;
721:
722: IF NOT GMD_SPEC_TESTS_PVT.Delete_Row ( p_spec_id => l_spec_tests.spec_id
723: , p_test_id => l_spec_tests.test_id
726: GMD_API_PUB.Log_Message('GMD_FAILED_TO_DELETE_ROW',
727: 'l_table_name', 'GMD_SPEC_TESTS',
728: 'l_column_name', 'TEST_ID',
729: 'l_key_value', l_spec_tests.test_id);
730: RAISE FND_API.G_EXC_ERROR;
731: END IF;
732:
733: -- Ensure that at least one test remains under the specification
734: -- =============================================================
734: -- =============================================================
735: GMD_SPEC_GRP.Validate_After_Delete_Test ( p_spec_id => l_spec_tests.spec_id
736: , x_return_status => l_return_status
737: );
738: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
739: -- Diagnostic messages already on stack from group level
740: RAISE FND_API.G_EXC_ERROR;
741: END IF;
742:
736: , x_return_status => l_return_status
737: );
738: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
739: -- Diagnostic messages already on stack from group level
740: RAISE FND_API.G_EXC_ERROR;
741: END IF;
742:
743: x_deleted_rows := i;
744:
744:
745: END LOOP;
746:
747: -- Standard Check of p_commit.
748: IF FND_API.to_boolean(p_commit)
749: THEN
750: COMMIT WORK;
751: END IF;
752:
752:
753: x_return_status := l_return_status;
754:
755: EXCEPTION
756: WHEN FND_API.G_EXC_ERROR THEN
757: ROLLBACK TO Delete_Spec_Tests;
758: x_return_status := FND_API.G_RET_STS_ERROR;
759: x_deleted_rows := 0;
760: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
754:
755: EXCEPTION
756: WHEN FND_API.G_EXC_ERROR THEN
757: ROLLBACK TO Delete_Spec_Tests;
758: x_return_status := FND_API.G_RET_STS_ERROR;
759: x_deleted_rows := 0;
760: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
761: , p_count => x_msg_count
762: , p_data => x_msg_data
756: WHEN FND_API.G_EXC_ERROR THEN
757: ROLLBACK TO Delete_Spec_Tests;
758: x_return_status := FND_API.G_RET_STS_ERROR;
759: x_deleted_rows := 0;
760: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
761: , p_count => x_msg_count
762: , p_data => x_msg_data
763: );
764:
761: , p_count => x_msg_count
762: , p_data => x_msg_data
763: );
764:
765: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
766: ROLLBACK TO Delete_Spec_Tests;
767: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
768: x_deleted_rows := 0;
769: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
763: );
764:
765: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
766: ROLLBACK TO Delete_Spec_Tests;
767: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
768: x_deleted_rows := 0;
769: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
770: , p_count => x_msg_count
771: , p_data => x_msg_data
765: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
766: ROLLBACK TO Delete_Spec_Tests;
767: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
768: x_deleted_rows := 0;
769: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
770: , p_count => x_msg_count
771: , p_data => x_msg_data
772: );
773:
773:
774:
775:
776: WHEN OTHERS THEN
777: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
778: x_deleted_rows := 0;
779: ROLLBACK TO Delete_Spec_Tests;
780: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
781: , l_api_name
780: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
781: , l_api_name
782: );
783:
784: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
785: , p_count => x_msg_count
786: , p_data => x_msg_data
787: );
788: