1 Package Body per_ppc_upd as
2 /* $Header: peppcrhi.pkb 120.4 2006/08/16 14:04:23 abhshriv noship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- | Private Global Definitions |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package varchar2(33) := ' per_ppc_upd.'; -- Global package name
9 --
10 -- ----------------------------------------------------------------------------
11 -- |------------------------------< update_dml >------------------------------|
12 -- ----------------------------------------------------------------------------
13 -- {Start Of Comments}
14 --
15 -- Description:
16 -- This procedure controls the actual dml update logic. The processing of
17 -- this procedure is:
18 -- 1) Increment the object_version_number by 1 if the object_version_number
19 -- is defined as an attribute for this entity.
20 -- 2) To set and unset the g_api_dml status as required (as we are about to
21 -- perform dml).
22 -- 3) To update the specified row in the schema using the primary key in
23 -- the predicates.
24 -- 4) To trap any constraint violations that may have occurred.
25 -- 5) To raise any other errors.
26 --
27 -- Pre Conditions:
28 -- This is an internal private procedure which must be called from the upd
29 -- procedure.
30 --
31 -- In Parameters:
32 -- A Pl/Sql record structre.
33 --
34 -- Post Success:
35 -- The specified row will be updated in the schema.
36 --
37 -- Post Failure:
38 -- On the update dml failure it is important to note that we always reset the
39 -- g_api_dml status to false.
40 -- If a check, unique or parent integrity constraint violation is raised the
41 -- constraint_error procedure will be called.
42 -- If any other error is reported, the error will be raised after the
43 -- g_api_dml status is reset.
44 --
45 -- Developer Implementation Notes:
46 -- The update 'set' attribute list should be modified if any of your
47 -- attributes are not updateable.
48 --
49 -- Access Status:
50 -- Internal Table Handler Use Only.
51 --
52 -- {End Of Comments}
53 -- ----------------------------------------------------------------------------
54 Procedure update_dml(p_rec in out nocopy per_ppc_shd.g_rec_type) is
55 --
56 l_proc varchar2(72) := g_package||'update_dml';
57 --
58 Begin
59 hr_utility.set_location('Entering:'||l_proc, 5);
60 --
61 -- Increment the object version
62 --
63 p_rec.object_version_number := p_rec.object_version_number + 1;
64 --
65 per_ppc_shd.g_api_dml := true; -- Set the api dml status
66 --
67 -- Update the per_pay_proposal_components Row
68 --
69 update per_pay_proposal_components
70 set
71 component_id = p_rec.component_id,
72 approved = p_rec.approved,
73 component_reason = p_rec.component_reason,
74 change_amount_n = p_rec.change_amount_n,
75 change_percentage = p_rec.change_percentage,
76 comments = p_rec.comments,
77 attribute_category = p_rec.attribute_category,
78 attribute1 = p_rec.attribute1,
79 attribute2 = p_rec.attribute2,
80 attribute3 = p_rec.attribute3,
81 attribute4 = p_rec.attribute4,
82 attribute5 = p_rec.attribute5,
83 attribute6 = p_rec.attribute6,
84 attribute7 = p_rec.attribute7,
85 attribute8 = p_rec.attribute8,
86 attribute9 = p_rec.attribute9,
87 attribute10 = p_rec.attribute10,
88 attribute11 = p_rec.attribute11,
89 attribute12 = p_rec.attribute12,
90 attribute13 = p_rec.attribute13,
91 attribute14 = p_rec.attribute14,
92 attribute15 = p_rec.attribute15,
93 attribute16 = p_rec.attribute16,
94 attribute17 = p_rec.attribute17,
95 attribute18 = p_rec.attribute18,
96 attribute19 = p_rec.attribute19,
97 attribute20 = p_rec.attribute20,
98 object_version_number = p_rec.object_version_number
99 where component_id = p_rec.component_id;
100 --
101 per_ppc_shd.g_api_dml := false; -- Unset the api dml status
102 --
103 hr_utility.set_location(' Leaving:'||l_proc, 10);
104 --
105 Exception
106 When hr_api.check_integrity_violated Then
107 -- A check constraint has been violated
108 per_ppc_shd.g_api_dml := false; -- Unset the api dml status
109 per_ppc_shd.constraint_error
110 (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
111 When hr_api.parent_integrity_violated Then
112 -- Parent integrity has been violated
113 per_ppc_shd.g_api_dml := false; -- Unset the api dml status
114 per_ppc_shd.constraint_error
115 (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
116 When hr_api.unique_integrity_violated Then
117 -- Unique integrity has been violated
118 per_ppc_shd.g_api_dml := false; -- Unset the api dml status
119 per_ppc_shd.constraint_error
120 (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
121 When Others Then
122 per_ppc_shd.g_api_dml := false; -- Unset the api dml status
123 Raise;
124 End update_dml;
125 --
126 -- ----------------------------------------------------------------------------
127 -- |------------------------------< pre_update >------------------------------|
128 -- ----------------------------------------------------------------------------
129 -- {Start Of Comments}
130 --
131 -- Description:
132 -- This private procedure contains any processing which is required before
133 -- the update dml.
134 --
135 -- Pre Conditions:
136 -- This is an internal procedure which is called from the upd procedure.
137 --
138 -- In Parameters:
139 -- A Pl/Sql record structre.
140 --
141 -- Post Success:
142 -- Processing continues.
143 --
144 -- Post Failure:
145 -- If an error has occurred, an error message and exception will be raised
146 -- but not handled.
147 --
148 -- Developer Implementation Notes:
149 -- Any pre-processing required before the update dml is issued should be
150 -- coded within this procedure. It is important to note that any 3rd party
151 -- maintenance should be reviewed before placing in this procedure.
152 --
153 -- Access Status:
154 -- Internal Table Handler Use Only.
155 --
156 -- {End Of Comments}
157 -- ----------------------------------------------------------------------------
158 Procedure pre_update(p_rec in per_ppc_shd.g_rec_type) is
159 --
160 l_proc varchar2(72) := g_package||'pre_update';
161 --
162 Begin
163 hr_utility.set_location('Entering:'||l_proc, 5);
164 --
165 hr_utility.set_location(' Leaving:'||l_proc, 10);
166 End pre_update;
167 --
168 -- ----------------------------------------------------------------------------
169 -- |-----------------------------< post_update >------------------------------|
170 -- ----------------------------------------------------------------------------
171 -- {Start Of Comments}
172 --
173 -- Description:
174 -- This private procedure contains any processing which is required after the
175 -- update dml.
176 --
177 -- Pre Conditions:
178 -- This is an internal procedure which is called from the upd procedure.
179 --
180 -- In Parameters:
181 -- A Pl/Sql record structre.
182 --
183 -- Post Success:
184 -- Processing continues.
185 --
186 -- Post Failure:
187 -- If an error has occurred, an error message and exception will be raised
188 -- but not handled.
189 --
190 -- Developer Implementation Notes:
191 -- Any post-processing required after the update dml is issued should be
192 -- coded within this procedure. It is important to note that any 3rd party
193 -- maintenance should be reviewed before placing in this procedure.
194 --
195 -- Access Status:
196 -- Internal Table Handler Use Only.
197 --
198 -- {End Of Comments}
199 -- ----------------------------------------------------------------------------
200 Procedure post_update
201 (p_rec in per_ppc_shd.g_rec_type
202 ,p_validation_strength in varchar2
203 )
204 is
205 --
206 l_proc varchar2(72) := g_package||'post_update';
207 --
208 Begin
209 hr_utility.set_location('Entering:'||l_proc, 5);
210 --
211 -- Call to the user hook for post_update.
212
213 begin
214 per_ppc_rku.after_update
215 (
216 p_component_id => p_rec.component_id,
217 p_approved => p_rec.approved,
218 p_component_reason => p_rec.component_reason,
219 p_change_amount_n => p_rec.change_amount_n,
220 p_change_percentage => p_rec.change_percentage,
221 p_comments => p_rec.comments,
222 p_attribute_category => p_rec.attribute_category,
223 p_attribute1 => p_rec.attribute1,
224 p_attribute2 => p_rec.attribute2,
225 p_attribute3 => p_rec.attribute3,
226 p_attribute4 => p_rec.attribute4,
227 p_attribute5 => p_rec.attribute5,
228 p_attribute6 => p_rec.attribute6,
229 p_attribute7 => p_rec.attribute7,
230 p_attribute8 => p_rec.attribute8,
231 p_attribute9 => p_rec.attribute9,
232 p_attribute10 => p_rec.attribute10,
233 p_attribute11 => p_rec.attribute11,
234 p_attribute12 => p_rec.attribute12,
235 p_attribute13 => p_rec.attribute13,
236 p_attribute14 => p_rec.attribute14,
237 p_attribute15 => p_rec.attribute15,
238 p_attribute16 => p_rec.attribute16,
239 p_attribute17 => p_rec.attribute17,
240 p_attribute18 => p_rec.attribute18,
241 p_attribute19 => p_rec.attribute19,
242 p_attribute20 => p_rec.attribute20,
243 p_object_version_number => p_rec.object_version_number,
244 p_validation_strength => p_validation_strength,
245 p_pay_proposal_id_o => per_ppc_shd.g_old_rec.pay_proposal_id,
246 p_business_group_id_o => per_ppc_shd.g_old_rec.business_group_id,
247 p_approved_o => per_ppc_shd.g_old_rec.approved,
248 p_component_reason_o => per_ppc_shd.g_old_rec.component_reason,
249 p_change_amount_n_o => per_ppc_shd.g_old_rec.change_amount_n,
250 p_change_percentage_o => per_ppc_shd.g_old_rec.change_percentage,
251 p_comments_o => per_ppc_shd.g_old_rec.comments,
252 p_attribute_category_o => per_ppc_shd.g_old_rec.attribute_category,
253 p_attribute1_o => per_ppc_shd.g_old_rec.attribute1,
254 p_attribute2_o => per_ppc_shd.g_old_rec.attribute2,
255 p_attribute3_o => per_ppc_shd.g_old_rec.attribute3,
256 p_attribute4_o => per_ppc_shd.g_old_rec.attribute4,
257 p_attribute5_o => per_ppc_shd.g_old_rec.attribute5,
258 p_attribute6_o => per_ppc_shd.g_old_rec.attribute6,
259 p_attribute7_o => per_ppc_shd.g_old_rec.attribute7,
260 p_attribute8_o => per_ppc_shd.g_old_rec.attribute8,
261 p_attribute9_o => per_ppc_shd.g_old_rec.attribute9,
262 p_attribute10_o => per_ppc_shd.g_old_rec.attribute10,
263 p_attribute11_o => per_ppc_shd.g_old_rec.attribute11,
264 p_attribute12_o => per_ppc_shd.g_old_rec.attribute12,
265 p_attribute13_o => per_ppc_shd.g_old_rec.attribute13,
266 p_attribute14_o => per_ppc_shd.g_old_rec.attribute14,
267 p_attribute15_o => per_ppc_shd.g_old_rec.attribute15,
268 p_attribute16_o => per_ppc_shd.g_old_rec.attribute16,
269 p_attribute17_o => per_ppc_shd.g_old_rec.attribute17,
270 p_attribute18_o => per_ppc_shd.g_old_rec.attribute18,
271 p_attribute19_o => per_ppc_shd.g_old_rec.attribute19,
272 p_attribute20_o => per_ppc_shd.g_old_rec.attribute20,
273 p_object_version_number_o => per_ppc_shd.g_old_rec.object_version_number
274 );
275 exception
276 when hr_api.cannot_find_prog_unit then
277 hr_api.cannot_find_prog_unit_error
278 (p_module_name => 'PER_PAY_PROPOSAL_COMPONENTS'
279 ,p_hook_type => 'AU'
280 );
281 end;
282 -- End of API User Hook for post_update.
283
284 hr_utility.set_location(' Leaving:'||l_proc, 10);
285 End post_update;
286 --
287 -- ----------------------------------------------------------------------------
288 -- |-----------------------------< convert_defs >-----------------------------|
289 -- ----------------------------------------------------------------------------
290 -- {Start Of Comments}
291 --
292 -- Description:
293 -- The Convert_Defs procedure has one very important function:
294 -- It must return the record structure for the row with all system defaulted
295 -- values converted into its corresponding parameter value for update. When
296 -- we attempt to update a row through the Upd process , certain
297 -- parameters can be defaulted which enables flexibility in the calling of
298 -- the upd process (e.g. only attributes which need to be updated need to be
299 -- specified). For the upd process to determine which attributes
300 -- have NOT been specified we need to check if the parameter has a reserved
301 -- system default value. Therefore, for all parameters which have a
302 -- corresponding reserved system default mechanism specified we need to
303 -- check if a system default is being used. If a system default is being
304 -- used then we convert the defaulted value into its corresponding attribute
305 -- value held in the g_old_rec data structure.
306 --
307 -- Pre Conditions:
308 -- This private function can only be called from the upd process.
309 --
310 -- In Parameters:
311 -- A Pl/Sql record structre.
312 --
313 -- Post Success:
314 -- The record structure will be returned with all system defaulted parameter
315 -- values converted into its current row attribute value.
316 --
317 -- Post Failure:
318 -- No direct error handling is required within this function. Any possible
319 -- errors within this procedure will be a PL/SQL value error due to conversion
320
321 -- of datatypes or data lengths.
322 --
323 -- Developer Implementation Notes:
324 -- None.
325 --
326 -- Access Status:
327 -- Internal Table Handler Use Only.
328 --
329 -- {End Of Comments}
330 -- ----------------------------------------------------------------------------
331 Procedure convert_defs(p_rec in out nocopy per_ppc_shd.g_rec_type) is
332 --
333 l_proc varchar2(72) := g_package||'convert_defs';
334 --
335 Begin
336 --
337 hr_utility.set_location('Entering:'||l_proc, 5);
338 --
339 -- We must now examine each argument value in the
340 -- p_rec plsql record structure
341 -- to see if a system default is being used. If a system default
342 -- is being used then we must set to the 'current' argument value.
343 --
344 If (p_rec.pay_proposal_id = hr_api.g_number) then
345 p_rec.pay_proposal_id :=
346 per_ppc_shd.g_old_rec.pay_proposal_id;
347 End If;
348 If (p_rec.business_group_id = hr_api.g_number) then
349 p_rec.business_group_id :=
350 per_ppc_shd.g_old_rec.business_group_id;
351 End If;
352 If (p_rec.approved = hr_api.g_varchar2) then
353 p_rec.approved :=
354 per_ppc_shd.g_old_rec.approved;
355 End If;
356 If (p_rec.component_reason = hr_api.g_varchar2) then
357 p_rec.component_reason :=
358 per_ppc_shd.g_old_rec.component_reason;
359 End If;
360 If (p_rec.change_amount_n = hr_api.g_number) then
361 p_rec.change_amount_n :=
362 per_ppc_shd.g_old_rec.change_amount_n;
363 End If;
364 If (p_rec.change_percentage = hr_api.g_number) then
365 p_rec.change_percentage :=
366 per_ppc_shd.g_old_rec.change_percentage;
367 End If;
368 If (p_rec.comments = hr_api.g_varchar2) then
369 p_rec.comments :=
370 per_ppc_shd.g_old_rec.comments;
371 End If;
372 If (p_rec.attribute_category = hr_api.g_varchar2) then
373 p_rec.attribute_category :=
374 per_ppc_shd.g_old_rec.attribute_category;
375 End If;
376 If (p_rec.attribute1 = hr_api.g_varchar2) then
377 p_rec.attribute1 :=
378 per_ppc_shd.g_old_rec.attribute1;
379 End If;
380 If (p_rec.attribute2 = hr_api.g_varchar2) then
381 p_rec.attribute2 :=
382 per_ppc_shd.g_old_rec.attribute2;
383 End If;
384 If (p_rec.attribute3 = hr_api.g_varchar2) then
385 p_rec.attribute3 :=
386 per_ppc_shd.g_old_rec.attribute3;
387 End If;
388 If (p_rec.attribute4 = hr_api.g_varchar2) then
389 p_rec.attribute4 :=
390 per_ppc_shd.g_old_rec.attribute4;
391 End If;
392 If (p_rec.attribute5 = hr_api.g_varchar2) then
393 p_rec.attribute5 :=
394 per_ppc_shd.g_old_rec.attribute5;
395 End If;
396 If (p_rec.attribute6 = hr_api.g_varchar2) then
397 p_rec.attribute6 :=
398 per_ppc_shd.g_old_rec.attribute6;
399 End If;
400 If (p_rec.attribute7 = hr_api.g_varchar2) then
401 p_rec.attribute7 :=
402 per_ppc_shd.g_old_rec.attribute7;
403 End If;
404 If (p_rec.attribute8 = hr_api.g_varchar2) then
405 p_rec.attribute8 :=
406 per_ppc_shd.g_old_rec.attribute8;
407 End If;
408 If (p_rec.attribute9 = hr_api.g_varchar2) then
409 p_rec.attribute9 :=
410 per_ppc_shd.g_old_rec.attribute9;
411 End If;
412 If (p_rec.attribute10 = hr_api.g_varchar2) then
413 p_rec.attribute10 :=
414 per_ppc_shd.g_old_rec.attribute10;
415 End If;
416 If (p_rec.attribute11 = hr_api.g_varchar2) then
417 p_rec.attribute11 :=
418 per_ppc_shd.g_old_rec.attribute11;
419 End If;
420 If (p_rec.attribute12 = hr_api.g_varchar2) then
421 p_rec.attribute12 :=
422 per_ppc_shd.g_old_rec.attribute12;
423 End If;
424 If (p_rec.attribute13 = hr_api.g_varchar2) then
425 p_rec.attribute13 :=
426 per_ppc_shd.g_old_rec.attribute13;
427 End If;
428 If (p_rec.attribute14 = hr_api.g_varchar2) then
429 p_rec.attribute14 :=
430 per_ppc_shd.g_old_rec.attribute14;
431 End If;
432 If (p_rec.attribute15 = hr_api.g_varchar2) then
433 p_rec.attribute15 :=
434 per_ppc_shd.g_old_rec.attribute15;
435 End If;
436 If (p_rec.attribute16 = hr_api.g_varchar2) then
437 p_rec.attribute16 :=
438 per_ppc_shd.g_old_rec.attribute16;
439 End If;
440 If (p_rec.attribute17 = hr_api.g_varchar2) then
441 p_rec.attribute17 :=
442 per_ppc_shd.g_old_rec.attribute17;
443 End If;
444 If (p_rec.attribute18 = hr_api.g_varchar2) then
445 p_rec.attribute18 :=
446 per_ppc_shd.g_old_rec.attribute18;
447 End If;
448 If (p_rec.attribute19 = hr_api.g_varchar2) then
449 p_rec.attribute19 :=
450 per_ppc_shd.g_old_rec.attribute19;
451 End If;
452 If (p_rec.attribute20 = hr_api.g_varchar2) then
453 p_rec.attribute20 :=
454 per_ppc_shd.g_old_rec.attribute20;
455 End If;
456
457 --
458 hr_utility.set_location(' Leaving:'||l_proc, 10);
459 --
460 End convert_defs;
461 --
462 -- ----------------------------------------------------------------------------
463 -- |---------------------------------< upd >----------------------------------|
464 -- ----------------------------------------------------------------------------
465 Procedure upd
466 (
467 p_rec in out nocopy per_ppc_shd.g_rec_type,
468 p_validation_strength in varchar2 default 'STRONG',
469 p_validate in boolean default false
470 ) is
471 --
472 l_proc varchar2(72) := g_package||'upd';
473 --
474 Begin
475 hr_utility.set_location('Entering:'||l_proc, 5);
476 --
477 -- Determine if the business process is to be validated.
478 --
479 If p_validate then
480 --
481 -- Issue the savepoint.
482 --
483 SAVEPOINT upd_per_ppc;
484 End If;
485 --
486 -- We must lock the row which we need to update.
487 --
488 per_ppc_shd.lck
489 (
490 p_rec.component_id,
491 p_rec.object_version_number
492 );
493 --
494 -- 1. During an update system defaults are used to determine if
495 -- arguments have been defaulted or not. We must therefore
496 -- derive the full record structure values to be updated.
497 --
498 -- 2. Call the supporting update validate operations.
499 --
500 convert_defs(p_rec);
501 per_ppc_bus.update_validate(p_rec,p_validation_strength);
502 --
503 -- Call the supporting pre-update operation
504 --
505 pre_update(p_rec);
506 --
507 -- Update the row.
508 --
509 update_dml(p_rec);
510 --
511 -- Call the supporting post-update operation
512 --
513 post_update(p_rec,p_validation_strength);
514 --
515 -- If we are validating then raise the Validate_Enabled exception
516 --
517 If p_validate then
518 Raise HR_Api.Validate_Enabled;
519 End If;
520 --
521 hr_utility.set_location(' Leaving:'||l_proc, 10);
522 Exception
523 When HR_Api.Validate_Enabled Then
524 --
525 -- As the Validate_Enabled exception has been raised
526 -- we must rollback to the savepoint
527 --
528 ROLLBACK TO upd_per_ppc;
529 End upd;
530 --
531 -- ----------------------------------------------------------------------------
532 -- |---------------------------------< upd >----------------------------------|
533 -- ----------------------------------------------------------------------------
534 Procedure upd
535 (
536 p_component_id in number,
537 p_approved in varchar2 default hr_api.g_varchar2,
538 p_component_reason in varchar2 default hr_api.g_varchar2,
539 p_change_amount_n in number default hr_api.g_number,
540 p_change_percentage in number default hr_api.g_number,
541 p_comments in varchar2 default hr_api.g_varchar2,
542 p_attribute_category in varchar2 default hr_api.g_varchar2,
543 p_attribute1 in varchar2 default hr_api.g_varchar2,
544 p_attribute2 in varchar2 default hr_api.g_varchar2,
545 p_attribute3 in varchar2 default hr_api.g_varchar2,
546 p_attribute4 in varchar2 default hr_api.g_varchar2,
547 p_attribute5 in varchar2 default hr_api.g_varchar2,
548 p_attribute6 in varchar2 default hr_api.g_varchar2,
549 p_attribute7 in varchar2 default hr_api.g_varchar2,
550 p_attribute8 in varchar2 default hr_api.g_varchar2,
551 p_attribute9 in varchar2 default hr_api.g_varchar2,
552 p_attribute10 in varchar2 default hr_api.g_varchar2,
553 p_attribute11 in varchar2 default hr_api.g_varchar2,
554 p_attribute12 in varchar2 default hr_api.g_varchar2,
555 p_attribute13 in varchar2 default hr_api.g_varchar2,
556 p_attribute14 in varchar2 default hr_api.g_varchar2,
557 p_attribute15 in varchar2 default hr_api.g_varchar2,
558 p_attribute16 in varchar2 default hr_api.g_varchar2,
559 p_attribute17 in varchar2 default hr_api.g_varchar2,
560 p_attribute18 in varchar2 default hr_api.g_varchar2,
561 p_attribute19 in varchar2 default hr_api.g_varchar2,
562 p_attribute20 in varchar2 default hr_api.g_varchar2,
563 p_object_version_number in out nocopy number,
564 p_validation_strength in varchar2 default 'STRONG',
565 p_validate in boolean default false
566 ) is
567 --
568 l_rec per_ppc_shd.g_rec_type;
569 l_proc varchar2(72) := g_package||'upd';
570 --
571 Begin
572 hr_utility.set_location('Entering:'||l_proc, 5);
573 --
574 -- Call conversion function to turn arguments into the
575 -- l_rec structure.
576 --
577 l_rec :=
578 per_ppc_shd.convert_args
579 (
580 p_component_id,
581 hr_api.g_number,
582 hr_api.g_number,
583 p_approved,
584 p_component_reason,
585 p_change_amount_n,
586 p_change_percentage,
587 p_comments,
588 p_attribute_category,
589 p_attribute1,
590 p_attribute2,
591 p_attribute3,
592 p_attribute4,
593 p_attribute5,
594 p_attribute6,
595 p_attribute7,
596 p_attribute8,
597 p_attribute9,
598 p_attribute10,
599 p_attribute11,
600 p_attribute12,
601 p_attribute13,
602 p_attribute14,
603 p_attribute15,
604 p_attribute16,
605 p_attribute17,
606 p_attribute18,
607 p_attribute19,
608 p_attribute20,
609 p_object_version_number
610 );
611 --
612 -- Having converted the arguments into the
613 -- plsql record structure we call the corresponding record
614 -- business process.
615 --
616 upd(l_rec, p_validation_strength, p_validate);
617 p_object_version_number := l_rec.object_version_number;
618 --
619 hr_utility.set_location(' Leaving:'||l_proc, 10);
620 End upd;
621 --
622 end per_ppc_upd;