90: l_api_name CONSTANT VARCHAR2 (30) := 'CREATE_SPEC';
91: l_api_version CONSTANT NUMBER := 2.0;
92: l_msg_count NUMBER :=0;
93: l_msg_data VARCHAR2(2000);
94: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
95: l_spec GMD_SPECIFICATIONS%ROWTYPE;
96: l_spec_out GMD_SPECIFICATIONS%ROWTYPE;
97: l_spec_tests GMD_SPEC_TESTS%ROWTYPE;
98: l_spec_tests_out GMD_SPEC_TESTS%ROWTYPE;
120: SAVEPOINT Create_Spec;
121:
122: -- Standard call to check for call compatibility
123: -- =============================================
124: IF NOT FND_API.Compatible_API_CALL
125: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
126: THEN
127: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
128: END IF;
123: -- =============================================
124: IF NOT FND_API.Compatible_API_CALL
125: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
126: THEN
127: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
128: END IF;
129:
130: -- Initialize message list if p_int_msg_list is set TRUE.
131: -- ======================================================
128: END IF;
129:
130: -- Initialize message list if p_int_msg_list is set TRUE.
131: -- ======================================================
132: IF FND_API.to_boolean(p_init_msg_list)
133: THEN
134: FND_MSG_PUB.Initialize;
135: END IF;
136:
135: END IF;
136:
137: -- Initialize API return Parameters
138: -- ================================
139: l_return_status := FND_API.G_RET_STS_SUCCESS;
140:
141: -- Validate User Name Parameter
142: -- ============================
143: GMD_SPEC_GRP.Get_Who ( p_user_name => p_user_name
146: IF NVL(l_user_id, -1) < 0
147: THEN
148: GMD_API_PUB.Log_Message('GMD_INVALID_USER_NAME',
149: 'l_user_name', p_user_name);
150: RAISE FND_API.G_EXC_ERROR;
151:
152: ELSE
153: -- Added below for BUG 2711643. Hverddin
154: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
153: -- Added below for BUG 2711643. Hverddin
154: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
155: x_return_status => l_return_status);
156:
157: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
158: RAISE FND_API.G_EXC_ERROR;
159: END IF;
160:
161: END IF;
154: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_user_id,
155: x_return_status => l_return_status);
156:
157: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
158: RAISE FND_API.G_EXC_ERROR;
159: END IF;
160:
161: END IF;
162:
190: , p_operation => 'INSERT'
191: , x_return_status => l_return_status
192: );
193:
194: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
195: RAISE FND_API.G_EXC_ERROR;
196: END IF;
197:
198: -- Set the Who column definitions ahead of creating SPEC header
191: , x_return_status => l_return_status
192: );
193:
194: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
195: RAISE FND_API.G_EXC_ERROR;
196: END IF;
197:
198: -- Set the Who column definitions ahead of creating SPEC header
199: -- =============================================================
207: GMD_API_PUB.Log_Message('GMD_FAILED_TO_INSERT_ROW',
208: 'l_table_name', 'GMD_SPECIFICATIONS',
209: 'l_column_name', 'SPEC_ID',
210: 'l_key_value', l_spec.spec_id);
211: RAISE FND_API.G_EXC_ERROR;
212: END IF;
213: -- All test specs must conform to newly created spec_id
214: -- ====================================================
215: l_spec_id := l_spec.spec_id;
221: IF l_spec_id is NULL
222: THEN
223: GMD_API_PUB.Log_Message('GMD_SPEC_ID_REQUIRED');
224: GMD_API_PUB.Log_Message('GMD_SPEC_TEST_REQUIRES_SPEC_ID');
225: RAISE FND_API.G_EXC_ERROR;
226: END IF;
227:
228: END IF;
229:
275: IF ( NVL(l_spec_tests.spec_id, l_spec.spec_id ) <> l_spec_id)
276: THEN
277: GMD_API_PUB.Log_Message('GMD_INCONSISTENT_SPEC_ID',
278: 'SPEC_ID', l_spec_tests.spec_id);
279: RAISE FND_API.G_EXC_ERROR;
280: END IF;
281:
282: -- Ensure SPEC_ID is assigned
283: -- ==========================
292: , x_spec_test => l_spec_tests_out
293: , x_return_status => l_return_status
294: );
295:
296: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
297: -- Message detailing cause of validation failure is already on
298: -- the stack. But ensure the precise record is identified
299: -- ==========================================================
300: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
300: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
301: 'l_table_name', 'GMD_SPEC_TESTS',
302: 'l_column_name', 'TEST_ID',
303: 'l_key_value', l_spec_tests.test_id);
304: RAISE FND_API.G_EXC_ERROR;
305: END IF;
306:
307: l_spec_tests := l_spec_tests_out;
308:
316: GMD_API_PUB.Log_Message('GMD_FAILED_TO_INSERT_ROW',
317: 'l_table_name', 'GMD_SPEC_TESTS',
318: 'l_column_name', 'TEST_ID',
319: 'l_key_value', l_spec_tests.test_id);
320: RAISE FND_API.G_EXC_ERROR;
321: END IF;
322:
323: -- Update Return Parameter Tbl
324: -- ===========================
335: p_spec_id => l_spec_id
336: , x_return_status => l_return_status
337: );
338:
339: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
340: -- Message detailing cause of validation failure is already on
341: -- the stack. But ensure the precise record is identified
342: -- ==========================================================
343: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
343: GMD_API_PUB.Log_Message('GMD_API_RECORD_IDENTIFIER',
344: 'l_table_name', 'GMD_SPECIFICATIONS',
345: 'l_column_name', 'SPEC_NAME',
346: 'l_key_value', l_spec.spec_name);
347: RAISE FND_API.G_EXC_ERROR;
348: END IF;
349:
350: -- Standard Check of p_commit.
351: -- ==========================
348: END IF;
349:
350: -- Standard Check of p_commit.
351: -- ==========================
352: IF FND_API.to_boolean(p_commit)
353: THEN
354: COMMIT WORK;
355: END IF;
356:
358: x_spec := l_spec;
359: x_spec_tests_tbl := l_spec_tests_tbl;
360:
361: EXCEPTION
362: WHEN FND_API.G_EXC_ERROR THEN
363: ROLLBACK TO Create_Spec;
364: x_return_status := FND_API.G_RET_STS_ERROR;
365: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
366: , p_count => x_msg_count
360:
361: EXCEPTION
362: WHEN FND_API.G_EXC_ERROR THEN
363: ROLLBACK TO Create_Spec;
364: x_return_status := FND_API.G_RET_STS_ERROR;
365: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
366: , p_count => x_msg_count
367: , p_data => x_msg_data
368: );
361: EXCEPTION
362: WHEN FND_API.G_EXC_ERROR THEN
363: ROLLBACK TO Create_Spec;
364: x_return_status := FND_API.G_RET_STS_ERROR;
365: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
366: , p_count => x_msg_count
367: , p_data => x_msg_data
368: );
369:
366: , p_count => x_msg_count
367: , p_data => x_msg_data
368: );
369:
370: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
371: ROLLBACK TO Create_Spec;
372: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
373: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
374: , p_count => x_msg_count
368: );
369:
370: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
371: ROLLBACK TO Create_Spec;
372: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
373: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
374: , p_count => x_msg_count
375: , p_data => x_msg_data
376: );
369:
370: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
371: ROLLBACK TO Create_Spec;
372: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
373: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
374: , p_count => x_msg_count
375: , p_data => x_msg_data
376: );
377:
375: , p_data => x_msg_data
376: );
377:
378: WHEN OTHERS THEN
379: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
380: ROLLBACK TO Create_Spec;
381: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
382: , l_api_name
383: );
381: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
382: , l_api_name
383: );
384:
385: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
386: , p_count => x_msg_count
387: , p_data => x_msg_data
388: );
389:
426: l_api_name CONSTANT VARCHAR2 (30) := 'DELETE_SPEC';
427: l_api_version CONSTANT NUMBER := 1.0;
428: l_msg_count NUMBER :=0;
429: l_msg_data VARCHAR2(2000);
430: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
431: l_spec GMD_SPECIFICATIONS%ROWTYPE;
432: l_deleted_rows NUMBER :=0;
433:
434: BEGIN
439: SAVEPOINT Delete_Spec;
440:
441: -- Standard call to check for call compatibility.
442: -- ==============================================
443: IF NOT FND_API.Compatible_API_CALL
444: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
445: THEN
446: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
447: END IF;
442: -- ==============================================
443: IF NOT FND_API.Compatible_API_CALL
444: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
445: THEN
446: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
447: END IF;
448:
449: -- Initialize message list if p_int_msg_list is set TRUE.
450: -- ======================================================
447: END IF;
448:
449: -- Initialize message list if p_int_msg_list is set TRUE.
450: -- ======================================================
451: IF FND_API.to_boolean(p_init_msg_list)
452: THEN
453: FND_MSG_PUB.Initialize;
454: END IF;
455:
454: END IF;
455:
456: -- Initialize API return Parameters
457: -- ================================
458: x_return_status := FND_API.G_RET_STS_SUCCESS;
459:
460: -- Validate user_name
461: -- ==================
462: GMD_SPEC_GRP.Get_Who ( p_user_name => p_user_name
465: IF NVL(l_spec.last_updated_by, -1) < 0
466: THEN
467: GMD_API_PUB.Log_Message('GMD_INVALID_USER_NAME',
468: 'l_user_name', p_user_name);
469: RAISE FND_API.G_EXC_ERROR;
470: ELSE
471: -- Added below for BUG 2711643. Hverddin
472: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
473: x_return_status => l_return_status);
471: -- Added below for BUG 2711643. Hverddin
472: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
473: x_return_status => l_return_status);
474:
475: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
476: RAISE FND_API.G_EXC_ERROR;
477: END IF;
478:
479: END IF;
472: GMD_API_PUB.SET_USER_CONTEXT(p_user_id => l_spec.last_updated_by,
473: x_return_status => l_return_status);
474:
475: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
476: RAISE FND_API.G_EXC_ERROR;
477: END IF;
478:
479: END IF;
480:
483: GMD_SPEC_GRP.Validate_Before_Delete( p_spec_id => p_spec.spec_id
484: , x_return_status => l_return_status
485: , x_message_data => l_msg_data
486: );
487: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
488: -- Diagnostic messages already on stack from group level
489: RAISE FND_API.G_EXC_ERROR;
490: END IF;
491:
485: , x_message_data => l_msg_data
486: );
487: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
488: -- Diagnostic messages already on stack from group level
489: RAISE FND_API.G_EXC_ERROR;
490: END IF;
491:
492: -- Lock the row ahead of delete marking
493: -- ====================================
498: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
499: 'l_table_name', 'GMD_SPECIFICATIONS',
500: 'l_column_name', 'SPEC_ID',
501: 'l_key_value', p_spec.spec_id);
502: RAISE FND_API.G_EXC_ERROR;
503: END IF;
504:
505: IF NOT GMD_Specifications_PVT.Mark_for_Delete ( p_spec_id => p_spec.spec_id
506: , p_last_update_date => sysdate
515: x_deleted_rows := 1;
516: END IF;
517:
518: -- Standard Check of p_commit.
519: IF FND_API.to_boolean(p_commit)
520: THEN
521: COMMIT WORK;
522: END IF;
523:
523:
524: x_return_status := l_return_status;
525:
526: EXCEPTION
527: WHEN FND_API.G_EXC_ERROR THEN
528: ROLLBACK TO Delete_Spec;
529: x_deleted_rows := 0;
530: x_return_status := FND_API.G_RET_STS_ERROR;
531: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
526: EXCEPTION
527: WHEN FND_API.G_EXC_ERROR THEN
528: ROLLBACK TO Delete_Spec;
529: x_deleted_rows := 0;
530: x_return_status := FND_API.G_RET_STS_ERROR;
531: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
532: , p_count => x_msg_count
533: , p_data => x_msg_data
534: );
527: WHEN FND_API.G_EXC_ERROR THEN
528: ROLLBACK TO Delete_Spec;
529: x_deleted_rows := 0;
530: x_return_status := FND_API.G_RET_STS_ERROR;
531: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
532: , p_count => x_msg_count
533: , p_data => x_msg_data
534: );
535:
532: , p_count => x_msg_count
533: , p_data => x_msg_data
534: );
535:
536: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
537: ROLLBACK TO Delete_Spec;
538: x_deleted_rows := 0;
539: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
540: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
535:
536: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
537: ROLLBACK TO Delete_Spec;
538: x_deleted_rows := 0;
539: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
540: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
541: , p_count => x_msg_count
542: , p_data => x_msg_data
543: );
536: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
537: ROLLBACK TO Delete_Spec;
538: x_deleted_rows := 0;
539: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
540: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
541: , p_count => x_msg_count
542: , p_data => x_msg_data
543: );
544:
544:
545:
546:
547: WHEN OTHERS THEN
548: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
549: x_deleted_rows := 0;
550: ROLLBACK TO Delete_Spec;
551: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
552: , l_api_name
551: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
552: , l_api_name
553: );
554:
555: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
556: , p_count => x_msg_count
557: , p_data => x_msg_data
558: );
559:
592: l_api_name CONSTANT VARCHAR2 (30) := 'DELETE_SPEC_TESTS';
593: l_api_version CONSTANT NUMBER := 1.0;
594: l_msg_count NUMBER :=0;
595: l_msg_data VARCHAR2(2000);
596: l_return_status VARCHAR2(1):=FND_API.G_RET_STS_SUCCESS;
597: l_spec_id NUMBER :=0;
598: l_spec_tests GMD_SPEC_TESTS%ROWTYPE;
599: l_spec_tests_out GMD_SPEC_TESTS%ROWTYPE;
600: l_deleted_rows NUMBER :=0;
607: SAVEPOINT Delete_Spec_Tests;
608:
609: -- Standard call to check for call compatibility.
610: -- ==============================================
611: IF NOT FND_API.Compatible_API_CALL
612: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
613: THEN
614: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
615: END IF;
610: -- ==============================================
611: IF NOT FND_API.Compatible_API_CALL
612: (l_api_version , p_api_version , l_api_name , G_PKG_NAME)
613: THEN
614: RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
615: END IF;
616:
617: -- Initialize message list if p_int_msg_list is set TRUE.
618: -- ======================================================
615: END IF;
616:
617: -- Initialize message list if p_int_msg_list is set TRUE.
618: -- ======================================================
619: IF FND_API.to_boolean(p_init_msg_list)
620: THEN
621: FND_MSG_PUB.Initialize;
622: END IF;
623:
622: END IF;
623:
624: -- Initialize API return Parameters
625: -- ================================
626: x_return_status := FND_API.G_RET_STS_SUCCESS;
627:
628: -- Process each of the spec tests
629: -- ===============================
630: FOR i in 1..p_spec_tests_tbl.COUNT LOOP
634: IF ( l_spec_tests.spec_id IS NULL )
635: THEN
636: -- raise validation error
637: GMD_API_PUB.Log_Message('GMD_SPEC_ID_REQUIRED');
638: RAISE FND_API.G_EXC_ERROR;
639: END IF;
640:
641: -- First loop only ,validate the owning SPEC
642: -- ==========================================
647: GMD_SPEC_GRP.Validate_Before_Delete( p_spec_id => l_spec_tests.spec_id
648: , x_return_status => l_return_status
649: , x_message_data => l_msg_data
650: );
651: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
652: -- Diagnostic messages already on stack from group level
653: RAISE FND_API.G_EXC_ERROR;
654: END IF;
655:
649: , x_message_data => l_msg_data
650: );
651: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
652: -- Diagnostic messages already on stack from group level
653: RAISE FND_API.G_EXC_ERROR;
654: END IF;
655:
656: -- All spec_tests processed, must relate to this spec_id
657: -- =====================================================
666: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
667: 'l_table_name', 'GMD_SPECIFICATIONS',
668: 'l_column_name', 'SPEC_ID',
669: 'l_key_value', l_spec_tests.spec_id);
670: RAISE FND_API.G_EXC_ERROR;
671: END IF;
672:
673: -- All spec_tests must relate to the same owning spec
674: -- ==================================================
676: THEN
677: GMD_API_PUB.Log_Message('GMD_SUPPLY_CONSISTENT_SPEC_IDS',
678: 'SPEC_ID1', l_spec_id,
679: 'SPEC_ID2', l_spec_tests.spec_id);
680: RAISE FND_API.G_EXC_ERROR;
681: END IF; -- end of spec validation
682:
683: -- Fetch to ensure spec_test exists
684: -- ================================
688: GMD_API_PUB.Log_Message('GMD_FAILED_TO_FETCH_ROW',
689: 'l_table_name', 'GMD_SPEC_TESTS',
690: 'l_column_name', 'TEST_ID',
691: 'l_key_value', l_spec_tests.test_id);
692: RAISE FND_API.G_EXC_ERROR;
693: END IF;
694: l_spec_tests := l_spec_tests_out;
695:
696: -- Lock the spec_test ahead of deleting
702: GMD_API_PUB.Log_Message('GMD_LOCKING_FAILURE',
703: 'l_table_name', 'GMD_SPEC_TESTS',
704: 'l_column_name', 'TEST_ID',
705: 'l_key_value', l_spec_tests.test_id);
706: RAISE FND_API.G_EXC_ERROR;
707: END IF;
708:
709: IF NOT GMD_SPEC_TESTS_PVT.Delete_Row ( p_spec_id => l_spec_tests.spec_id
710: , p_test_id => l_spec_tests.test_id
713: GMD_API_PUB.Log_Message('GMD_FAILED_TO_DELETE_ROW',
714: 'l_table_name', 'GMD_SPEC_TESTS',
715: 'l_column_name', 'TEST_ID',
716: 'l_key_value', l_spec_tests.test_id);
717: RAISE FND_API.G_EXC_ERROR;
718: END IF;
719:
720: -- Ensure that at least one test remains under the specification
721: -- =============================================================
721: -- =============================================================
722: GMD_SPEC_GRP.Validate_After_Delete_Test ( p_spec_id => l_spec_tests.spec_id
723: , x_return_status => l_return_status
724: );
725: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
726: -- Diagnostic messages already on stack from group level
727: RAISE FND_API.G_EXC_ERROR;
728: END IF;
729:
723: , x_return_status => l_return_status
724: );
725: IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
726: -- Diagnostic messages already on stack from group level
727: RAISE FND_API.G_EXC_ERROR;
728: END IF;
729:
730: x_deleted_rows := i;
731:
731:
732: END LOOP;
733:
734: -- Standard Check of p_commit.
735: IF FND_API.to_boolean(p_commit)
736: THEN
737: COMMIT WORK;
738: END IF;
739:
739:
740: x_return_status := l_return_status;
741:
742: EXCEPTION
743: WHEN FND_API.G_EXC_ERROR THEN
744: ROLLBACK TO Delete_Spec_Tests;
745: x_return_status := FND_API.G_RET_STS_ERROR;
746: x_deleted_rows := 0;
747: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
741:
742: EXCEPTION
743: WHEN FND_API.G_EXC_ERROR THEN
744: ROLLBACK TO Delete_Spec_Tests;
745: x_return_status := FND_API.G_RET_STS_ERROR;
746: x_deleted_rows := 0;
747: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
748: , p_count => x_msg_count
749: , p_data => x_msg_data
743: WHEN FND_API.G_EXC_ERROR THEN
744: ROLLBACK TO Delete_Spec_Tests;
745: x_return_status := FND_API.G_RET_STS_ERROR;
746: x_deleted_rows := 0;
747: FND_MSG_PUB.Count_AND_GET ( p_encoded => FND_API.G_FALSE
748: , p_count => x_msg_count
749: , p_data => x_msg_data
750: );
751:
748: , p_count => x_msg_count
749: , p_data => x_msg_data
750: );
751:
752: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
753: ROLLBACK TO Delete_Spec_Tests;
754: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
755: x_deleted_rows := 0;
756: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
750: );
751:
752: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
753: ROLLBACK TO Delete_Spec_Tests;
754: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
755: x_deleted_rows := 0;
756: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
757: , p_count => x_msg_count
758: , p_data => x_msg_data
752: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
753: ROLLBACK TO Delete_Spec_Tests;
754: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
755: x_deleted_rows := 0;
756: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
757: , p_count => x_msg_count
758: , p_data => x_msg_data
759: );
760:
760:
761:
762:
763: WHEN OTHERS THEN
764: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
765: x_deleted_rows := 0;
766: ROLLBACK TO Delete_Spec_Tests;
767: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
768: , l_api_name
767: FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME
768: , l_api_name
769: );
770:
771: FND_MSG_PUB.Count_AND_GET ( p_encoded=> FND_API.G_FALSE
772: , p_count => x_msg_count
773: , p_data => x_msg_data
774: );
775: