[Home] [Help]
PACKAGE BODY: APPS.GR_TOXIC_ROUTES_B_PKG
Source
1 PACKAGE BODY GR_TOXIC_ROUTES_B_PKG AS
2 /*$Header: GRHITRB.pls 115.7 2002/10/28 21:31:15 gkelly ship $*/
3 PROCEDURE Insert_Row
4 (p_commit IN VARCHAR2,
5 p_called_by_form IN VARCHAR2,
6 p_toxic_route_code IN VARCHAR2,
7 p_created_by IN NUMBER,
8 p_creation_date IN DATE,
9 p_last_updated_by IN NUMBER,
10 p_last_update_date IN DATE,
11 p_last_update_login IN NUMBER,
12 x_rowid OUT NOCOPY VARCHAR2,
13 x_return_status OUT NOCOPY VARCHAR2,
14 x_oracle_error OUT NOCOPY NUMBER,
15 x_msg_data OUT NOCOPY VARCHAR2)
16 IS
17
18 /* Alpha Variables */
19
20 L_RETURN_STATUS VARCHAR2(1) := 'S';
21 L_KEY_EXISTS VARCHAR2(1);
22 L_MSG_DATA VARCHAR2(2000);
23 L_ROWID VARCHAR2(18);
24
25 /* Number Variables */
26
27 L_ORACLE_ERROR NUMBER;
28
29 /* Exceptions */
30
31 FOREIGN_KEY_ERROR EXCEPTION;
32 ITEM_EXISTS_ERROR EXCEPTION;
33 ROW_MISSING_ERROR EXCEPTION;
34
35 /* Declare cursors */
36
37
38 BEGIN
39 /* Initialization Routine */
40
41 SAVEPOINT Insert_Row;
42 x_return_status := 'S';
43 x_oracle_error := 0;
44 x_msg_data := NULL;
45
46 /* Now call the check foreign key procedure */
47
48 Check_Foreign_Keys
49 (p_toxic_route_code,
50 l_return_status,
51 l_oracle_error,
52 l_msg_data);
53
54 IF l_return_status <> 'S' THEN
55 RAISE Foreign_Key_Error;
56 END IF;
57
58 /* Now check the primary key doesn't already exist */
59
60 Check_Primary_Key
61 (p_toxic_route_code,
62 'F',
63 l_rowid,
64 l_key_exists);
65
66 IF FND_API.To_Boolean(l_key_exists) THEN
67 RAISE Item_Exists_Error;
68 END IF;
69
70 INSERT INTO gr_toxic_routes_b
71 (toxic_route_code,
72 created_by,
73 creation_date,
74 last_updated_by,
75 last_update_date,
76 last_update_login)
77 VALUES
78 (p_toxic_route_code,
79 p_created_by,
80 p_creation_date,
81 p_last_updated_by,
82 p_last_update_date,
83 p_last_update_login);
84
85 /* Now get the row id of the inserted record */
86
87 Check_Primary_Key
88 (p_toxic_route_code,
89 'F',
90 l_rowid,
91 l_key_exists);
92
93 IF FND_API.To_Boolean(l_key_exists) THEN
94 x_rowid := l_rowid;
95 ELSE
96 RAISE Row_Missing_Error;
97 END IF;
98
99 /* Check the commit flag and if set, then commit the work. */
100
101 IF FND_API.To_Boolean(p_commit) THEN
102 COMMIT WORK;
103 END IF;
104
105 EXCEPTION
106
107 WHEN Foreign_Key_Error THEN
108 ROLLBACK TO SAVEPOINT Insert_Row;
109 x_return_status := l_return_status;
110 x_oracle_error := l_oracle_error;
111 FND_MESSAGE.SET_NAME('GR',
112 'GR_FOREIGN_KEY_ERROR');
113 FND_MESSAGE.SET_TOKEN('TEXT',
114 l_msg_data,
115 FALSE);
116 IF FND_API.To_Boolean(p_called_by_form) THEN
117 APP_EXCEPTION.Raise_Exception;
118 ELSE
119 x_msg_data := FND_MESSAGE.Get;
120 END IF;
121
122 WHEN Item_Exists_Error THEN
123 ROLLBACK TO SAVEPOINT Insert_Row;
124 x_return_status := 'E';
125 x_oracle_error := APP_EXCEPTION.Get_Code;
126 FND_MESSAGE.SET_NAME('GR',
127 'GR_RECORD_EXISTS');
128 FND_MESSAGE.SET_TOKEN('CODE',
129 p_toxic_route_code,
130 FALSE);
131 IF FND_API.To_Boolean(p_called_by_form) THEN
132 APP_EXCEPTION.Raise_Exception;
133 ELSE
134 x_msg_data := FND_MESSAGE.Get;
135 END IF;
136
137 WHEN Row_Missing_Error THEN
138 ROLLBACK TO SAVEPOINT Insert_Row;
139 x_return_status := 'E';
140 x_oracle_error := APP_EXCEPTION.Get_Code;
141 FND_MESSAGE.SET_NAME('GR',
142 'GR_NO_RECORD_INSERTED');
143 FND_MESSAGE.SET_TOKEN('CODE',
144 p_toxic_route_code,
145 FALSE);
146 IF FND_API.To_Boolean(p_called_by_form) THEN
147 APP_EXCEPTION.Raise_Exception;
148 ELSE
149 x_msg_data := FND_MESSAGE.Get;
150 END IF;
151
152 WHEN OTHERS THEN
153 ROLLBACK TO SAVEPOINT Insert_Row;
154 x_return_status := 'U';
155 x_oracle_error := APP_EXCEPTION.Get_Code;
156 l_msg_data := APP_EXCEPTION.Get_Text;
157 FND_MESSAGE.SET_NAME('GR',
158 'GR_UNEXPECTED_ERROR');
159 FND_MESSAGE.SET_TOKEN('TEXT',
160 l_msg_data,
161 FALSE);
162 IF FND_API.To_Boolean(p_called_by_form) THEN
163 APP_EXCEPTION.Raise_Exception;
164 ELSE
165 x_msg_data := FND_MESSAGE.Get;
166 END IF;
167
168 END Insert_Row;
169
170 PROCEDURE Update_Row
171 (p_commit IN VARCHAR2,
172 p_called_by_form IN VARCHAR2,
173 p_rowid IN VARCHAR2,
174 p_toxic_route_code IN VARCHAR2,
175 p_created_by IN NUMBER,
176 p_creation_date IN DATE,
177 p_last_updated_by IN NUMBER,
178 p_last_update_date IN DATE,
179 p_last_update_login IN NUMBER,
180 x_return_status OUT NOCOPY VARCHAR2,
181 x_oracle_error OUT NOCOPY NUMBER,
182 x_msg_data OUT NOCOPY VARCHAR2)
183 IS
184
185 /* Alpha Variables */
186
187 L_RETURN_STATUS VARCHAR2(1) := 'S';
188 L_MSG_DATA VARCHAR2(2000);
189
190 /* Number Variables */
191
192 L_ORACLE_ERROR NUMBER;
193
194 /* Exceptions */
195
196 FOREIGN_KEY_ERROR EXCEPTION;
197 ROW_MISSING_ERROR EXCEPTION;
198
199 BEGIN
200
201 /* Initialization Routine */
202
203 SAVEPOINT Update_Row;
204 x_return_status := 'S';
205 x_oracle_error := 0;
206 x_msg_data := NULL;
207
208 /* Now call the check foreign key procedure */
209
210 Check_Foreign_Keys
211 (p_toxic_route_code,
212 l_return_status,
213 l_oracle_error,
214 l_msg_data);
215
216 IF l_return_status <> 'S' THEN
217 RAISE Foreign_Key_Error;
218 ELSE
219 UPDATE gr_toxic_routes_b
220 SET toxic_route_code = p_toxic_route_code,
221 created_by = p_created_by,
222 creation_date = p_creation_date,
223 last_updated_by = p_last_updated_by,
224 last_update_date = p_last_update_date,
225 last_update_login = p_last_update_login
226 WHERE rowid = p_rowid;
227
228 IF SQL%NOTFOUND THEN
229 RAISE Row_Missing_Error;
230 END IF;
231 END IF;
232
233 /* Check if do the commit */
234
235 IF FND_API.To_Boolean(p_commit) THEN
236 COMMIT WORK;
237 END IF;
238
239 EXCEPTION
240
241 WHEN Foreign_Key_Error THEN
242 ROLLBACK TO SAVEPOINT Update_Row;
243 x_return_status := l_return_status;
244 x_oracle_error := l_oracle_error;
245 FND_MESSAGE.SET_NAME('GR',
246 'GR_FOREIGN_KEY_ERROR');
247 FND_MESSAGE.SET_TOKEN('TEXT',
248 l_msg_data,
249 FALSE);
250 IF FND_API.To_Boolean(p_called_by_form) THEN
251 APP_EXCEPTION.Raise_Exception;
252 ELSE
253 x_msg_data := FND_MESSAGE.Get;
254 END IF;
255
256 WHEN Row_Missing_Error THEN
257 ROLLBACK TO SAVEPOINT Update_Row;
258 x_return_status := 'E';
259 x_oracle_error := APP_EXCEPTION.Get_Code;
260 FND_MESSAGE.SET_NAME('GR',
261 'GR_NO_RECORD_INSERTED');
262 FND_MESSAGE.SET_TOKEN('CODE',
263 p_toxic_route_code,
264 FALSE);
265 IF FND_API.To_Boolean(p_called_by_form) THEN
266 APP_EXCEPTION.Raise_Exception;
267 ELSE
268 x_msg_data := FND_MESSAGE.Get;
269 END IF;
270
271 WHEN OTHERS THEN
272 ROLLBACK TO SAVEPOINT Update_Row;
273 x_return_status := 'U';
274 x_oracle_error := APP_EXCEPTION.Get_Code;
275 l_msg_data := APP_EXCEPTION.Get_Text;
276 FND_MESSAGE.SET_NAME('GR',
277 'GR_UNEXPECTED_ERROR');
278 FND_MESSAGE.SET_TOKEN('TEXT',
279 l_msg_data,
280 FALSE);
281 IF FND_API.To_Boolean(p_called_by_form) THEN
282 APP_EXCEPTION.Raise_Exception;
283 ELSE
284 x_msg_data := FND_MESSAGE.Get;
285 END IF;
286
287 END Update_Row;
288
289 PROCEDURE Lock_Row
290 (p_commit IN VARCHAR2,
291 p_called_by_form IN VARCHAR2,
292 p_rowid IN VARCHAR2,
293 p_toxic_route_code IN VARCHAR2,
294 p_created_by IN NUMBER,
295 p_creation_date IN DATE,
296 p_last_updated_by IN NUMBER,
297 p_last_update_date IN DATE,
298 p_last_update_login IN NUMBER,
299 x_return_status OUT NOCOPY VARCHAR2,
300 x_oracle_error OUT NOCOPY NUMBER,
301 x_msg_data OUT NOCOPY VARCHAR2)
302 IS
303
304 /* Alpha Variables */
305
306 L_RETURN_STATUS VARCHAR2(1) := 'S';
307 L_MSG_DATA VARCHAR2(2000);
308
309 /* Number Variables */
310
311 L_ORACLE_ERROR NUMBER;
312
313 /* Exceptions */
314
315 NO_DATA_FOUND_ERROR EXCEPTION;
316 RECORD_CHANGED_ERROR EXCEPTION;
317
318 /* Define the cursors */
319
320 CURSOR c_lock_toxic_routes
321 IS
322 SELECT last_update_date
323 FROM gr_toxic_routes_b
324 WHERE rowid = p_rowid
325 FOR UPDATE NOWAIT;
326 LockRouteRcd c_lock_toxic_routes%ROWTYPE;
327 BEGIN
328
329 /* Initialization Routine */
330
331 SAVEPOINT Lock_Row;
332 x_return_status := 'S';
333 x_oracle_error := 0;
334 x_msg_data := NULL;
335
336 /* Now lock the record */
337
338 OPEN c_lock_toxic_routes;
339 FETCH c_lock_toxic_routes INTO LockRouteRcd;
340 IF c_lock_toxic_routes%NOTFOUND THEN
341 CLOSE c_lock_toxic_routes;
342 RAISE No_Data_Found_Error;
343 END IF;
344 CLOSE c_lock_toxic_routes;
345
346 IF LockRouteRcd.last_update_date <> p_last_update_date THEN
347 RAISE RECORD_CHANGED_ERROR;
348 END IF;
349
350 IF FND_API.To_Boolean(p_commit) THEN
351 COMMIT WORK;
352 END IF;
353
354 EXCEPTION
355
356 WHEN No_Data_Found_Error THEN
357 ROLLBACK TO SAVEPOINT Lock_Row;
358 x_return_status := 'E';
359 FND_MESSAGE.SET_NAME('GR',
360 'GR_RECORD_NOT_FOUND');
361 FND_MESSAGE.SET_TOKEN('CODE',
362 p_toxic_route_code,
363 FALSE);
364 IF FND_API.To_Boolean(p_called_by_form) THEN
365 APP_EXCEPTION.Raise_Exception;
366 ELSE
367 x_msg_data := FND_MESSAGE.Get;
368 END IF;
369 WHEN RECORD_CHANGED_ERROR THEN
370 ROLLBACK TO SAVEPOINT Lock_Row;
371 X_return_status := 'E';
372 FND_MESSAGE.SET_NAME('FND',
373 'FORM_RECORD_CHANGED');
374 IF FND_API.To_Boolean(p_called_by_form) THEN
375 APP_EXCEPTION.Raise_Exception;
376 ELSE
377 x_msg_data := FND_MESSAGE.Get;
378 END IF;
379 WHEN APP_EXCEPTION.RECORD_LOCK_EXCEPTION THEN
380 ROLLBACK TO SAVEPOINT Lock_Row;
381 x_return_status := 'L';
382 x_oracle_error := APP_EXCEPTION.Get_Code;
383 IF NOT (FND_API.To_Boolean(p_called_by_form)) THEN
384 FND_MESSAGE.SET_NAME('GR',
385 'GR_ROW_IS_LOCKED');
386 x_msg_data := FND_MESSAGE.Get;
387 END IF;
388
389 WHEN OTHERS THEN
390 ROLLBACK TO SAVEPOINT Lock_Row;
391 x_return_status := 'U';
392 x_oracle_error := APP_EXCEPTION.Get_Code;
393 l_msg_data := APP_EXCEPTION.Get_Text;
394 FND_MESSAGE.SET_NAME('GR',
395 'GR_UNEXPECTED_ERROR');
396 FND_MESSAGE.SET_TOKEN('TEXT',
397 l_msg_data,
398 FALSE);
399 IF FND_API.To_Boolean(p_called_by_form) THEN
400 APP_EXCEPTION.Raise_Exception;
401 ELSE
402 x_msg_data := FND_MESSAGE.Get;
403 END IF;
404
405 END Lock_Row;
406
407 PROCEDURE Delete_Row
408 (p_commit IN VARCHAR2,
409 p_called_by_form IN VARCHAR2,
410 p_rowid IN VARCHAR2,
411 p_toxic_route_code IN VARCHAR2,
412 p_created_by IN NUMBER,
413 p_creation_date IN DATE,
414 p_last_updated_by IN NUMBER,
415 p_last_update_date IN DATE,
416 p_last_update_login IN NUMBER,
417 x_return_status OUT NOCOPY VARCHAR2,
418 x_oracle_error OUT NOCOPY NUMBER,
419 x_msg_data OUT NOCOPY VARCHAR2)
420 IS
421 /* Alpha Variables */
422
423 L_RETURN_STATUS VARCHAR2(1) := 'S';
424 L_MSG_DATA VARCHAR2(2000);
425
426 /* Number Variables */
427
428 L_ORACLE_ERROR NUMBER;
429
430 /* Exceptions */
431
432 CHECK_INTEGRITY_ERROR EXCEPTION;
433 ROW_MISSING_ERROR EXCEPTION;
434 PRAGMA EXCEPTION_INIT(Row_Missing_Error,100);
435
436 BEGIN
437
438 /* Initialization Routine */
439
440 SAVEPOINT Delete_Row;
441 x_return_status := 'S';
442 x_oracle_error := 0;
443 x_msg_data := NULL;
444
445 /* Now call the check integrity procedure */
446
447 Check_Integrity
448 (p_called_by_form,
449 p_toxic_route_code,
450 l_return_status,
451 l_oracle_error,
452 l_msg_data);
453
454 IF l_return_status <> 'S' THEN
455 RAISE Check_Integrity_Error;
456 END IF;
457
458 DELETE FROM gr_toxic_routes_b
459 WHERE rowid = p_rowid;
460
461 /* Check the commit flag and if set, then commit the work. */
462
463 IF FND_API.TO_Boolean(p_commit) THEN
464 COMMIT WORK;
465 END IF;
466
467 EXCEPTION
468
469 WHEN Check_Integrity_Error THEN
470 ROLLBACK TO SAVEPOINT Delete_Row;
471 x_return_status := l_return_status;
472 x_oracle_error := l_oracle_error;
473 IF FND_API.To_Boolean(p_called_by_form) THEN
474 APP_EXCEPTION.Raise_Exception;
475 ELSE
476 x_msg_data := FND_MESSAGE.Get;
477 END IF;
478
479 WHEN Row_Missing_Error THEN
480 ROLLBACK TO SAVEPOINT Delete_Row;
481 x_return_status := 'E';
482 x_oracle_error := APP_EXCEPTION.Get_Code;
483 FND_MESSAGE.SET_NAME('GR',
484 'GR_RECORD_NOT_FOUND');
485 FND_MESSAGE.SET_TOKEN('CODE',
486 p_toxic_route_code,
487 FALSE);
488 IF FND_API.To_Boolean(p_called_by_form) THEN
489 APP_EXCEPTION.Raise_Exception;
490 ELSE
491 x_msg_data := FND_MESSAGE.Get;
492 END IF;
493
494 WHEN OTHERS THEN
495 ROLLBACK TO SAVEPOINT Delete_Row;
496 x_return_status := 'U';
497 x_oracle_error := APP_EXCEPTION.Get_Code;
498 l_msg_data := APP_EXCEPTION.Get_Text;
499 l_msg_data := APP_EXCEPTION.Get_Text;
500 FND_MESSAGE.SET_NAME('GR',
501 'GR_UNEXPECTED_ERROR');
502 FND_MESSAGE.SET_TOKEN('TEXT',
503 l_msg_data,
504 FALSE);
505 IF FND_API.To_Boolean(p_called_by_form) THEN
506 APP_EXCEPTION.Raise_Exception;
507 ELSE
508 x_msg_data := FND_MESSAGE.Get;
509 END IF;
510
511 END Delete_Row;
512
513 PROCEDURE Check_Foreign_Keys
514 (p_toxic_route_code IN VARCHAR2,
515 x_return_status OUT NOCOPY VARCHAR2,
516 x_oracle_error OUT NOCOPY NUMBER,
517 x_msg_data OUT NOCOPY VARCHAR2)
518 IS
519
520 /* Alpha Variables */
521
522 L_RETURN_STATUS VARCHAR2(1) := 'S';
523 L_MSG_DATA VARCHAR2(2000);
524 L_ROWID VARCHAR2(18);
525 L_KEY_EXISTS VARCHAR2(1);
526
527 /* Number Variables */
528
529 L_ORACLE_ERROR NUMBER;
530
531
532 BEGIN
533
534 /* Initialization Routine */
535
536 SAVEPOINT Check_Foreign_Keys;
537 x_return_status := 'S';
538 x_oracle_error := 0;
539 x_msg_data := NULL;
540
541 /* No foreign keys need to be checked */
542
543 EXCEPTION
544
545 WHEN OTHERS THEN
546 ROLLBACK TO SAVEPOINT Check_Foreign_Keys;
547 x_return_status := 'U';
548 x_oracle_error := APP_EXCEPTION.Get_Code;
549 l_msg_data := APP_EXCEPTION.Get_Text;
550 FND_MESSAGE.SET_NAME('GR',
551 'GR_UNEXPECTED_ERROR');
552 FND_MESSAGE.SET_TOKEN('TEXT',
553 l_msg_data,
554 FALSE);
555 x_msg_data := FND_MESSAGE.Get;
556
557 END Check_Foreign_Keys;
558
559 PROCEDURE Check_Integrity
560 (p_called_by_form IN VARCHAR2,
561 p_toxic_route_code IN VARCHAR2,
562 x_return_status OUT NOCOPY VARCHAR2,
563 x_oracle_error OUT NOCOPY NUMBER,
564 x_msg_data OUT NOCOPY VARCHAR2)
565 IS
566
567 /* Alpha Variables */
568
569 L_RETURN_STATUS VARCHAR2(1) := 'S';
570 L_MSG_DATA VARCHAR2(2000);
571
572 /* Number Variables */
573
574 L_ORACLE_ERROR NUMBER;
575 L_RECORD_COUNT NUMBER;
576
577 /* Exceptions */
578 INTEGRITY_ERROR EXCEPTION;
579 /* Define Cursors */
580
581 CURSOR c_get_item_toxic
582 IS
583 SELECT COUNT(*)
584 FROM gr_item_toxic
585 WHERE toxic_route_code = p_toxic_route_code;
586 ToxicRecord c_get_item_toxic%ROWTYPE;
587
588 BEGIN
589
590
591 /*
592 ** Initialization Routine
593 */
594 SAVEPOINT Check_Integrity;
595 x_return_status := 'S';
596 x_oracle_error := 0;
597 x_msg_data := NULL;
598 l_record_count := 0;
599
600 OPEN c_get_item_toxic;
601 FETCH c_get_item_toxic INTO l_record_count;
602 CLOSE c_get_item_toxic;
603
604 IF l_record_count <> 0 THEN
605 l_return_status := 'E';
606 l_msg_data := l_msg_data || ' gr_item_toxic';
607 END IF;
608 /*
609 ** Now sort out the error messaging
610 */
611 IF l_return_status <> 'S' THEN
612 RAISE INTEGRITY_ERROR;
613 END IF;
614
615
616 EXCEPTION
617
618 WHEN INTEGRITY_ERROR THEN
619 x_return_status := 'E';
620 FND_MESSAGE.SET_NAME('GR',
621 'GR_INTEGRITY_HEADER');
622 FND_MESSAGE.SET_TOKEN('CODE',
623 p_toxic_route_code,
624 FALSE);
625 FND_MESSAGE.SET_TOKEN('TABLES',
626 l_msg_data,
627 FALSE);
628 IF FND_API.To_Boolean(p_called_by_form) THEN
629 APP_EXCEPTION.Raise_Exception;
630 ELSE
631 x_msg_data := FND_MESSAGE.Get;
632 END IF;
633 WHEN OTHERS THEN
634 ROLLBACK TO SAVEPOINT Check_Integrity;
635 x_return_status := 'U';
636 x_oracle_error := APP_EXCEPTION.Get_Code;
637 l_msg_data := APP_EXCEPTION.Get_Text;
638 FND_MESSAGE.SET_NAME('GR',
639 'GR_UNEXPECTED_ERROR');
640 FND_MESSAGE.SET_TOKEN('TEXT',
641 l_msg_data,
642 FALSE);
643 IF FND_API.To_Boolean(p_called_by_form) THEN
644 APP_EXCEPTION.Raise_Exception;
645 ELSE
646 x_msg_data := FND_MESSAGE.Get;
647 END IF;
648 END Check_Integrity;
649
650 PROCEDURE Check_Primary_Key
651 (p_toxic_route_code IN VARCHAR2,
652 p_called_by_form IN VARCHAR2,
653 x_rowid OUT NOCOPY VARCHAR2,
654 x_key_exists OUT NOCOPY VARCHAR2)
655 IS
656 /* Declare any variables and the cursor */
657
658 L_MSG_DATA VARCHAR2(2000);
659
660 CURSOR c_get_toxic_route_rowid
661 IS
662 SELECT tr.rowid
663 FROM gr_toxic_routes_b tr
664 WHERE tr.toxic_route_code = p_toxic_route_code;
665 ToxicRouteRecord c_get_toxic_route_rowid%ROWTYPE;
666
667 BEGIN
668
669 x_key_exists := 'F';
670 OPEN c_get_toxic_route_rowid;
671 FETCH c_get_toxic_route_rowid INTO ToxicRouteRecord;
672 IF c_get_toxic_route_rowid%FOUND THEN
673 x_key_exists := 'T';
674 x_rowid := ToxicRouteRecord.rowid;
675 ELSE
676 x_key_exists := 'F';
677 END IF;
678 CLOSE c_get_toxic_route_rowid;
679
680 EXCEPTION
681
682 WHEN Others THEN
683 l_msg_data := APP_EXCEPTION.Get_Text;
684 FND_MESSAGE.SET_NAME('GR',
685 'GR_UNEXPECTED_ERROR');
686 FND_MESSAGE.SET_TOKEN('TEXT',
687 l_msg_data,
688 FALSE);
689 IF FND_API.To_Boolean(p_called_by_form) THEN
690 APP_EXCEPTION.Raise_Exception;
691 END IF;
692
693 END Check_Primary_Key;
694
695 END GR_TOXIC_ROUTES_B_PKG;