DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_SPL_TALENTS_PKG

Source


1 PACKAGE BODY igs_ad_spl_talents_pkg AS
2 /* $Header: IGSAI97B.pls 120.3 2005/10/03 08:21:07 appldev ship $ */
3   l_rowid VARCHAR2(25);
4   old_references igs_ad_spl_talents%RowType;
5   new_references igs_ad_spl_talents%RowType;
6 
7   PROCEDURE Set_Column_Values (
8     p_action IN VARCHAR2,
9     x_rowid IN VARCHAR2 DEFAULT NULL,
10     x_spl_talent_id IN NUMBER DEFAULT NULL,
11     x_person_id IN NUMBER DEFAULT NULL,
12     x_admission_appl_number IN NUMBER DEFAULT NULL,
13     x_special_talent_type_id IN NUMBER DEFAULT NULL,
14     x_creation_date IN DATE DEFAULT NULL,
15     x_created_by IN NUMBER DEFAULT NULL,
16     x_last_update_date IN DATE DEFAULT NULL,
17     x_last_updated_by IN NUMBER DEFAULT NULL,
18     x_last_update_login IN NUMBER DEFAULT NULL
19   ) AS
20 
21   /*************************************************************
22   Created By :
23   Date Created By :
24   Purpose :
25   Know limitations, enhancements or remarks
26   Change History
27   Who             When            What
28 
29   (reverse chronological order - newest change first)
30   ***************************************************************/
31 
32     CURSOR cur_old_ref_values IS
33       SELECT   *
34       FROM     IGS_AD_SPL_TALENTS
35       WHERE    rowid = x_rowid;
36 
37   BEGIN
38 
39     l_rowid := x_rowid;
40 
41     -- Code for setting the Old and New Reference Values.
42     -- Populate Old Values.
43     Open cur_old_ref_values;
44     Fetch cur_old_ref_values INTO old_references;
45     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
46       Close cur_old_ref_values;
47       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
48       IGS_GE_MSG_STACK.ADD;
49       App_Exception.Raise_Exception;
50       Return;
51     END IF;
52     Close cur_old_ref_values;
53 
54     -- Populate New Values.
55     new_references.spl_talent_id := x_spl_talent_id;
56     new_references.person_id := x_person_id;
57     new_references.admission_appl_number := x_admission_appl_number;
58     new_references.special_talent_type_id := x_special_talent_type_id;
59     IF (p_action = 'UPDATE') THEN
60       new_references.creation_date := old_references.creation_date;
61       new_references.created_by := old_references.created_by;
62     ELSE
63       new_references.creation_date := x_creation_date;
64       new_references.created_by := x_created_by;
65     END IF;
66     new_references.last_update_date := x_last_update_date;
67     new_references.last_updated_by := x_last_updated_by;
68     new_references.last_update_login := x_last_update_login;
69 
70   END Set_Column_Values;
71 
72   PROCEDURE Check_Constraints (
73 		 Column_Name IN VARCHAR2  DEFAULT NULL,
74 		 Column_Value IN VARCHAR2  DEFAULT NULL ) AS
75   /*************************************************************
76   Created By :
77   Date Created By :
78   Purpose :
79   Know limitations, enhancements or remarks
80   Change History
81   Who             When            What
82 
83   (reverse chronological order - newest change first)
84   ***************************************************************/
85 
86   BEGIN
87 
88       IF column_name IS NULL THEN
89         NULL;
90         NULL;
91       END IF;
92 
93 
94 
95 
96   END Check_Constraints;
97 
98  PROCEDURE Check_Uniqueness AS
99   /*************************************************************
100   Created By :
101   Date Created By :
102   Purpose :
103   Know limitations, enhancements or remarks
104   Change History
105   Who             When            What
106 
107   (reverse chronological order - newest change first)
108   ***************************************************************/
109 
110    begin
111      		IF Get_Uk_For_Validation (
112 		new_references.special_talent_type_id
113     		,new_references.admission_appl_number
114     		,new_references.person_id
115     		) THEN
116  		Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
117       IGS_GE_MSG_STACK.ADD;
118 			app_exception.raise_exception;
119     		END IF;
120  END Check_Uniqueness ;
121   PROCEDURE Check_Parent_Existance AS
122   /*************************************************************
123   Created By :
124   Date Created By :
125   Purpose :
126   Know limitations, enhancements or remarks
127   Change History
128   Who             When            What
129 
130   (reverse chronological order - newest change first)
131   ***************************************************************/
132 
133   BEGIN
134 
135     IF (((old_references.special_talent_type_id = new_references.special_talent_type_id)) OR
136         ((new_references.special_talent_type_id IS NULL))) THEN
137       NULL;
138     ELSIF NOT Igs_Ad_Code_Classes_Pkg.Get_UK2_For_Validation (
139         		new_references.special_talent_type_id ,
140             'SPECIAL_TALENTS',
141             'N'
142         )  THEN
143          FND_MESSAGE.SET_NAME('IGS','IGS_GE_PK_UK_NOT_FOUND_CLOSED');
144          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('IGS','IGS_AD_SPL_TALENT_TYPE'));
145          IGS_GE_MSG_STACK.ADD;
146          App_Exception.Raise_Exception;
147     END IF;
148 
149     IF (((old_references.person_id = new_references.person_id) AND
150          (old_references.admission_appl_number = new_references.admission_appl_number)) OR
151         ((new_references.person_id IS NULL) OR
152          (new_references.admission_appl_number IS NULL))) THEN
153       NULL;
154     ELSIF NOT Igs_Ad_Appl_Pkg.Get_PK_For_Validation (
155         		new_references.person_id,
156          		 new_references.admission_appl_number
157         )  THEN
158          FND_MESSAGE.SET_NAME('IGS','IGS_GE_PK_UK_NOT_FOUND');
159          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('IGS','IGS_AD_APPL'));
160          IGS_GE_MSG_STACK.ADD;
161          App_Exception.Raise_Exception;
162     END IF;
163 
164   END Check_Parent_Existance;
165 
166   FUNCTION Get_PK_For_Validation (
167     x_spl_talent_id IN NUMBER
168     ) RETURN BOOLEAN AS
169 
170   /*************************************************************
171   Created By :
172   Date Created By :
173   Purpose :
174   Know limitations, enhancements or remarks
175   Change History
176   Who             When            What
177 
178   (reverse chronological order - newest change first)
179   ***************************************************************/
180 
181     CURSOR cur_rowid IS
182       SELECT   rowid
183       FROM     igs_ad_spl_talents
184       WHERE    spl_talent_id = x_spl_talent_id
185       FOR UPDATE NOWAIT;
186 
187     lv_rowid cur_rowid%RowType;
188 
189   BEGIN
190 
191     Open cur_rowid;
192     Fetch cur_rowid INTO lv_rowid;
193     IF (cur_rowid%FOUND) THEN
194       Close cur_rowid;
195       Return(TRUE);
196     ELSE
197       Close cur_rowid;
198       Return(FALSE);
199     END IF;
200   END Get_PK_For_Validation;
201 
202   FUNCTION Get_UK_For_Validation (
203     x_special_talent_type_id IN NUMBER,
204     x_admission_appl_number IN NUMBER,
205     x_person_id IN NUMBER
206     ) RETURN BOOLEAN AS
207 
208   /*************************************************************
209   Created By :
210   Date Created By :
211   Purpose :
212   Know limitations, enhancements or remarks
213   Change History
214   Who             When            What
215 
216   (reverse chronological order - newest change first)
217   ***************************************************************/
218 
219     CURSOR cur_rowid IS
220       SELECT   rowid
221       FROM     igs_ad_spl_talents
222       WHERE    special_talent_type_id = x_special_talent_type_id
223       AND      admission_appl_number = x_admission_appl_number
224       AND      person_id = x_person_id 	and      ((l_rowid is null) or (rowid <> l_rowid))
225 
226       ;
227     lv_rowid cur_rowid%RowType;
228 
229   BEGIN
230 
231     Open cur_rowid;
232     Fetch cur_rowid INTO lv_rowid;
233     IF (cur_rowid%FOUND) THEN
234       Close cur_rowid;
235         return (true);
236         ELSE
237        close cur_rowid;
238       return(false);
239     END IF;
240   END Get_UK_For_Validation ;
241   PROCEDURE Get_FK_Igs_Ad_Code_Classes (
242     x_code_id IN NUMBER
243     ) AS
244 
245   /*************************************************************
246   Created By :
247   Date Created By :
248   Purpose :
249   Know limitations, enhancements or remarks
250   Change History
251   Who             When            What
252 
253   (reverse chronological order - newest change first)
254   ***************************************************************/
255 
256     CURSOR cur_rowid IS
257       SELECT   rowid
258       FROM     igs_ad_spl_talents
259       WHERE    special_talent_type_id = x_code_id ;
260 
261     lv_rowid cur_rowid%RowType;
262 
263   BEGIN
264 
265     Open cur_rowid;
266     Fetch cur_rowid INTO lv_rowid;
267     IF (cur_rowid%FOUND) THEN
268       Close cur_rowid;
269       Fnd_Message.Set_Name ('IGS', 'IGS_AD_ASPLT_ACDC_FK');
270       IGS_GE_MSG_STACK.ADD;
271       App_Exception.Raise_Exception;
272       Return;
273     END IF;
274     Close cur_rowid;
275 
276   END Get_FK_Igs_Ad_Code_Classes;
277 
278   PROCEDURE Get_FK_Igs_Ad_Appl (
279     x_person_id IN NUMBER,
280     x_admission_appl_number IN NUMBER
281     ) AS
282 
283   /*************************************************************
284   Created By :
285   Date Created By :
286   Purpose :
287   Know limitations, enhancements or remarks
288   Change History
289   Who             When            What
290 
291   (reverse chronological order - newest change first)
292   ***************************************************************/
293 
294     CURSOR cur_rowid IS
295       SELECT   rowid
296       FROM     igs_ad_spl_talents
297       WHERE    person_id = x_person_id
298       AND      admission_appl_number = x_admission_appl_number;
299 
300     lv_rowid cur_rowid%RowType;
301 
302   BEGIN
303 
304     Open cur_rowid;
305     Fetch cur_rowid INTO lv_rowid;
306     IF (cur_rowid%FOUND) THEN
307       Close cur_rowid;
308       Fnd_Message.Set_Name ('IGS', 'IGS_AD_ASPLT_ACAI_FK');
309       IGS_GE_MSG_STACK.ADD;
310       App_Exception.Raise_Exception;
311       Return;
312     END IF;
313     Close cur_rowid;
314 
315   END Get_FK_Igs_Ad_Appl;
316 
317   PROCEDURE Before_DML (
318     p_action IN VARCHAR2,
319     x_rowid IN VARCHAR2 DEFAULT NULL,
320     x_spl_talent_id IN NUMBER DEFAULT NULL,
321     x_person_id IN NUMBER DEFAULT NULL,
322     x_admission_appl_number IN NUMBER DEFAULT NULL,
323     x_special_talent_type_id IN NUMBER DEFAULT NULL,
324     x_creation_date IN DATE DEFAULT NULL,
325     x_created_by IN NUMBER DEFAULT NULL,
326     x_last_update_date IN DATE DEFAULT NULL,
327     x_last_updated_by IN NUMBER DEFAULT NULL,
328     x_last_update_login IN NUMBER DEFAULT NULL
329   ) AS
330   /*************************************************************
331   Created By :
332   Date Created By :
333   Purpose :
334   Know limitations, enhancements or remarks
335   Change History
336   Who             When            What
337 
338   (reverse chronological order - newest change first)
339   ***************************************************************/
340 
341   BEGIN
342 
343     Set_Column_Values (
344       p_action,
345       x_rowid,
346       x_spl_talent_id,
347       x_person_id,
348       x_admission_appl_number,
349       x_special_talent_type_id,
350       x_creation_date,
351       x_created_by,
352       x_last_update_date,
353       x_last_updated_by,
354       x_last_update_login
355     );
356 
357     igs_ad_gen_002.check_adm_appl_inst_stat(
358       nvl(x_person_id,old_references.person_id),
359       nvl(x_admission_appl_number,old_references.admission_appl_number),
360       NULL,
361       NULL,
362       'Y'              -- proceed phase - apadegal adtd001 igs.m
363     );
364 
365     IF (p_action = 'INSERT') THEN
366       -- Call all the procedures related to Before Insert.
367       Null;
368 	     IF Get_Pk_For_Validation(
369     		new_references.spl_talent_id)  THEN
370 	       Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
371       IGS_GE_MSG_STACK.ADD;
372 	       App_Exception.Raise_Exception;
373 	     END IF;
374       Check_Uniqueness;
375       Check_Constraints;
376       Check_Parent_Existance;
377     ELSIF (p_action = 'UPDATE') THEN
378       -- Call all the procedures related to Before Update.
379       Null;
380       Check_Uniqueness;
381       Check_Constraints;
382       Check_Parent_Existance;
383     ELSIF (p_action = 'DELETE') THEN
384       -- Call all the procedures related to Before Delete.
385       Null;
386     ELSIF (p_action = 'VALIDATE_INSERT') THEN
387 	 -- Call all the procedures related to Before Insert.
388       IF Get_PK_For_Validation (
389     		new_references.spl_talent_id)  THEN
390 	       Fnd_Message.Set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
391       IGS_GE_MSG_STACK.ADD;
392 	       App_Exception.Raise_Exception;
393 	     END IF;
394       Check_Uniqueness;
395       Check_Constraints;
396     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
397       Check_Uniqueness;
398       Check_Constraints;
399     ELSIF (p_action = 'VALIDATE_DELETE') THEN
400       Null;
401     END IF;
402      l_rowid := NULL;
403 
404   END Before_DML;
405 
406   PROCEDURE After_DML (
407     p_action IN VARCHAR2,
408     x_rowid IN VARCHAR2
409   ) IS
410   /*************************************************************
411   Created By :
412   Date Created By :
413   Purpose :
414   Know limitations, enhancements or remarks
415   Change History
416   Who             When            What
417 
418   (reverse chronological order - newest change first)
419   ***************************************************************/
420 
421   BEGIN
422 
423     l_rowid := x_rowid;
424 
425     IF (p_action = 'INSERT') THEN
426       -- Call all the procedures related to After Insert.
427       Null;
428     ELSIF (p_action = 'UPDATE') THEN
429       -- Call all the procedures related to After Update.
430       Null;
431     ELSIF (p_action = 'DELETE') THEN
432       -- Call all the procedures related to After Delete.
433       Null;
434     END IF;
435 
436   l_rowid:=NULL;
437   END After_DML;
438 
439  procedure INSERT_ROW (
440       X_ROWID in out NOCOPY VARCHAR2,
441        x_SPL_TALENT_ID IN OUT NOCOPY NUMBER,
442        x_PERSON_ID IN NUMBER,
443        x_ADMISSION_APPL_NUMBER IN NUMBER,
444        x_SPECIAL_TALENT_TYPE_ID IN NUMBER,
445       X_MODE in VARCHAR2
446   ) AS
447   /*************************************************************
448   Created By :
449   Date Created By :
450   Purpose :
451   Know limitations, enhancements or remarks
452   Change History
453   Who             When            What
454   ravishar      05/27/05        Security related changes
455 
456   (reverse chronological order - newest change first)
457   ***************************************************************/
458 
459     cursor C is select ROWID from IGS_AD_SPL_TALENTS
460              where                 SPL_TALENT_ID= X_SPL_TALENT_ID
461 ;
462      X_LAST_UPDATE_DATE DATE ;
463      X_LAST_UPDATED_BY NUMBER ;
464      X_LAST_UPDATE_LOGIN NUMBER ;
465      X_REQUEST_ID NUMBER;
466      X_PROGRAM_ID NUMBER;
467      X_PROGRAM_APPLICATION_ID NUMBER;
468      X_PROGRAM_UPDATE_DATE DATE;
469  begin
470     X_LAST_UPDATE_DATE := SYSDATE;
471     if(X_MODE = 'I') then
472       X_LAST_UPDATED_BY := 1;
473       X_LAST_UPDATE_LOGIN := 0;
474     elsif (X_MODE IN ('R', 'S')) then
475       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
476       if X_LAST_UPDATED_BY is NULL then
477         X_LAST_UPDATED_BY := -1;
478       end if;
479       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
480       if X_LAST_UPDATE_LOGIN is NULL then
481         X_LAST_UPDATE_LOGIN := -1;
482       end if;
483       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
484       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
485       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
486       if (X_REQUEST_ID =  -1) then
487         X_REQUEST_ID := NULL;
488         X_PROGRAM_ID := NULL;
489         X_PROGRAM_APPLICATION_ID := NULL;
490         X_PROGRAM_UPDATE_DATE := NULL;
491       else
492         X_PROGRAM_UPDATE_DATE := SYSDATE;
493       end if;
494     else
495       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
496       IGS_GE_MSG_STACK.ADD;
497       app_exception.raise_exception;
498     end if;
499 
500    X_SPL_TALENT_ID := -1;
501    Before_DML(
502  		p_action=>'INSERT',
503  		x_rowid=>X_ROWID,
504  	       x_spl_talent_id=>X_SPL_TALENT_ID,
505  	       x_person_id=>X_PERSON_ID,
506  	       x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
507  	       x_special_talent_type_id=>X_SPECIAL_TALENT_TYPE_ID,
508 	       x_creation_date=>X_LAST_UPDATE_DATE,
509 	       x_created_by=>X_LAST_UPDATED_BY,
510 	       x_last_update_date=>X_LAST_UPDATE_DATE,
511 	       x_last_updated_by=>X_LAST_UPDATED_BY,
512 	       x_last_update_login=>X_LAST_UPDATE_LOGIN);
513   IF (x_mode = 'S') THEN
514      igs_sc_gen_001.set_ctx('R');
515   END IF;
516  INSERT INTO IGS_AD_SPL_TALENTS (
517 		SPL_TALENT_ID
518 		,PERSON_ID
519 		,ADMISSION_APPL_NUMBER
520 		,SPECIAL_TALENT_TYPE_ID
521 	        ,CREATION_DATE
522 		,CREATED_BY
523 		,LAST_UPDATE_DATE
524 		,LAST_UPDATED_BY
525 		,LAST_UPDATE_LOGIN
526 		,REQUEST_ID
527 		,PROGRAM_ID
528 		,PROGRAM_APPLICATION_ID
529 		,PROGRAM_UPDATE_DATE
530         ) values  (
531 	        IGS_AD_SPL_TALENTS_S.NEXTVAL
532 	        ,NEW_REFERENCES.PERSON_ID
533 	        ,NEW_REFERENCES.ADMISSION_APPL_NUMBER
534 	        ,NEW_REFERENCES.SPECIAL_TALENT_TYPE_ID
535 	        ,X_LAST_UPDATE_DATE
536 		,X_LAST_UPDATED_BY
537 		,X_LAST_UPDATE_DATE
538 		,X_LAST_UPDATED_BY
539 		,X_LAST_UPDATE_LOGIN
540 		,X_REQUEST_ID
541 		,X_PROGRAM_ID
542 		,X_PROGRAM_APPLICATION_ID
543 		,X_PROGRAM_UPDATE_DATE
544 ) RETURNING SPL_TALENT_ID INTO X_SPL_TALENT_ID;
545  IF (x_mode = 'S') THEN
546     igs_sc_gen_001.unset_ctx('R');
547  END IF;
548 
549 		open c;
550 		 fetch c into X_ROWID;
551  		if (c%notfound) then
552 		close c;
553  	     raise no_data_found;
554 		end if;
555  		close c;
556     After_DML (
557 		p_action => 'INSERT' ,
558 		x_rowid => X_ROWID );
559 EXCEPTION
560   WHEN OTHERS THEN
561   IF (x_mode = 'S') THEN
562      igs_sc_gen_001.unset_ctx('R');
563   END IF;
564     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
565       -- Code to handle Security Policy error raised
566       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
567       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
568       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
569       --    that the ownerof policy function does not have privilege to access.
570       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
571       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
572       IGS_GE_MSG_STACK.ADD;
573       app_exception.raise_exception;
574     ELSE
575       RAISE;
576     END IF;
577 END INSERT_ROW;
578  PROCEDURE LOCK_ROW (
579       X_ROWID in  VARCHAR2,
580        x_SPL_TALENT_ID IN NUMBER,
581        x_PERSON_ID IN NUMBER,
582        x_ADMISSION_APPL_NUMBER IN NUMBER,
583        x_SPECIAL_TALENT_TYPE_ID IN NUMBER  ) AS
584   /*************************************************************
585   Created By :
586   Date Created By :
587   Purpose :
588   Know limitations, enhancements or remarks
589   Change History
590   Who             When            What
591 
592   (reverse chronological order - newest change first)
593   ***************************************************************/
594 
595    cursor c1 is select
596       PERSON_ID
597 ,      ADMISSION_APPL_NUMBER
598 ,      SPECIAL_TALENT_TYPE_ID
599     from IGS_AD_SPL_TALENTS
600     where ROWID = X_ROWID
601     for update nowait;
602      tlinfo c1%rowtype;
603 begin
604   open c1;
605   fetch c1 into tlinfo;
606   if (c1%notfound) then
607     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
608       IGS_GE_MSG_STACK.ADD;
609     close c1;
610     app_exception.raise_exception;
611     return;
612   end if;
613   close c1;
614 if ( (  tlinfo.PERSON_ID = X_PERSON_ID)
615   AND (tlinfo.ADMISSION_APPL_NUMBER = X_ADMISSION_APPL_NUMBER)
616   AND (tlinfo.SPECIAL_TALENT_TYPE_ID = X_SPECIAL_TALENT_TYPE_ID)
617   ) then
618     null;
619   else
620     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
621       IGS_GE_MSG_STACK.ADD;
622     app_exception.raise_exception;
623   end if;
624   return;
625 end LOCK_ROW;
626  Procedure UPDATE_ROW (
627       X_ROWID in  VARCHAR2,
628        x_SPL_TALENT_ID IN NUMBER,
629        x_PERSON_ID IN NUMBER,
630        x_ADMISSION_APPL_NUMBER IN NUMBER,
631        x_SPECIAL_TALENT_TYPE_ID IN NUMBER,
632       X_MODE in VARCHAR2
633   ) AS
634   /*************************************************************
635   Created By :
636   Date Created By :
637   Purpose :
638   Know limitations, enhancements or remarks
639   Change History
640   Who             When            What
641   ravishar      05/27/05        Security related changes
642 
643   (reverse chronological order - newest change first)
644   ***************************************************************/
645 
646      X_LAST_UPDATE_DATE DATE ;
647      X_LAST_UPDATED_BY NUMBER ;
648      X_LAST_UPDATE_LOGIN NUMBER ;
649      X_REQUEST_ID NUMBER;
650      X_PROGRAM_ID NUMBER;
651      X_PROGRAM_APPLICATION_ID NUMBER;
652      X_PROGRAM_UPDATE_DATE DATE;
653  begin
654     X_LAST_UPDATE_DATE := SYSDATE;
655     if(X_MODE = 'I') then
656       X_LAST_UPDATED_BY := 1;
657       X_LAST_UPDATE_LOGIN := 0;
658     elsif (X_MODE IN ('R', 'S')) then
659       X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
660       if X_LAST_UPDATED_BY is NULL then
661         X_LAST_UPDATED_BY := -1;
662       end if;
663       X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
664       if X_LAST_UPDATE_LOGIN is NULL then
665         X_LAST_UPDATE_LOGIN := -1;
666       end if;
667     else
668       FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
669       IGS_GE_MSG_STACK.ADD;
670       app_exception.raise_exception;
671     end if;
672    Before_DML(
673  		p_action=>'UPDATE',
674  		x_rowid=>X_ROWID,
675  	       x_spl_talent_id=>X_SPL_TALENT_ID,
676  	       x_person_id=>X_PERSON_ID,
677  	       x_admission_appl_number=>X_ADMISSION_APPL_NUMBER,
678  	       x_special_talent_type_id=>X_SPECIAL_TALENT_TYPE_ID,
679 	       x_creation_date=>X_LAST_UPDATE_DATE,
680 	       x_created_by=>X_LAST_UPDATED_BY,
681 	       x_last_update_date=>X_LAST_UPDATE_DATE,
682 	       x_last_updated_by=>X_LAST_UPDATED_BY,
683 	       x_last_update_login=>X_LAST_UPDATE_LOGIN);
684 
685     if (X_MODE IN ('R', 'S')) then
686       X_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
687       X_PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
688       X_PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
689       if (X_REQUEST_ID = -1) then
690         X_REQUEST_ID := OLD_REFERENCES.REQUEST_ID;
691         X_PROGRAM_ID := OLD_REFERENCES. PROGRAM_ID;
692         X_PROGRAM_APPLICATION_ID := OLD_REFERENCES.PROGRAM_APPLICATION_ID;
693         X_PROGRAM_UPDATE_DATE := OLD_REFERENCES.PROGRAM_UPDATE_DATE;
694       else
695         X_PROGRAM_UPDATE_DATE := SYSDATE;
696       end if;
697     end if;
698 
699   IF (x_mode = 'S') THEN
700     igs_sc_gen_001.set_ctx('R');
701   END IF;
702   UPDATE IGS_AD_SPL_TALENTS set
703       PERSON_ID =  NEW_REFERENCES.PERSON_ID,
704       ADMISSION_APPL_NUMBER =  NEW_REFERENCES.ADMISSION_APPL_NUMBER,
705       SPECIAL_TALENT_TYPE_ID =  NEW_REFERENCES.SPECIAL_TALENT_TYPE_ID,
706 	LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
707 	LAST_UPDATED_BY = X_LAST_UPDATED_BY,
708 	LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
709 ,	REQUEST_ID = X_REQUEST_ID,
710 	PROGRAM_ID = X_PROGRAM_ID,
711 	PROGRAM_APPLICATION_ID = PROGRAM_APPLICATION_ID,
712 	PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE
713 	  where ROWID = X_ROWID;
714 	if (sql%notfound) then
715      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
716      igs_ge_msg_stack.add;
717      igs_sc_gen_001.unset_ctx('R');
718      app_exception.raise_exception;
719 	end if;
720  IF (x_mode = 'S') THEN
721     igs_sc_gen_001.unset_ctx('R');
722  END IF;
723 
724 
725  After_DML (
726 	p_action => 'UPDATE' ,
727 	x_rowid => X_ROWID
728 	);
729 EXCEPTION
730   WHEN OTHERS THEN
731    IF (x_mode = 'S') THEN
732       igs_sc_gen_001.unset_ctx('R');
733    END IF;
734     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
735       -- Code to handle Security Policy error raised
736       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
737       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
738       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
739       --    that the ownerof policy function does not have privilege to access.
740       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
741       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
742       IGS_GE_MSG_STACK.ADD;
743       app_exception.raise_exception;
744     ELSE
745       RAISE;
746     END IF;
747 END UPDATE_ROW;
748  PROCEDURE ADD_ROW (
749       X_ROWID in out NOCOPY VARCHAR2,
750        x_SPL_TALENT_ID IN OUT NOCOPY NUMBER,
751        x_PERSON_ID IN NUMBER,
752        x_ADMISSION_APPL_NUMBER IN NUMBER,
753        x_SPECIAL_TALENT_TYPE_ID IN NUMBER,
754       X_MODE in VARCHAR2
755   ) AS
756   /*************************************************************
757   Created By :
758   Date Created By :
759   Purpose :
760   Know limitations, enhancements or remarks
761   Change History
762   Who             When            What
763 
764   (reverse chronological order - newest change first)
765   ***************************************************************/
766 
767     cursor c1 is select ROWID from IGS_AD_SPL_TALENTS
768              where     SPL_TALENT_ID= X_SPL_TALENT_ID
769 ;
770 begin
771 	open c1;
772 		fetch c1 into X_ROWID;
773 	if (c1%notfound) then
774 	close c1;
775     INSERT_ROW (
776       X_ROWID,
777        X_SPL_TALENT_ID,
778        X_PERSON_ID,
779        X_ADMISSION_APPL_NUMBER,
780        X_SPECIAL_TALENT_TYPE_ID,
781       X_MODE );
782      return;
783 	end if;
784 	   close c1;
785 UPDATE_ROW (
786       X_ROWID,
787        X_SPL_TALENT_ID,
788        X_PERSON_ID,
789        X_ADMISSION_APPL_NUMBER,
790        X_SPECIAL_TALENT_TYPE_ID,
791       X_MODE );
792 end ADD_ROW;
793 procedure DELETE_ROW (
794   X_ROWID in VARCHAR2,
795   x_mode IN VARCHAR2
796 ) AS
797   /*************************************************************
798   Created By :
799   Date Created By :
800   Purpose :
801   Know limitations, enhancements or remarks
802   Change History
803   Who             When            What
804   ravishar      05/27/05        Security related changes
805 
806   (reverse chronological order - newest change first)
807   ***************************************************************/
808 
809 begin
810 Before_DML (
811 p_action => 'DELETE',
812 x_rowid => X_ROWID
813 );
814   IF (x_mode = 'S') THEN
815     igs_sc_gen_001.set_ctx('R');
816   END IF;
817  delete from IGS_AD_SPL_TALENTS
818  where ROWID = X_ROWID;
819   IF (sql%notfound) THEN
820      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
821      igs_ge_msg_stack.add;
822      igs_sc_gen_001.unset_ctx('R');
823      app_exception.raise_exception;
824  END IF;
825  IF (x_mode = 'S') THEN
826     igs_sc_gen_001.unset_ctx('R');
827  END IF;
828 
829 After_DML (
830  p_action => 'DELETE',
831  x_rowid => X_ROWID
832 );
833 EXCEPTION
834   WHEN OTHERS THEN
835  IF (x_mode = 'S') THEN
836     igs_sc_gen_001.unset_ctx('R');
837  END IF;
838     IF SQLCODE = '-28115' OR SQLCODE = '-28113' OR SQLCODE = '-28111' THEN
839       -- Code to handle Security Policy error raised
840       -- 1) ORA-28115 (policy with check option violation) which is raised when Policy predicate was evaluated to FALSE with the updated values.
841       -- 2) ORA-28113 (policy predicate has error) which is raised when Policy function generates invalid predicate.
842       -- 3) ORA-28111 (insufficient privilege to evaluate policy predicate) which is raised when Predicate has a subquery which contains objects
843       --    that the ownerof policy function does not have privilege to access.
844       FND_MESSAGE.SET_NAME ('IGS', 'IGS_SC_POLICY_EXCEPTION');
845       FND_MESSAGE.SET_TOKEN('ERR_CD',SQLCODE);
846       IGS_GE_MSG_STACK.ADD;
847       app_exception.raise_exception;
848     ELSE
849       RAISE;
850     END IF;
851 END DELETE_ROW;
852 
853 END igs_ad_spl_talents_pkg;