DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_PS_STAGE_RU_PKG

Source


1 package body IGS_PS_STAGE_RU_PKG AS
2 /* $Header: IGSPI33B.pls 115.4 2002/11/29 02:22:03 nsidana ship $ */
3   l_rowid VARCHAR2(25);
4   old_references IGS_PS_STAGE_RU%RowType;
5   new_references IGS_PS_STAGE_RU%RowType;
6 
7   PROCEDURE Set_Column_Values (
8     p_action IN VARCHAR2,
9     x_rowid IN VARCHAR2 DEFAULT NULL,
10     x_course_cd IN VARCHAR2 DEFAULT NULL,
11     x_version_number IN NUMBER DEFAULT NULL,
12     x_cst_sequence_number IN NUMBER DEFAULT NULL,
13     x_s_rule_call_cd IN VARCHAR2 DEFAULT NULL,
14     x_rul_sequence_number IN NUMBER DEFAULT NULL,
15     x_creation_date IN DATE DEFAULT NULL,
16     x_created_by IN NUMBER DEFAULT NULL,
17     x_last_update_date IN DATE DEFAULT NULL,
18     x_last_updated_by IN NUMBER DEFAULT NULL,
19     x_last_update_login IN NUMBER DEFAULT NULL
20   ) AS
21 
22     CURSOR cur_old_ref_values IS
23       SELECT   *
24       FROM     IGS_PS_STAGE_RU
25       WHERE    rowid = x_rowid;
26 
27   BEGIN
28 
29     l_rowid := x_rowid;
30 
31     -- Code for setting the Old and New Reference Values.
32     -- Populate Old Values.
33     Open cur_old_ref_values;
34     Fetch cur_old_ref_values INTO old_references;
35     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT','VALIDATE_INSERT')) THEN
36       Close cur_old_ref_values;
37       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
38       IGS_GE_MSG_STACK.ADD;
39       App_Exception.Raise_Exception;
40       Return;
41     END IF;
42     Close cur_old_ref_values;
43 
44     -- Populate New Values.
45     new_references.course_cd := x_course_cd;
46     new_references.version_number := x_version_number;
47     new_references.cst_sequence_number := x_cst_sequence_number;
48     new_references.s_rule_call_cd := x_s_rule_call_cd;
49     new_references.rul_sequence_number := x_rul_sequence_number;
50     IF (p_action = 'UPDATE') THEN
51       new_references.creation_date := old_references.creation_date;
52       new_references.created_by := old_references.created_by;
53     ELSE
54       new_references.creation_date := x_creation_date;
55       new_references.created_by := x_created_by;
56     END IF;
57     new_references.last_update_date := x_last_update_date;
58     new_references.last_updated_by := x_last_updated_by;
59     new_references.last_update_login := x_last_update_login;
60 
61   END Set_Column_Values;
62 
63   PROCEDURE BeforeRowInsertUpdate1(
64     p_inserting IN BOOLEAN DEFAULT FALSE,
65     p_updating IN BOOLEAN DEFAULT FALSE,
66     p_deleting IN BOOLEAN DEFAULT FALSE
67     ) AS
68 	v_message_name	VARCHAR2(30);
69   BEGIN
70 	-- Validate IGS_PS_COURSE Stage IGS_RU_RULE
71 	IF p_inserting OR p_updating THEN
72 /*
73 ||  Bug ID 1956374 - Removal of Duplicate Program Units from OSS.
74 ||  Changed the reference of "IGS_PS_VAL_CSR.RULP_VAL_RUL_SRC" to program unit "IGS_FI_VAL_FDFR.RULP_VAL_RUL_SRC". -- kdande
75 */
76 		IF  IGS_FI_VAL_FDFR.rulp_val_rul_src(
77 				new_references.s_rule_call_cd,
78 				'CRS-STAGE',
79 				new_references.rul_sequence_number,
80 				v_message_name) = FALSE THEN
81 		Fnd_Message.Set_Name('IGS',v_message_name);
82 		IGS_GE_MSG_STACK.ADD;
83 		App_Exception.Raise_Exception;
84 		END IF;
85 	END IF;
86 
87 
88   END BeforeRowInsertUpdate1;
89 
90   PROCEDURE Check_Constraints (
91 	Column_Name IN VARCHAR2 DEFAULT NULL,
92 	Column_Value IN VARCHAR2 DEFAULT NULL
93   ) AS
94   BEGIN
95 	IF column_name is null THEN
96 	   NULL;
97 	ELSIF upper(column_name) = 'COURSE_CD' THEN
98 	   new_references.course_cd := column_value;
99 	ELSIF upper(column_name) = 'S_RULE_CALL_CD' THEN
100 	   new_references.s_rule_call_cd := column_value;
101 	ELSIF upper(column_name) = 'CST_SEQUENCE_NUMBER' THEN
102 	   new_references.cst_sequence_number := IGS_GE_NUMBER.TO_NUM(column_value);
103 	ELSIF upper(column_name) = 'RUL_SEQUENCE_NUMBER' THEN
104 	   new_references.rul_sequence_number := IGS_GE_NUMBER.TO_NUM(column_value);
105 	END IF;
106 	IF upper(column_name)= 'COURSE_CD' OR
107 		column_name is null THEN
108 		IF new_references.course_cd <> UPPER(new_references.course_cd)
109 		THEN
110             	Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
111             	IGS_GE_MSG_STACK.ADD;
112             	App_Exception.Raise_Exception;
113 		END IF;
114 	END IF;
115 
116 	IF upper(column_name)= 'S_RULE_CALL_CD' OR
117 		column_name is null THEN
118 		IF new_references.s_rule_call_cd <> UPPER(new_references.s_rule_call_cd)
119 		THEN
120             	Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
121             	IGS_GE_MSG_STACK.ADD;
122             	App_Exception.Raise_Exception;
123 		END IF;
124 	END IF;
125 
126   	IF upper(column_name)= 'CST_SEQUENCE_NUMBER' OR
127 		column_name is null THEN
128 		IF new_references.cst_sequence_number < 1  OR
129 		 new_references.cst_sequence_number > 999999
130 		THEN
131             	Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
132             	IGS_GE_MSG_STACK.ADD;
133             	App_Exception.Raise_Exception;
134 		END IF;
135 	END IF;
136 
137 	IF upper(column_name)= 'RUL_SEQUENCE_NUMBER' OR
138 		column_name is null THEN
139 		IF new_references.rul_sequence_number < 1  OR
140 		 new_references.rul_sequence_number > 999999
141 		THEN
142             	Fnd_Message.Set_Name ('IGS', 'IGS_GE_INVALID_VALUE');
143             	IGS_GE_MSG_STACK.ADD;
144             	App_Exception.Raise_Exception;
145 		END IF;
146 	END IF;
147 
148   END Check_Constraints;
149 
150   PROCEDURE Check_Parent_Existance AS
151   BEGIN
152 
153     IF (((old_references.version_number = new_references.version_number) AND
154          (old_references.course_cd = new_references.course_cd) AND
155          (old_references.cst_sequence_number = new_references.cst_sequence_number)) OR
156         ((new_references.version_number IS NULL) OR
157          (new_references.course_cd IS NULL) OR
158          (new_references.cst_sequence_number IS NULL))) THEN
159       NULL;
160     ELSE
161       IF NOT IGS_PS_STAGE_PKG.Get_PK_For_Validation (
162         new_references.version_number,
163         new_references.course_cd,
164         new_references.cst_sequence_number
165       )THEN
166 	Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
167 	IGS_GE_MSG_STACK.ADD;
168       App_Exception.Raise_Exception;
169       END IF;
170     END IF;
171 
172     IF (((old_references.rul_sequence_number = new_references.rul_sequence_number)) OR
173         ((new_references.rul_sequence_number IS NULL))) THEN
174       NULL;
175     ELSE
176       IF NOT IGS_RU_RULE_PKG.Get_PK_For_Validation (
177         new_references.rul_sequence_number
178       )THEN
179 	Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
180 	IGS_GE_MSG_STACK.ADD;
181       App_Exception.Raise_Exception;
182       END IF;
183     END IF;
184 
185     IF (((old_references.s_rule_call_cd = new_references.s_rule_call_cd)) OR
186         ((new_references.s_rule_call_cd IS NULL))) THEN
187       NULL;
188     ELSE
189       IF NOT IGS_RU_CALL_PKG.Get_PK_For_Validation (
190         new_references.s_rule_call_cd
191       )THEN
192 	Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
193 	IGS_GE_MSG_STACK.ADD;
194       App_Exception.Raise_Exception;
195       END IF;
196     END IF;
197 
198   END Check_Parent_Existance;
199 
200   FUNCTION Get_PK_For_Validation (
201     x_course_cd IN VARCHAR2,
202     x_version_number IN NUMBER,
203     x_cst_sequence_number IN NUMBER,
204     x_s_rule_call_cd IN VARCHAR2
205     ) RETURN BOOLEAN AS
206 
207     CURSOR cur_rowid IS
208       SELECT   rowid
209       FROM     IGS_PS_STAGE_RU
210       WHERE    course_cd = x_course_cd
211       AND      version_number = x_version_number
212       AND      cst_sequence_number = x_cst_sequence_number
213       AND      s_rule_call_cd = x_s_rule_call_cd
214       FOR UPDATE NOWAIT;
215 
216     lv_rowid cur_rowid%RowType;
217 
218   BEGIN
219 
220     Open cur_rowid;
221     Fetch cur_rowid INTO lv_rowid;
222 	IF (cur_rowid%FOUND) THEN
223 		Close cur_rowid;
224 		Return(TRUE);
225 	ELSE
226 		Close cur_rowid;
227 		Return(FALSE);
228 	END IF;
229   END Get_PK_For_Validation;
230 
231   PROCEDURE GET_FK_IGS_PS_STAGE (
232     x_version_number IN NUMBER,
233     x_course_cd IN VARCHAR2,
234     x_sequence_number IN NUMBER
235     ) AS
236 
237     CURSOR cur_rowid IS
238       SELECT   rowid
239       FROM     IGS_PS_STAGE_RU
240       WHERE    course_cd = x_course_cd
241       AND      version_number = x_version_number
242       AND      cst_sequence_number = x_sequence_number ;
243 
244     lv_rowid cur_rowid%RowType;
245 
246   BEGIN
247 
248     Open cur_rowid;
249     Fetch cur_rowid INTO lv_rowid;
250     IF (cur_rowid%FOUND) THEN
251       Close cur_rowid;
252       Fnd_Message.Set_Name ('IGS', 'IGS_PS_CSR_CST_FK');
253       IGS_GE_MSG_STACK.ADD;
254       App_Exception.Raise_Exception;
255       Return;
256     END IF;
257     Close cur_rowid;
258 
259   END GET_FK_IGS_PS_STAGE;
260 
261   PROCEDURE GET_FK_IGS_RU_RULE (
262     x_sequence_number IN NUMBER
263     ) AS
264 
265     CURSOR cur_rowid IS
266       SELECT   rowid
267       FROM     IGS_PS_STAGE_RU
268       WHERE    rul_sequence_number = x_sequence_number ;
269 
270     lv_rowid cur_rowid%RowType;
271 
272   BEGIN
273 
274     Open cur_rowid;
275     Fetch cur_rowid INTO lv_rowid;
276     IF (cur_rowid%FOUND) THEN
277       Close cur_rowid;
278       Fnd_Message.Set_Name ('IGS', 'IGS_PS_CSR_RUL_FK');
279       IGS_GE_MSG_STACK.ADD;
280       App_Exception.Raise_Exception;
281       Return;
282     END IF;
283     Close cur_rowid;
284 
285   END GET_FK_IGS_RU_RULE;
286 
287   PROCEDURE GET_FK_IGS_RU_CALL (
288     x_s_rule_call_cd IN VARCHAR2
289     ) AS
290 
291     CURSOR cur_rowid IS
292       SELECT   rowid
293       FROM     IGS_PS_STAGE_RU
294       WHERE    s_rule_call_cd = x_s_rule_call_cd ;
295 
296     lv_rowid cur_rowid%RowType;
297 
298   BEGIN
299 
300     Open cur_rowid;
301     Fetch cur_rowid INTO lv_rowid;
302     IF (cur_rowid%FOUND) THEN
303       Close cur_rowid;
304       Fnd_Message.Set_Name ('IGS', 'IGS_PS_CSR_SRC_FK');
305       IGS_GE_MSG_STACK.ADD;
306       App_Exception.Raise_Exception;
307       Return;
308     END IF;
309     Close cur_rowid;
310 
311   END GET_FK_IGS_RU_CALL;
312 
313   PROCEDURE Before_DML (
314     p_action IN VARCHAR2,
315     x_rowid IN VARCHAR2 DEFAULT NULL,
316     x_course_cd IN VARCHAR2 DEFAULT NULL,
317     x_version_number IN NUMBER DEFAULT NULL,
318     x_cst_sequence_number IN NUMBER DEFAULT NULL,
319     x_s_rule_call_cd IN VARCHAR2 DEFAULT NULL,
320     x_rul_sequence_number IN NUMBER DEFAULT NULL,
321     x_creation_date IN DATE DEFAULT NULL,
322     x_created_by IN NUMBER DEFAULT NULL,
323     x_last_update_date IN DATE DEFAULT NULL,
324     x_last_updated_by IN NUMBER DEFAULT NULL,
325     x_last_update_login IN NUMBER DEFAULT NULL
326   ) AS
327   BEGIN
328 
329     Set_Column_Values (
330       p_action,
331       x_rowid,
332       x_course_cd,
333       x_version_number,
334       x_cst_sequence_number,
335       x_s_rule_call_cd,
336       x_rul_sequence_number,
337       x_creation_date,
338       x_created_by,
339       x_last_update_date,
340       x_last_updated_by,
341       x_last_update_login
342     );
343 
344     IF (p_action = 'INSERT') THEN
345       -- Call all the procedures related to Before Insert.
346       BeforeRowInsertUpdate1 ( p_inserting => TRUE );
347 	IF Get_PK_For_Validation(
348     		new_references.course_cd ,
349     		new_references.version_number ,
350     		new_references.cst_sequence_number,
351 		new_references.s_rule_call_cd
352     	) THEN
353 	Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
354 	IGS_GE_MSG_STACK.ADD;
355       App_Exception.Raise_Exception;
356 	END IF;
357 	Check_Constraints;
358       Check_Parent_Existance;
359     ELSIF (p_action = 'UPDATE') THEN
360       -- Call all the procedures related to Before Update.
361       BeforeRowInsertUpdate1 ( p_updating => TRUE );
362       Check_Constraints;
363       Check_Parent_Existance;
364 
365     ELSIF (p_action = 'VALIDATE_INSERT') THEN
366 	 IF Get_PK_For_Validation(
367     		new_references.course_cd ,
368     		new_references.version_number ,
369     		new_references.cst_sequence_number,
370 		new_references.s_rule_call_cd
371 	) THEN
372 	Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
373 	IGS_GE_MSG_STACK.ADD;
374       App_Exception.Raise_Exception;
375 	END IF;
376      	Check_Constraints;
377     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
378      	Check_Constraints;
379     END IF;
380   END Before_DML;
381 
382   PROCEDURE After_DML (
383     p_action IN VARCHAR2,
384     x_rowid IN VARCHAR2
385   ) AS
386   BEGIN
387 
388     l_rowid := x_rowid;
389 
390 
391   END After_DML;
392 
393 
394 procedure INSERT_ROW (
395   X_ROWID in out NOCOPY VARCHAR2,
396   X_COURSE_CD in VARCHAR2,
397   X_VERSION_NUMBER in NUMBER,
398   X_S_RULE_CALL_CD in VARCHAR2,
399   X_CST_SEQUENCE_NUMBER in NUMBER,
400   X_RUL_SEQUENCE_NUMBER in NUMBER,
401   X_MODE in VARCHAR2 default 'R'
402   ) AS
403     cursor C is select ROWID from IGS_PS_STAGE_RU
404       where COURSE_CD = X_COURSE_CD
405       and VERSION_NUMBER = X_VERSION_NUMBER
406       and S_RULE_CALL_CD = X_S_RULE_CALL_CD
407       and CST_SEQUENCE_NUMBER = X_CST_SEQUENCE_NUMBER;
408     X_LAST_UPDATE_DATE DATE;
409     X_LAST_UPDATED_BY NUMBER;
410     X_LAST_UPDATE_LOGIN NUMBER;
411 begin
412   X_LAST_UPDATE_DATE := SYSDATE;
413   if(X_MODE = 'I') then
414     X_LAST_UPDATED_BY := 1;
415     X_LAST_UPDATE_LOGIN := 0;
416   elsif (X_MODE = 'R') then
417     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
418     if X_LAST_UPDATED_BY is NULL then
419       X_LAST_UPDATED_BY := -1;
420     end if;
421     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
422     if X_LAST_UPDATE_LOGIN is NULL then
423       X_LAST_UPDATE_LOGIN := -1;
424     end if;
425   else
426     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
427     IGS_GE_MSG_STACK.ADD;
428     app_exception.raise_exception;
429   end if;
430  Before_DML( p_action => 'INSERT',
431     x_rowid => X_ROWID,
432     x_course_cd => X_COURSE_CD,
433     x_version_number => X_VERSION_NUMBER,
434     x_cst_sequence_number => X_CST_SEQUENCE_NUMBER,
435     x_s_rule_call_cd => X_S_RULE_CALL_CD,
436     x_rul_sequence_number => X_RUL_SEQUENCE_NUMBER,
437     x_creation_date => X_LAST_UPDATE_DATE,
438     x_created_by => X_LAST_UPDATED_BY,
439     x_last_update_date => X_LAST_UPDATE_DATE,
440     x_last_updated_by => X_LAST_UPDATED_BY,
441     x_last_update_login => X_LAST_UPDATE_LOGIN
442   );
443   insert into IGS_PS_STAGE_RU (
444     COURSE_CD,
445     VERSION_NUMBER,
446     CST_SEQUENCE_NUMBER,
447     S_RULE_CALL_CD,
448     RUL_SEQUENCE_NUMBER,
449     CREATION_DATE,
450     CREATED_BY,
451     LAST_UPDATE_DATE,
452     LAST_UPDATED_BY,
453     LAST_UPDATE_LOGIN
454   ) values (
455     NEW_REFERENCES.COURSE_CD,
456     NEW_REFERENCES.VERSION_NUMBER,
457     NEW_REFERENCES.CST_SEQUENCE_NUMBER,
458     NEW_REFERENCES.S_RULE_CALL_CD,
459     NEW_REFERENCES.RUL_SEQUENCE_NUMBER,
460     X_LAST_UPDATE_DATE,
461     X_LAST_UPDATED_BY,
462     X_LAST_UPDATE_DATE,
463     X_LAST_UPDATED_BY,
464     X_LAST_UPDATE_LOGIN
465   );
466 
467   open c;
468   fetch c into X_ROWID;
469   if (c%notfound) then
470     close c;
471     raise no_data_found;
472   end if;
473   close c;
474  After_DML(
475   p_action => 'INSERT',
476   x_rowid => X_ROWID
477   );
478 
479 end INSERT_ROW;
480 
481 procedure LOCK_ROW (
482   X_ROWID in VARCHAR2,
483   X_COURSE_CD in VARCHAR2,
484   X_VERSION_NUMBER in NUMBER,
485   X_S_RULE_CALL_CD in VARCHAR2,
486   X_CST_SEQUENCE_NUMBER in NUMBER,
487   X_RUL_SEQUENCE_NUMBER in NUMBER
488 ) AS
489   cursor c1 is select
490       RUL_SEQUENCE_NUMBER
491     from IGS_PS_STAGE_RU
492     where ROWID=X_ROWID for update nowait;
493   tlinfo c1%rowtype;
494 
495 begin
496   open c1;
497   fetch c1 into tlinfo;
498   if (c1%notfound) then
499     close c1;
500     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
501     IGS_GE_MSG_STACK.ADD;
502     app_exception.raise_exception;
503     return;
504   end if;
505   close c1;
506 
507   if ( (tlinfo.RUL_SEQUENCE_NUMBER = X_RUL_SEQUENCE_NUMBER)
508   ) then
509     null;
510   else
511     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
512     IGS_GE_MSG_STACK.ADD;
513     app_exception.raise_exception;
514   end if;
515   return;
516 end LOCK_ROW;
517 
518 procedure UPDATE_ROW (
519   X_ROWID in VARCHAR2,
520   X_COURSE_CD in VARCHAR2,
521   X_VERSION_NUMBER in NUMBER,
522   X_S_RULE_CALL_CD in VARCHAR2,
523   X_CST_SEQUENCE_NUMBER in NUMBER,
524   X_RUL_SEQUENCE_NUMBER in NUMBER,
525   X_MODE in VARCHAR2 default 'R'
526   ) AS
527     X_LAST_UPDATE_DATE DATE;
528     X_LAST_UPDATED_BY NUMBER;
529     X_LAST_UPDATE_LOGIN NUMBER;
530 begin
531   X_LAST_UPDATE_DATE := SYSDATE;
532   if(X_MODE = 'I') then
533     X_LAST_UPDATED_BY := 1;
534     X_LAST_UPDATE_LOGIN := 0;
535   elsif (X_MODE = 'R') then
536     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
537     if X_LAST_UPDATED_BY is NULL then
538       X_LAST_UPDATED_BY := -1;
539     end if;
540     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
541     if X_LAST_UPDATE_LOGIN is NULL then
542       X_LAST_UPDATE_LOGIN := -1;
543     end if;
544   else
545     FND_MESSAGE.SET_NAME('FND', 'SYSTEM-INVALID ARGS');
546     IGS_GE_MSG_STACK.ADD;
547     app_exception.raise_exception;
548   end if;
549  Before_DML( p_action => 'UPDATE',
550     x_rowid => X_ROWID,
551     x_course_cd => X_COURSE_CD,
552     x_version_number => X_VERSION_NUMBER,
553     x_cst_sequence_number => X_CST_SEQUENCE_NUMBER,
554     x_s_rule_call_cd => X_S_RULE_CALL_CD,
555     x_rul_sequence_number => X_RUL_SEQUENCE_NUMBER,
556     x_creation_date => X_LAST_UPDATE_DATE,
557     x_created_by => X_LAST_UPDATED_BY,
558     x_last_update_date => X_LAST_UPDATE_DATE,
559     x_last_updated_by => X_LAST_UPDATED_BY,
560     x_last_update_login => X_LAST_UPDATE_LOGIN
561   );
562 
563   update IGS_PS_STAGE_RU set
564     RUL_SEQUENCE_NUMBER = NEW_REFERENCES.RUL_SEQUENCE_NUMBER,
565     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
566     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
567     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
568   where ROWID = X_ROWID
569   ;
570   if (sql%notfound) then
571     raise no_data_found;
572   end if;
573  After_DML(
574   p_action => 'UPDATE',
575   x_rowid => X_ROWID
576   );
577 
578 end UPDATE_ROW;
579 
580 procedure ADD_ROW (
581   X_ROWID in out NOCOPY VARCHAR2,
582   X_COURSE_CD in VARCHAR2,
583   X_VERSION_NUMBER in NUMBER,
584   X_S_RULE_CALL_CD in VARCHAR2,
585   X_CST_SEQUENCE_NUMBER in NUMBER,
586   X_RUL_SEQUENCE_NUMBER in NUMBER,
587   X_MODE in VARCHAR2 default 'R'
588   ) AS
589   cursor c1 is select rowid from IGS_PS_STAGE_RU
590      where COURSE_CD = X_COURSE_CD
591      and VERSION_NUMBER = X_VERSION_NUMBER
592      and S_RULE_CALL_CD = X_S_RULE_CALL_CD
593      and CST_SEQUENCE_NUMBER = X_CST_SEQUENCE_NUMBER
594   ;
595 
596 begin
597   open c1;
598   fetch c1 into X_ROWID;
599   if (c1%notfound) then
600     close c1;
601     INSERT_ROW (
602      X_ROWID,
603      X_COURSE_CD,
604      X_VERSION_NUMBER,
605      X_S_RULE_CALL_CD,
606      X_CST_SEQUENCE_NUMBER,
607      X_RUL_SEQUENCE_NUMBER,
608      X_MODE);
609     return;
610   end if;
611   close c1;
612   UPDATE_ROW (
613    X_ROWID,
614    X_COURSE_CD,
615    X_VERSION_NUMBER,
616    X_S_RULE_CALL_CD,
617    X_CST_SEQUENCE_NUMBER,
618    X_RUL_SEQUENCE_NUMBER,
619    X_MODE);
620 end ADD_ROW;
621 
622 procedure DELETE_ROW (
623   X_ROWID in VARCHAR2
624 ) AS
625 begin
626  Before_DML( p_action => 'DELETE',
627     x_rowid => X_ROWID
628   );
629 
630   delete from IGS_PS_STAGE_RU
631   where ROWID = X_ROWID;
632   if (sql%notfound) then
633     raise no_data_found;
634   end if;
635  After_DML(
636   p_action => 'DELETE',
637   x_rowid => X_ROWID
638   );
639 
640 end DELETE_ROW;
641 
642 end IGS_PS_STAGE_RU_PKG;