DBA Data[Home] [Help]

PACKAGE BODY: APPS.AK_KEY_PVT

Source


1 package body AK_KEY_PVT as
2 /* $Header: akdvkeyb.pls 120.3 2005/09/15 22:18:28 tshort ship $: AKDVKEYB.pls */
3 
4 --=======================================================
5 --  Procedure   CREATE_FOREIGN_KEY
6 --
7 --  Usage       Private API for creating a foreign key. This
8 --              API should only be called by other APIs that are
9 --              owned by the Core Modules Team (AK).
10 --
11 --  Desc        Creates a foreign key using the given info. This
12 --              API should only be called by other APIs that are
13 --              owned by the Core Modules Team (AK).
14 --
15 --  Results     The API returns the standard p_return_status parameter
16 --              indicating one of the standard return statuses :
17 --                  * Unexpected error
18 --                  * Error
19 --                  * Success
20 --  Parameters  Foreign Key columns
21 --              p_loader_timestamp : IN optional
22 --                  If a timestamp is passed, the API will create the
23 --                  record using this timestamp. Only the upload API
24 --                  should call with this parameter loaded.
25 --
26 --  Version     Initial version number  =   1.0
27 --  History     Current version number  =   1.0
28 --=======================================================
29 procedure CREATE_FOREIGN_KEY (
30 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
31 p_api_version_number       IN      NUMBER,
32 p_init_msg_tbl             IN      BOOLEAN := FALSE,
33 p_msg_count                OUT NOCOPY     NUMBER,
34 p_msg_data                 OUT NOCOPY     VARCHAR2,
35 p_return_status            OUT NOCOPY     VARCHAR2,
36 p_foreign_key_name         IN      VARCHAR2,
37 p_database_object_name     IN      VARCHAR2,
38 p_unique_key_name          IN      VARCHAR2,
39 p_application_id           IN      NUMBER,
40 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
41 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
42 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
43 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
44 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
45 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
46 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
47 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
48 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
49 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
50 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
51 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
52 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
53 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
54 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
55 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
56 p_from_to_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
57 p_from_to_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
58 p_to_from_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
59 p_to_from_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
60 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
61 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
62 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
63 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
64 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
65 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
66 p_pass                     IN      NUMBER,
67 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
68 ) is
69 l_api_version_number  CONSTANT number := 1.0;
70 l_api_name            CONSTANT varchar2(30) := 'Create_Foreign_Key';
71 l_attribute_category  VARCHAR2(30);
72 l_attribute1          VARCHAR2(150);
73 l_attribute2          VARCHAR2(150);
74 l_attribute3          VARCHAR2(150);
75 l_attribute4          VARCHAR2(150);
76 l_attribute5          VARCHAR2(150);
77 l_attribute6          VARCHAR2(150);
78 l_attribute7          VARCHAR2(150);
79 l_attribute8          VARCHAR2(150);
80 l_attribute9          VARCHAR2(150);
81 l_attribute10         VARCHAR2(150);
82 l_attribute11         VARCHAR2(150);
83 l_attribute12         VARCHAR2(150);
84 l_attribute13         VARCHAR2(150);
85 l_attribute14         VARCHAR2(150);
86 l_attribute15         VARCHAR2(150);
87 l_created_by          number;
88 l_creation_date       date;
89 l_error               boolean;
90 l_from_to_description VARCHAR2(1500);
91 l_from_to_name        VARCHAR2(45);
92 l_lang                varchar2(30);
93 l_last_update_date    date;
94 l_last_update_login   number;
95 l_last_updated_by     number;
96 l_return_status       varchar2(1);
97 l_to_from_description VARCHAR2(1500);
98 l_to_from_name        VARCHAR2(45);
99 begin
100 
101 IF NOT FND_API.Compatible_API_Call (
102 l_api_version_number, p_api_version_number, l_api_name,
103 G_PKG_NAME) then
104 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
105 return;
106 END IF;
107 
108 -- Initialize the message table if requested.
109 
110 if p_init_msg_tbl then
111 FND_MSG_PUB.initialize;
112 end if;
113 
114 savepoint start_create_foreign_key;
115 
116 --** check to see if row already exists **
117 if  AK_KEY_PVT.FOREIGN_KEY_EXISTS (
118 p_api_version_number => 1.0,
119 p_return_status => l_return_status,
120 p_foreign_key_name => p_foreign_key_name) then
121 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
122 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_EXISTS');
123 FND_MSG_PUB.Add;
124 end if;
125 --dbms_output.put_line(l_api_name || 'Error - Row already exists');
126 raise FND_API.G_EXC_ERROR;
127 end if;
128 
129 --** validate table columns passed in **
130 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
131 if not VALIDATE_FOREIGN_KEY (
132 p_validation_level => p_validation_level,
133 p_api_version_number => 1.0,
134 p_return_status => l_return_status,
135 p_foreign_key_name => p_foreign_key_name,
136 p_database_object_name => p_database_object_name,
137 p_unique_key_name => p_unique_key_name,
138 p_application_id => p_application_id,
139 p_caller => AK_ON_OBJECTS_PVT.G_CREATE,
140 p_pass => p_pass
141 ) then
142 --dbms_output.put_line(l_api_name || 'validation failed');
143 raise FND_API.G_EXC_ERROR;
144 end if;
145 end if;
146 
147 --** Load non-required columns if their values are given **
148 if (p_attribute_category <> FND_API.G_MISS_CHAR) then
149 l_attribute_category := p_attribute_category;
150 end if;
151 
152 if (p_attribute1 <> FND_API.G_MISS_CHAR) then
153 l_attribute1 := p_attribute1;
154 end if;
155 
156 if (p_attribute2 <> FND_API.G_MISS_CHAR) then
157 l_attribute2 := p_attribute2;
158 end if;
159 
160 if (p_attribute3 <> FND_API.G_MISS_CHAR) then
161 l_attribute3 := p_attribute3;
162 end if;
163 
164 if (p_attribute4 <> FND_API.G_MISS_CHAR) then
165 l_attribute4 := p_attribute4;
166 end if;
167 
168 if (p_attribute5 <> FND_API.G_MISS_CHAR) then
169 l_attribute5 := p_attribute5;
170 end if;
171 
172 if (p_attribute6 <> FND_API.G_MISS_CHAR) then
173 l_attribute6 := p_attribute6;
174 end if;
175 
176 if (p_attribute7 <> FND_API.G_MISS_CHAR) then
177 l_attribute7:= p_attribute7;
178 end if;
179 
180 if (p_attribute8 <> FND_API.G_MISS_CHAR) then
181 l_attribute8 := p_attribute8;
182 end if;
183 
184 if (p_attribute9 <> FND_API.G_MISS_CHAR) then
185 l_attribute9 := p_attribute9;
186 end if;
187 
188 if (p_attribute10 <> FND_API.G_MISS_CHAR) then
189 l_attribute10 := p_attribute10;
190 end if;
191 
192 if (p_attribute11 <> FND_API.G_MISS_CHAR) then
193 l_attribute11 := p_attribute11;
194 end if;
195 
196 if (p_attribute12 <> FND_API.G_MISS_CHAR) then
197 l_attribute12 := p_attribute12;
198 end if;
199 
200 if (p_attribute13 <> FND_API.G_MISS_CHAR) then
201 l_attribute13 := p_attribute13;
202 end if;
203 
204 if (p_attribute14 <> FND_API.G_MISS_CHAR) then
205 l_attribute14 := p_attribute14;
206 end if;
207 
208 if (p_attribute15 <> FND_API.G_MISS_CHAR) then
209 l_attribute15 := p_attribute15;
210 end if;
211 
212 if (p_from_to_name <> FND_API.G_MISS_CHAR) then
213 l_from_to_name := p_from_to_name;
214 end if;
215 
216 if (p_from_to_description <> FND_API.G_MISS_CHAR) then
217 l_from_to_description := p_from_to_description;
218 end if;
219 
220 if (p_to_from_name <> FND_API.G_MISS_CHAR) then
221 l_to_from_name := p_to_from_name;
222 end if;
223 
224 if (p_to_from_description <> FND_API.G_MISS_CHAR) then
225 l_to_from_description := p_to_from_description;
226 end if;
227 
228   if (p_created_by <> FND_API.G_MISS_NUM) then
229     l_created_by := p_created_by;
230   end if;
231 
232   if (p_creation_date <> FND_API.G_MISS_DATE) then
233     l_creation_date := p_creation_date;
234   end if;
235 
236   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
237     l_last_updated_by := p_last_updated_by;
238   end if;
239 
240   if (p_last_update_date <> FND_API.G_MISS_DATE) then
241     l_last_update_date := p_last_update_date;
242   end if;
243 
244   if (p_last_update_login <> FND_API.G_MISS_NUM) then
245     l_last_update_login := p_last_update_login;
246   end if;
247 
248 -- Create record if no validation error was found
249   --  NOTE - Calling IS_UPDATEABLE for backward compatibility
250   --  old jlt files didn't have who columns and IS_UPDATEABLE
251   --  calls SET_WHO which populates those columns, for later
252   --  jlt files IS_UPDATEABLE will always return TRUE for CREATE
253 
254   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
255        p_loader_timestamp => p_loader_timestamp,
256        p_created_by => l_created_by,
257        p_creation_date => l_creation_date,
258        p_last_updated_by => l_last_updated_by,
259        p_db_last_updated_by => null,
260        p_last_update_date => l_last_update_date,
261        p_db_last_update_date => null,
262        p_last_update_login => l_last_update_login,
263        p_create_or_update => 'CREATE') then
264      null;
265   end if;
266 
267 select userenv('LANG') into l_lang
268 from dual;
269 
270 insert into AK_FOREIGN_KEYS (
271 FOREIGN_KEY_NAME,
272 DATABASE_OBJECT_NAME,
273 UNIQUE_KEY_NAME,
274 APPLICATION_ID,
275 ATTRIBUTE_CATEGORY,
276 ATTRIBUTE1,
277 ATTRIBUTE2,
278 ATTRIBUTE3,
279 ATTRIBUTE4,
280 ATTRIBUTE5,
281 ATTRIBUTE6,
282 ATTRIBUTE7,
283 ATTRIBUTE8,
284 ATTRIBUTE9,
285 ATTRIBUTE10,
286 ATTRIBUTE11,
287 ATTRIBUTE12,
288 ATTRIBUTE13,
289 ATTRIBUTE14,
290 ATTRIBUTE15,
291 CREATION_DATE,
292 CREATED_BY,
293 LAST_UPDATE_DATE,
294 LAST_UPDATED_BY,
295 LAST_UPDATE_LOGIN
296 ) values (
297 p_foreign_key_name,
298 p_database_object_name,
299 p_unique_key_name,
300 p_application_id,
301 l_attribute_category,
302 l_attribute1,
303 l_attribute2,
304 l_attribute3,
305 l_attribute4,
306 l_attribute5,
307 l_attribute6,
308 l_attribute7,
309 l_attribute8,
310 l_attribute9,
311 l_attribute10,
312 l_attribute11,
313 l_attribute12,
314 l_attribute13,
315 l_attribute14,
316 l_attribute15,
317 l_creation_date,
318 l_created_by,
319 l_last_update_date,
320 l_last_updated_by,
321 l_last_update_login
322 );
323 
324 --** row should exists before inserting rows for other languages **
325 if  NOT AK_KEY_PVT.FOREIGN_KEY_EXISTS (
326 p_api_version_number => 1.0,
327 p_return_status => l_return_status,
328 p_foreign_key_name => p_foreign_key_name) then
329 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) THEN
330 FND_MESSAGE.SET_NAME('AK','AK_INSERT_FK_FAILED');
331 FND_MSG_PUB.Add;
332 end if;
333 --dbms_output.put_line(G_PKG_NAME || 'Error - First insert failed');
334 raise FND_API.G_EXC_ERROR;
335 end if;
336 
337 insert into AK_FOREIGN_KEYS_TL (
338 FOREIGN_KEY_NAME,
339 LANGUAGE,
340 FROM_TO_NAME,
341 FROM_TO_DESCRIPTION,
342 TO_FROM_NAME,
343 TO_FROM_DESCRIPTION,
344 SOURCE_LANG,
345 CREATION_DATE,
346 CREATED_BY,
347 LAST_UPDATE_DATE,
348 LAST_UPDATED_BY,
349 LAST_UPDATE_LOGIN
350 ) select
351 p_foreign_key_name,
352 L.LANGUAGE_CODE,
353 l_from_to_name,
354 l_from_to_description,
355 l_to_from_name,
356 l_to_from_description,
357 decode(L.LANGUAGE_CODE, l_lang, L.LANGUAGE_CODE, l_lang),
358 l_creation_date,
359 l_created_by,
360 l_last_update_date,
361 l_last_updated_by,
362 l_last_update_login
363 from FND_LANGUAGES L
364 where L.INSTALLED_FLAG in ('I', 'B')
365 and not exists
366 (select NULL
367 from AK_FOREIGN_KEYS_TL T
368 where T.FOREIGN_KEY_NAME = p_foreign_key_name
369 and T.LANGUAGE = L.LANGUAGE_CODE);
370 
371 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
372 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_CREATED');
373 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
374 FND_MSG_PUB.Add;
375 end if;
376 
377 p_return_status := FND_API.G_RET_STS_SUCCESS;
378 
379 FND_MSG_PUB.Count_And_Get (
380 p_count => p_msg_count,
381 p_data => p_msg_data);
382 
383 EXCEPTION
384 WHEN VALUE_ERROR THEN
385 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
386 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_VALUE_ERROR');
387 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
388 FND_MSG_PUB.Add;
389 end if;
390 p_return_status := FND_API.G_RET_STS_ERROR;
391 rollback to start_create_foreign_key;
392 FND_MSG_PUB.Count_And_Get (
393 p_count => p_msg_count,
394 p_data => p_msg_data);
395 WHEN FND_API.G_EXC_ERROR THEN
399 FND_MSG_PUB.Add;
396 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
397 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_NOT_CREATED');
398 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
400 end if;
401 p_return_status := FND_API.G_RET_STS_ERROR;
402 rollback to start_create_foreign_key;
403 FND_MSG_PUB.Count_And_Get (
404 p_count => p_msg_count,
405 p_data => p_msg_data);
406 WHEN OTHERS THEN
407 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
408 rollback to start_create_foreign_key;
409 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_NOT_CREATED');
410 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
411 FND_MSG_PUB.Add;
412 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name,
413 SUBSTR (SQLERRM, 1, 240) );
414 FND_MSG_PUB.Count_And_Get (
415 p_count => p_msg_count,
416 p_data => p_msg_data);
417 end CREATE_FOREIGN_KEY;
418 
419 --=======================================================
420 --  Procedure   CREATE_FOREIGN_KEY_COLUMN
421 --
422 --  Usage       Private API for creating a foreign key column record.
423 --              This API should only be called by other APIs that are
424 --              owned by the Core Modules Team (AK).
425 --
426 --  Desc        Creates a foreign key column record using the given info.
427 --              This API should only be called by other APIs that are
428 --              owned by the Core Modules Team (AK).
429 --
430 --  Results     The API returns the standard p_return_status parameter
431 --              indicating one of the standard return statuses :
432 --                  * Unexpected error
433 --                  * Error
434 --                  * Success
435 --  Parameters  Foreign Key Column columns
436 --              p_loader_timestamp : IN optional
437 --                  If a timestamp is passed, the API will create the
438 --                  record using this timestamp. Only the upload API
439 --                  should call with this parameter loaded.
440 --
441 --  Version     Initial version number  =   1.0
442 --  History     Current version number  =   1.0
443 --=======================================================
444 procedure CREATE_FOREIGN_KEY_COLUMN (
445 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
446 p_api_version_number       IN      NUMBER,
447 p_init_msg_tbl             IN      BOOLEAN := FALSE,
448 p_msg_count                OUT NOCOPY     NUMBER,
449 p_msg_data                 OUT NOCOPY     VARCHAR2,
450 p_return_status            OUT NOCOPY     VARCHAR2,
451 p_foreign_key_name         IN      VARCHAR2,
452 p_attribute_application_id IN      NUMBER,
453 p_attribute_code           IN      VARCHAR2,
454 p_foreign_key_sequence     IN      NUMBER,
455 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
456 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
457 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
458 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
459 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
460 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
461 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
462 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
463 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
464 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
465 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
466 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
467 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
468 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
469 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
470 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
471 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
472 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
473 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
474 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
475 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
476 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
477 p_pass                     IN      NUMBER,
478 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
479 ) is
480 l_api_version_number CONSTANT number := 1.0;
481 l_api_name           CONSTANT varchar2(30) := 'Create_Foreign_Key_Column';
482 l_attribute_category     VARCHAR2(30);
483 l_attribute1             VARCHAR2(150);
484 l_attribute2             VARCHAR2(150);
485 l_attribute3             VARCHAR2(150);
486 l_attribute4             VARCHAR2(150);
487 l_attribute5             VARCHAR2(150);
488 l_attribute6             VARCHAR2(150);
489 l_attribute7             VARCHAR2(150);
490 l_attribute8             VARCHAR2(150);
491 l_attribute9             VARCHAR2(150);
492 l_attribute10            VARCHAR2(150);
493 l_attribute11            VARCHAR2(150);
494 l_attribute12            VARCHAR2(150);
495 l_attribute13            VARCHAR2(150);
496 l_attribute14            VARCHAR2(150);
497 l_attribute15            VARCHAR2(150);
498 l_created_by         number;
499 l_creation_date      date;
500 l_error              boolean;
501 l_last_update_date   date;
502 l_last_update_login  number;
503 l_last_updated_by    number;
504 l_return_status      varchar2(1);
505 begin
506 
507 IF NOT FND_API.Compatible_API_Call (
511 return;
508 l_api_version_number, p_api_version_number, l_api_name,
509 G_PKG_NAME) then
510 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
512 END IF;
513 
514 -- Initialize the message table if requested.
515 
516 if p_init_msg_tbl then
517 FND_MSG_PUB.initialize;
518 end if;
519 
520 savepoint start_create_key_column;
521 
522 --** check to see if row already exists **
523 if  AK_KEY_PVT.FOREIGN_KEY_COLUMN_EXISTS (
524 p_api_version_number => 1.0,
525 p_return_status => l_return_status,
526 p_foreign_key_name => p_foreign_key_name,
527 p_attribute_application_id => p_attribute_application_id,
528 p_attribute_code => p_attribute_code) then
529 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
530 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_EXISTS');
531 FND_MSG_PUB.Add;
532 end if;
533 raise FND_API.G_EXC_ERROR;
534 end if;
535 
536 --** validate table columns passed in **
537 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
538 if not VALIDATE_FOREIGN_KEY_COLUMN (
539 p_validation_level => p_validation_level,
540 p_api_version_number => 1.0,
541 p_return_status => l_return_status,
542 p_foreign_key_name => p_foreign_key_name,
543 p_attribute_application_id => p_attribute_application_id,
544 p_attribute_code => p_attribute_code,
545 p_foreign_key_sequence => p_foreign_key_sequence,
546 p_caller => AK_ON_OBJECTS_PVT.G_CREATE,
547 p_pass => p_pass
548 ) then
549 raise FND_API.G_EXC_ERROR;
550 end if;
551 end if;
552 
553 --** Load non-required columns if their values are given **
554 --
555 if (p_attribute_category <> FND_API.G_MISS_CHAR) then
556 l_attribute_category := p_attribute_category;
557 end if;
558 
559 if (p_attribute1 <> FND_API.G_MISS_CHAR) then
560 l_attribute1 := p_attribute1;
561 end if;
562 
563 if (p_attribute2 <> FND_API.G_MISS_CHAR) then
564 l_attribute2 := p_attribute2;
565 end if;
566 
567 if (p_attribute3 <> FND_API.G_MISS_CHAR) then
568 l_attribute3 := p_attribute3;
569 end if;
570 
571 if (p_attribute4 <> FND_API.G_MISS_CHAR) then
572 l_attribute4 := p_attribute4;
573 end if;
574 
575 if (p_attribute5 <> FND_API.G_MISS_CHAR) then
576 l_attribute5 := p_attribute5;
577 end if;
578 
579 if (p_attribute6 <> FND_API.G_MISS_CHAR) then
580 l_attribute6 := p_attribute6;
581 end if;
582 
583 if (p_attribute7 <> FND_API.G_MISS_CHAR) then
584 l_attribute7:= p_attribute7;
585 end if;
586 
587 if (p_attribute8 <> FND_API.G_MISS_CHAR) then
588 l_attribute8 := p_attribute8;
589 end if;
590 
591 if (p_attribute9 <> FND_API.G_MISS_CHAR) then
592 l_attribute9 := p_attribute9;
593 end if;
594 
595 if (p_attribute10 <> FND_API.G_MISS_CHAR) then
596 l_attribute10 := p_attribute10;
597 end if;
598 
599 if (p_attribute11 <> FND_API.G_MISS_CHAR) then
600 l_attribute11 := p_attribute11;
601 end if;
602 
603 if (p_attribute12 <> FND_API.G_MISS_CHAR) then
604 l_attribute12 := p_attribute12;
605 end if;
606 
607 if (p_attribute13 <> FND_API.G_MISS_CHAR) then
608 l_attribute13 := p_attribute13;
609 end if;
610 
611 if (p_attribute14 <> FND_API.G_MISS_CHAR) then
612 l_attribute14 := p_attribute14;
613 end if;
614 
615 if (p_attribute15 <> FND_API.G_MISS_CHAR) then
616 l_attribute15 := p_attribute15;
617 end if;
618 
619   if (p_created_by <> FND_API.G_MISS_NUM) then
620     l_created_by := p_created_by;
621   end if;
622 
623   if (p_creation_date <> FND_API.G_MISS_DATE) then
624     l_creation_date := p_creation_date;
625   end if;
626 
627   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
628     l_last_updated_by := p_last_updated_by;
629   end if;
630 
631   if (p_last_update_date <> FND_API.G_MISS_DATE) then
632     l_last_update_date := p_last_update_date;
633   end if;
634 
635   if (p_last_update_login <> FND_API.G_MISS_NUM) then
636     l_last_update_login := p_last_update_login;
637   end if;
638 
639 -- Create record if no validation error was found
640   --  NOTE - Calling IS_UPDATEABLE for backward compatibility
641   --  old jlt files didn't have who columns and IS_UPDATEABLE
642   --  calls SET_WHO which populates those columns, for later
643   --  jlt files IS_UPDATEABLE will always return TRUE for CREATE
644 
645   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
646        p_loader_timestamp => p_loader_timestamp,
647        p_created_by => l_created_by,
648        p_creation_date => l_creation_date,
649        p_last_updated_by => l_last_updated_by,
650        p_db_last_updated_by => null,
651        p_last_update_date => l_last_update_date,
652        p_db_last_update_date => null,
653        p_last_update_login => l_last_update_login,
654        p_create_or_update => 'CREATE') then
655      null;
656   end if;
657 
658 insert into AK_FOREIGN_KEY_COLUMNS (
659 FOREIGN_KEY_NAME,
660 ATTRIBUTE_APPLICATION_ID,
661 ATTRIBUTE_CODE,
662 FOREIGN_KEY_SEQUENCE,
663 ATTRIBUTE_CATEGORY,
664 ATTRIBUTE1,
665 ATTRIBUTE2,
666 ATTRIBUTE3,
667 ATTRIBUTE4,
668 ATTRIBUTE5,
669 ATTRIBUTE6,
670 ATTRIBUTE7,
671 ATTRIBUTE8,
675 ATTRIBUTE12,
672 ATTRIBUTE9,
673 ATTRIBUTE10,
674 ATTRIBUTE11,
676 ATTRIBUTE13,
677 ATTRIBUTE14,
678 ATTRIBUTE15,
679 CREATION_DATE,
680 CREATED_BY,
681 LAST_UPDATE_DATE,
682 LAST_UPDATED_BY,
683 LAST_UPDATE_LOGIN
684 ) values (
685 p_foreign_key_name,
686 p_attribute_application_id,
687 p_attribute_code,
688 p_foreign_key_sequence,
689 l_attribute_category,
690 l_attribute1,
691 l_attribute2,
692 l_attribute3,
693 l_attribute4,
694 l_attribute5,
695 l_attribute6,
696 l_attribute7,
697 l_attribute8,
698 l_attribute9,
699 l_attribute10,
700 l_attribute11,
701 l_attribute12,
702 l_attribute13,
703 l_attribute14,
704 l_attribute15,
705 l_creation_date,
706 l_created_by,
707 l_last_update_date,
708 l_last_updated_by,
709 l_last_update_login
710 );
711 
712 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
713 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_CREATED');
714 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
715 ' ' || to_char(p_attribute_application_id) ||
716 ' ' || p_attribute_code);
717 FND_MSG_PUB.Add;
718 end if;
719 
720 p_return_status := FND_API.G_RET_STS_SUCCESS;
721 
722 FND_MSG_PUB.Count_And_Get (
723 p_count => p_msg_count,
724 p_data => p_msg_data);
725 
726 EXCEPTION
727 WHEN VALUE_ERROR THEN
728 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
729 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_VALUE_ERROR');
730 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
731 ' ' || to_char(p_attribute_application_id) ||
732 ' ' || p_attribute_code);
733 FND_MSG_PUB.Add;
734 end if;
735 p_return_status := FND_API.G_RET_STS_ERROR;
736 rollback to start_create_key_column;
737 FND_MSG_PUB.Count_And_Get (
738 p_count => p_msg_count,
739 p_data => p_msg_data);
740 WHEN FND_API.G_EXC_ERROR THEN
741 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
742 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_NOT_CREATED');
743 FND_MESSAGE.SET_TOKEN('OBJECT','AK_FOREIGN_KEY_COLUMN',TRUE);
744 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
745 ' ' || to_char(p_attribute_application_id) ||
746 ' ' || p_attribute_code);
747 FND_MSG_PUB.Add;
748 end if;
749 p_return_status := FND_API.G_RET_STS_ERROR;
750 rollback to start_create_key_column;
751 FND_MSG_PUB.Count_And_Get (
752 p_count => p_msg_count,
753 p_data => p_msg_data);
754 WHEN OTHERS THEN
755 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
756 rollback to start_create_key_column;
757 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_NOT_CREATED');
758 FND_MESSAGE.SET_TOKEN('OBJECT','AK_FOREIGN_KEY_COLUMN',TRUE);
759 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
760 ' ' || to_char(p_attribute_application_id) ||
761 ' ' || p_attribute_code);
762 FND_MSG_PUB.Add;
763 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
764 SUBSTR (SQLERRM, 1, 240) );
765 FND_MSG_PUB.Add;
766 FND_MSG_PUB.Count_And_Get (
767 p_count => p_msg_count,
768 p_data => p_msg_data);
769 end CREATE_FOREIGN_KEY_COLUMN;
770 
771 --=======================================================
772 --  Procedure   CREATE_UNIQUE_KEY
773 --
774 --  Usage       Private API for creating a unique key. This
775 --              API should only be called by other APIs that are
776 --              owned by the Core Modules Team (AK).
777 --
778 --  Desc        Creates a unique key using the given info. This
779 --              API should only be called by other APIs that are
780 --              owned by the Core Modules Team (AK).
781 --
782 --  Results     The API returns the standard p_return_status parameter
783 --              indicating one of the standard return statuses :
784 --                  * Unexpected error
785 --                  * Error
786 --                  * Success
787 --  Parameters  Unique Key columns
788 --              p_loader_timestamp : IN optional
789 --                  If a timestamp is passed, the API will create the
790 --                  record using this timestamp. Only the upload API
791 --                  should call with this parameter loaded.
792 --
793 --  Version     Initial version number  =   1.0
794 --  History     Current version number  =   1.0
795 --=======================================================
796 procedure CREATE_UNIQUE_KEY (
797 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
798 p_api_version_number       IN      NUMBER,
799 p_init_msg_tbl             IN      BOOLEAN := FALSE,
800 p_msg_count                OUT NOCOPY     NUMBER,
801 p_msg_data                 OUT NOCOPY     VARCHAR2,
802 p_return_status            OUT NOCOPY     VARCHAR2,
803 p_unique_key_name          IN      VARCHAR2,
804 p_database_object_name     IN      VARCHAR2,
805 p_application_id           IN      NUMBER,
806 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
807 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
808 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
809 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
810 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
811 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
812 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
816 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
813 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
814 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
815 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
817 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
818 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
819 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
820 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
821 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
822 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
823 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
824 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
825 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
826 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
827 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
828 p_pass                     IN      NUMBER,
829 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
830 ) is
831 l_attribute_category VARCHAR2(30);
832 l_attribute1         VARCHAR2(150);
833 l_attribute2         VARCHAR2(150);
834 l_attribute3         VARCHAR2(150);
835 l_attribute4         VARCHAR2(150);
836 l_attribute5         VARCHAR2(150);
837 l_attribute6         VARCHAR2(150);
838 l_attribute7         VARCHAR2(150);
839 l_attribute8         VARCHAR2(150);
840 l_attribute9         VARCHAR2(150);
841 l_attribute10        VARCHAR2(150);
842 l_attribute11        VARCHAR2(150);
843 l_attribute12        VARCHAR2(150);
844 l_attribute13        VARCHAR2(150);
845 l_attribute14        VARCHAR2(150);
846 l_attribute15        VARCHAR2(150);
847 l_api_version_number CONSTANT number := 1.0;
848 l_api_name           CONSTANT varchar2(30) := 'Create_Unique_Key';
849 l_created_by         number;
850 l_creation_date      date;
851 l_dummy              number;
852 l_error              boolean;
853 l_last_update_date   date;
854 l_last_update_login  number;
855 l_last_updated_by    number;
856 l_return_status      varchar2(1);
857 begin
858 
859 IF NOT FND_API.Compatible_API_Call (
860 l_api_version_number, p_api_version_number, l_api_name,
861 G_PKG_NAME) then
862 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
863 return;
864 END IF;
865 
866 -- Initialize the message table if requested.
867 
868 if p_init_msg_tbl then
869 FND_MSG_PUB.initialize;
870 end if;
871 
872 savepoint start_create_unique_key;
873 
874 --** check to see if row already exists **
875 if  AK_KEY_PVT.UNIQUE_KEY_EXISTS (
876 p_api_version_number => 1.0,
877 p_return_status => l_return_status,
878 p_unique_key_name => p_unique_key_name) then
879 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
880 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_EXISTS');
881 FND_MSG_PUB.Add;
882 end if;
883 raise FND_API.G_EXC_ERROR;
884 end if;
885 
886 --** validate table columns passed in **
887 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
888 if not VALIDATE_UNIQUE_KEY (
889 p_validation_level => p_validation_level,
890 p_api_version_number => 1.0,
891 p_return_status => l_return_status,
892 p_unique_key_name => p_unique_key_name,
893 p_database_object_name => p_database_object_name,
894 p_application_id => p_application_id,
895 p_caller => AK_ON_OBJECTS_PVT.G_CREATE,
896 p_pass => p_pass
897 ) then
898 raise FND_API.G_EXC_ERROR;
899 end if;
900 end if;
901 
902 --
903 -- Load non-required columns if their values are given
904 if (p_attribute_category <> FND_API.G_MISS_CHAR) then
905 l_attribute_category := p_attribute_category;
906 end if;
907 
908 if (p_attribute1 <> FND_API.G_MISS_CHAR) then
909 l_attribute1 := p_attribute1;
910 end if;
911 
912 if (p_attribute2 <> FND_API.G_MISS_CHAR) then
913 l_attribute2 := p_attribute2;
914 end if;
915 
916 if (p_attribute3 <> FND_API.G_MISS_CHAR) then
917 l_attribute3 := p_attribute3;
918 end if;
919 
920 if (p_attribute4 <> FND_API.G_MISS_CHAR) then
921 l_attribute4 := p_attribute4;
922 end if;
923 
924 if (p_attribute5 <> FND_API.G_MISS_CHAR) then
925 l_attribute5 := p_attribute5;
926 end if;
927 
928 if (p_attribute6 <> FND_API.G_MISS_CHAR) then
929 l_attribute6 := p_attribute6;
930 end if;
931 
932 if (p_attribute7 <> FND_API.G_MISS_CHAR) then
933 l_attribute7:= p_attribute7;
934 end if;
935 
936 if (p_attribute8 <> FND_API.G_MISS_CHAR) then
937 l_attribute8 := p_attribute8;
938 end if;
939 
940 if (p_attribute9 <> FND_API.G_MISS_CHAR) then
941 l_attribute9 := p_attribute9;
942 end if;
943 
944 if (p_attribute10 <> FND_API.G_MISS_CHAR) then
945 l_attribute10 := p_attribute10;
946 end if;
947 
948 if (p_attribute11 <> FND_API.G_MISS_CHAR) then
949 l_attribute11 := p_attribute11;
950 end if;
951 
952 if (p_attribute12 <> FND_API.G_MISS_CHAR) then
953 l_attribute12 := p_attribute12;
954 end if;
955 
956 if (p_attribute13 <> FND_API.G_MISS_CHAR) then
957 l_attribute13 := p_attribute13;
958 end if;
959 
960 if (p_attribute14 <> FND_API.G_MISS_CHAR) then
964 if (p_attribute15 <> FND_API.G_MISS_CHAR) then
961 l_attribute14 := p_attribute14;
962 end if;
963 
965 l_attribute15 := p_attribute15;
966 end if;
967 
968   if (p_created_by <> FND_API.G_MISS_NUM) then
969     l_created_by := p_created_by;
970   end if;
971 
972   if (p_creation_date <> FND_API.G_MISS_DATE) then
973     l_creation_date := p_creation_date;
974   end if;
975 
976   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
977     l_last_updated_by := p_last_updated_by;
978   end if;
979 
980   if (p_last_update_date <> FND_API.G_MISS_DATE) then
981     l_last_update_date := p_last_update_date;
982   end if;
983 
984   if (p_last_update_login <> FND_API.G_MISS_NUM) then
985     l_last_update_login := p_last_update_login;
986   end if;
987 
988 -- Create record if no validation error was found
989   --  NOTE - Calling IS_UPDATEABLE for backward compatibility
990   --  old jlt files didn't have who columns and IS_UPDATEABLE
991   --  calls SET_WHO which populates those columns, for later
992   --  jlt files IS_UPDATEABLE will always return TRUE for CREATE
993 
994   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
995        p_loader_timestamp => p_loader_timestamp,
996        p_created_by => l_created_by,
997        p_creation_date => l_creation_date,
998        p_last_updated_by => l_last_updated_by,
999        p_db_last_updated_by => null,
1000        p_last_update_date => l_last_update_date,
1001        p_db_last_update_date => null,
1002        p_last_update_login => l_last_update_login,
1003        p_create_or_update => 'CREATE') then
1004      null;
1005   end if;
1006 
1007 insert into AK_UNIQUE_KEYS (
1008 UNIQUE_KEY_NAME,
1009 DATABASE_OBJECT_NAME,
1010 APPLICATION_ID,
1011 ATTRIBUTE_CATEGORY,
1012 ATTRIBUTE1,
1013 ATTRIBUTE2,
1014 ATTRIBUTE3,
1015 ATTRIBUTE4,
1016 ATTRIBUTE5,
1017 ATTRIBUTE6,
1018 ATTRIBUTE7,
1019 ATTRIBUTE8,
1020 ATTRIBUTE9,
1021 ATTRIBUTE10,
1022 ATTRIBUTE11,
1023 ATTRIBUTE12,
1024 ATTRIBUTE13,
1025 ATTRIBUTE14,
1026 ATTRIBUTE15,
1027 CREATION_DATE,
1028 CREATED_BY,
1029 LAST_UPDATE_DATE,
1030 LAST_UPDATED_BY,
1031 LAST_UPDATE_LOGIN
1032 ) values (
1033 p_unique_key_name,
1034 p_database_object_name,
1035 p_application_id,
1036 l_attribute_category,
1037 l_attribute1,
1038 l_attribute2,
1039 l_attribute3,
1040 l_attribute4,
1041 l_attribute5,
1042 l_attribute6,
1043 l_attribute7,
1044 l_attribute8,
1045 l_attribute9,
1046 l_attribute10,
1047 l_attribute11,
1048 l_attribute12,
1049 l_attribute13,
1050 l_attribute14,
1051 l_attribute15,
1052 l_creation_date,
1053 l_created_by,
1054 l_last_update_date,
1055 l_last_updated_by,
1056 l_last_update_login
1057 );
1058 
1059 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
1060 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_CREATED');
1061 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
1062 FND_MSG_PUB.Add;
1063 end if;
1064 
1065 p_return_status := FND_API.G_RET_STS_SUCCESS;
1066 
1067 FND_MSG_PUB.Count_And_Get (
1068 p_count => p_msg_count,
1069 p_data => p_msg_data);
1070 
1071 EXCEPTION
1072 WHEN VALUE_ERROR THEN
1073 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1074 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_VALUE_ERROR');
1075 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
1076 FND_MSG_PUB.Add;
1077 end if;
1078 p_return_status := FND_API.G_RET_STS_ERROR;
1079 rollback to start_create_unique_key;
1080 FND_MSG_PUB.Count_And_Get (
1081 p_count => p_msg_count,
1082 p_data => p_msg_data);
1083 WHEN FND_API.G_EXC_ERROR THEN
1084 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1085 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_NOT_CREATED');
1086 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
1087 FND_MSG_PUB.Add;
1088 end if;
1089 p_return_status := FND_API.G_RET_STS_ERROR;
1090 rollback to start_create_unique_key;
1091 FND_MSG_PUB.Count_And_Get (
1092 p_count => p_msg_count,
1093 p_data => p_msg_data);
1094 WHEN OTHERS THEN
1095 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1096 rollback to start_create_unique_key;
1097 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
1098 SUBSTR (SQLERRM, 1, 240) );
1099 FND_MSG_PUB.Add;
1100 FND_MSG_PUB.Count_And_Get (
1101 p_count => p_msg_count,
1102 p_data => p_msg_data);
1103 end CREATE_UNIQUE_KEY;
1104 
1105 --=======================================================
1106 --  Procedure   CREATE_UNIQUE_KEY_COLUMN
1107 --
1108 --  Usage       Private API for creating a unique key column record.
1109 --              This API should only be called by other APIs that are
1110 --              owned by the Core Modules Team (AK).
1111 --
1112 --  Desc        Creates a unique key column record using the given info.
1113 --              This API should only be called by other APIs that are
1114 --              owned by the Core Modules Team (AK).
1115 --
1116 --  Results     The API returns the standard p_return_status parameter
1117 --              indicating one of the standard return statuses :
1118 --                  * Unexpected error
1119 --                  * Error
1120 --                  * Success
1121 --  Parameters  Unique Key Column columns
1122 --              p_loader_timestamp : IN optional
1126 --
1123 --                  If a timestamp is passed, the API will create the
1124 --                  record using this timestamp. Only the upload API
1125 --                  should call with this parameter loaded.
1127 --  Version     Initial version number  =   1.0
1128 --  History     Current version number  =   1.0
1129 --=======================================================
1130 procedure CREATE_UNIQUE_KEY_COLUMN (
1131 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
1132 p_api_version_number       IN      NUMBER,
1133 p_init_msg_tbl             IN      BOOLEAN := FALSE,
1134 p_msg_count                OUT NOCOPY     NUMBER,
1135 p_msg_data                 OUT NOCOPY     VARCHAR2,
1136 p_return_status            OUT NOCOPY     VARCHAR2,
1137 p_unique_key_name          IN      VARCHAR2,
1138 p_attribute_application_id IN      NUMBER,
1139 p_attribute_code           IN      VARCHAR2,
1140 p_unique_key_sequence      IN      NUMBER,
1141 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1142 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1143 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1144 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1145 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1146 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1147 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1148 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1149 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1150 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1151 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1152 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1153 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1154 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1155 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1156 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
1157 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
1158 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
1159 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
1160 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
1161 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
1162 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
1163 p_pass                     IN      NUMBER,
1164 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
1165 ) is
1166 l_attribute_category VARCHAR2(30);
1167 l_attribute1         VARCHAR2(150);
1168 l_attribute2         VARCHAR2(150);
1169 l_attribute3         VARCHAR2(150);
1170 l_attribute4         VARCHAR2(150);
1171 l_attribute5         VARCHAR2(150);
1172 l_attribute6         VARCHAR2(150);
1173 l_attribute7         VARCHAR2(150);
1174 l_attribute8         VARCHAR2(150);
1175 l_attribute9         VARCHAR2(150);
1176 l_attribute10        VARCHAR2(150);
1177 l_attribute11        VARCHAR2(150);
1178 l_attribute12        VARCHAR2(150);
1179 l_attribute13        VARCHAR2(150);
1180 l_attribute14        VARCHAR2(150);
1181 l_attribute15        VARCHAR2(150);
1182 l_api_version_number CONSTANT number := 1.0;
1183 l_api_name           CONSTANT varchar2(30) := 'Create_Unique_Key_Column';
1184 l_created_by         number;
1185 l_creation_date      date;
1186 l_error              boolean;
1187 l_last_update_date   date;
1188 l_last_update_login  number;
1189 l_last_updated_by    number;
1190 l_return_status      varchar2(1);
1191 begin
1192 
1193 IF NOT FND_API.Compatible_API_Call (
1194 l_api_version_number, p_api_version_number, l_api_name,
1195 G_PKG_NAME) then
1196 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1197 return;
1198 END IF;
1199 
1200 -- Initialize the message table if requested.
1201 
1202 if p_init_msg_tbl then
1203 FND_MSG_PUB.initialize;
1204 end if;
1205 
1206 savepoint start_create_key_column;
1207 
1208 --** check to see if row already exists **
1209 if  AK_KEY_PVT.UNIQUE_KEY_COLUMN_EXISTS (
1210 p_api_version_number => 1.0,
1211 p_return_status => l_return_status,
1212 p_unique_key_name => p_unique_key_name,
1213 p_attribute_application_id => p_attribute_application_id,
1214 p_attribute_code => p_attribute_code) then
1215 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
1216 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_EXISTS');
1217 FND_MSG_PUB.Add;
1218 end if;
1219 raise FND_API.G_EXC_ERROR;
1220 end if;
1221 
1222 --** validate table columns passed in **
1223 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
1224 if not VALIDATE_UNIQUE_KEY_COLUMN (
1225 p_validation_level => p_validation_level,
1226 p_api_version_number => 1.0,
1227 p_return_status => l_return_status,
1228 p_unique_key_name => p_unique_key_name,
1229 p_attribute_application_id => p_attribute_application_id,
1230 p_attribute_code => p_attribute_code,
1231 p_unique_key_sequence => p_unique_key_sequence,
1232 p_caller => AK_ON_OBJECTS_PVT.G_CREATE,
1233 p_pass => p_pass
1234 ) then
1235 raise FND_API.G_EXC_ERROR;
1236 end if;
1237 end if;
1238 
1239 --
1240 -- Load non-required columns if their values are given
1241 --
1242 if (p_attribute_category <> FND_API.G_MISS_CHAR) then
1243 l_attribute_category := p_attribute_category;
1244 end if;
1245 
1249 
1246 if (p_attribute1 <> FND_API.G_MISS_CHAR) then
1247 l_attribute1 := p_attribute1;
1248 end if;
1250 if (p_attribute2 <> FND_API.G_MISS_CHAR) then
1251 l_attribute2 := p_attribute2;
1252 end if;
1253 
1254 if (p_attribute3 <> FND_API.G_MISS_CHAR) then
1255 l_attribute3 := p_attribute3;
1256 end if;
1257 
1258 if (p_attribute4 <> FND_API.G_MISS_CHAR) then
1259 l_attribute4 := p_attribute4;
1260 end if;
1261 
1262 if (p_attribute5 <> FND_API.G_MISS_CHAR) then
1263 l_attribute5 := p_attribute5;
1264 end if;
1265 
1266 if (p_attribute6 <> FND_API.G_MISS_CHAR) then
1267 l_attribute6 := p_attribute6;
1268 end if;
1269 
1270 if (p_attribute7 <> FND_API.G_MISS_CHAR) then
1271 l_attribute7:= p_attribute7;
1272 end if;
1273 
1274 if (p_attribute8 <> FND_API.G_MISS_CHAR) then
1275 l_attribute8 := p_attribute8;
1276 end if;
1277 
1278 if (p_attribute9 <> FND_API.G_MISS_CHAR) then
1279 l_attribute9 := p_attribute9;
1280 end if;
1281 
1282 if (p_attribute10 <> FND_API.G_MISS_CHAR) then
1283 l_attribute10 := p_attribute10;
1284 end if;
1285 
1286 if (p_attribute11 <> FND_API.G_MISS_CHAR) then
1287 l_attribute11 := p_attribute11;
1288 end if;
1289 
1290 if (p_attribute12 <> FND_API.G_MISS_CHAR) then
1291 l_attribute12 := p_attribute12;
1292 end if;
1293 
1294 if (p_attribute13 <> FND_API.G_MISS_CHAR) then
1295 l_attribute13 := p_attribute13;
1296 end if;
1297 
1298 if (p_attribute14 <> FND_API.G_MISS_CHAR) then
1299 l_attribute14 := p_attribute14;
1300 end if;
1301 
1302 if (p_attribute15 <> FND_API.G_MISS_CHAR) then
1303 l_attribute15 := p_attribute15;
1304 end if;
1305 
1306   if (p_created_by <> FND_API.G_MISS_NUM) then
1307     l_created_by := p_created_by;
1308   end if;
1309 
1310   if (p_creation_date <> FND_API.G_MISS_DATE) then
1311     l_creation_date := p_creation_date;
1312   end if;
1313 
1314   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
1315     l_last_updated_by := p_last_updated_by;
1316   end if;
1317 
1318   if (p_last_update_date <> FND_API.G_MISS_DATE) then
1319     l_last_update_date := p_last_update_date;
1320   end if;
1321 
1322   if (p_last_update_login <> FND_API.G_MISS_NUM) then
1323     l_last_update_login := p_last_update_login;
1324   end if;
1325 
1326 -- Create record if no validation error was found
1327   --  NOTE - Calling IS_UPDATEABLE for backward compatibility
1328   --  old jlt files didn't have who columns and IS_UPDATEABLE
1329   --  calls SET_WHO which populates those columns, for later
1330   --  jlt files IS_UPDATEABLE will always return TRUE for CREATE
1331 
1332   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
1333        p_loader_timestamp => p_loader_timestamp,
1334        p_created_by => l_created_by,
1335        p_creation_date => l_creation_date,
1336        p_last_updated_by => l_last_updated_by,
1337        p_db_last_updated_by => null,
1338        p_last_update_date => l_last_update_date,
1339        p_db_last_update_date => null,
1340        p_last_update_login => l_last_update_login,
1341        p_create_or_update => 'CREATE') then
1342      null;
1343   end if;
1344 
1345 insert into AK_UNIQUE_KEY_COLUMNS (
1346 UNIQUE_KEY_NAME,
1347 ATTRIBUTE_APPLICATION_ID,
1348 ATTRIBUTE_CODE,
1349 UNIQUE_KEY_SEQUENCE,
1350 ATTRIBUTE_CATEGORY,
1351 ATTRIBUTE1,
1352 ATTRIBUTE2,
1353 ATTRIBUTE3,
1354 ATTRIBUTE4,
1355 ATTRIBUTE5,
1356 ATTRIBUTE6,
1357 ATTRIBUTE7,
1358 ATTRIBUTE8,
1359 ATTRIBUTE9,
1360 ATTRIBUTE10,
1361 ATTRIBUTE11,
1362 ATTRIBUTE12,
1363 ATTRIBUTE13,
1364 ATTRIBUTE14,
1365 ATTRIBUTE15,
1366 CREATION_DATE,
1367 CREATED_BY,
1368 LAST_UPDATE_DATE,
1369 LAST_UPDATED_BY,
1370 LAST_UPDATE_LOGIN
1371 ) values (
1372 p_unique_key_name,
1373 p_attribute_application_id,
1374 p_attribute_code,
1375 p_unique_key_sequence,
1376 l_attribute_category,
1377 l_attribute1,
1378 l_attribute2,
1379 l_attribute3,
1380 l_attribute4,
1381 l_attribute5,
1382 l_attribute6,
1383 l_attribute7,
1384 l_attribute8,
1385 l_attribute9,
1386 l_attribute10,
1387 l_attribute11,
1388 l_attribute12,
1389 l_attribute13,
1390 l_attribute14,
1391 l_attribute15,
1392 l_creation_date,
1393 l_created_by,
1394 l_last_update_date,
1395 l_last_updated_by,
1396 l_last_update_login
1397 );
1398 
1399 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
1400 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_CREATED');
1401 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
1402 to_char(p_attribute_application_id) || ' "' ||
1403 p_attribute_code || '"');
1404 FND_MSG_PUB.Add;
1405 end if;
1406 
1407 p_return_status := FND_API.G_RET_STS_SUCCESS;
1408 
1409 FND_MSG_PUB.Count_And_Get (
1410 p_count => p_msg_count,
1411 p_data => p_msg_data);
1412 
1413 EXCEPTION
1414 WHEN VALUE_ERROR THEN
1415 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1416 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_VALUE_ERROR');
1417 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
1418 to_char(p_attribute_application_id) || ' "' ||
1419 p_attribute_code || '"');
1420 FND_MSG_PUB.Add;
1421 end if;
1425 p_count => p_msg_count,
1422 p_return_status := FND_API.G_RET_STS_ERROR;
1423 rollback to start_create_key_column;
1424 FND_MSG_PUB.Count_And_Get (
1426 p_data => p_msg_data);
1427 WHEN FND_API.G_EXC_ERROR THEN
1428 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1429 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_NOT_CREATED');
1430 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
1431 to_char(p_attribute_application_id) || ' "' ||
1432 p_attribute_code || '"');
1433 FND_MSG_PUB.Add;
1434 end if;
1435 p_return_status := FND_API.G_RET_STS_ERROR;
1436 rollback to start_create_key_column;
1437 FND_MSG_PUB.Count_And_Get (
1438 p_count => p_msg_count,
1439 p_data => p_msg_data);
1440 WHEN OTHERS THEN
1441 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1442 rollback to start_create_key_column;
1443 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
1444 SUBSTR (SQLERRM, 1, 240) );
1445 FND_MSG_PUB.Add;
1446 FND_MSG_PUB.Count_And_Get (
1447 p_count => p_msg_count,
1448 p_data => p_msg_data);
1449 end CREATE_UNIQUE_KEY_COLUMN;
1450 
1451 --=======================================================
1452 --  Procedure   DELETE_FOREIGN_KEY
1453 --
1454 --  Usage       Private API for deleting a foreign key. This
1455 --              API should only be called by other APIs that are
1456 --              owned by the Core Modules Team (AK).
1457 --
1458 --  Desc        Deletes a foreign key with the given key value.
1459 --
1460 --  Results     The API returns the standard p_return_status parameter
1461 --              indicating one of the standard return statuses :
1462 --                  * Unexpected error
1463 --                  * Error
1464 --                  * Success
1465 --  Parameters  p_foreign_key_name : IN required
1466 --                  The name of the foreign key to be deleted.
1467 --              p_delete_cascade : IN required
1468 --                  If p_delete_cascade flag is 'Y', also delete all
1469 --                  rows in other tables that references this record.
1470 --                  Otherwise, this record will not be deleted if there
1471 --                  are any other rows referencing it.
1472 --
1473 --  Version     Initial version number  =   1.0
1474 --  History     Current version number  =   1.0
1475 --=======================================================
1476 procedure DELETE_FOREIGN_KEY (
1477 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
1478 p_api_version_number       IN      NUMBER,
1479 p_init_msg_tbl             IN      BOOLEAN := FALSE,
1480 p_msg_count                OUT NOCOPY     NUMBER,
1481 p_msg_data                 OUT NOCOPY     VARCHAR2,
1482 p_return_status            OUT NOCOPY     VARCHAR2,
1483 p_foreign_key_name         IN      VARCHAR2,
1484 p_delete_cascade           IN      VARCHAR2
1485 ) is
1486 cursor l_get_columns_csr is
1487 select ATTRIBUTE_APPLICATION_ID, ATTRIBUTE_CODE
1488 from   AK_FOREIGN_KEY_COLUMNS
1489 where  FOREIGN_KEY_NAME = p_foreign_key_name;
1490 cursor l_get_relations_csr  is
1491 select FLOW_APPLICATION_ID, FLOW_CODE, FROM_PAGE_APPL_ID, FROM_PAGE_CODE,
1492 FROM_REGION_APPL_ID, FROM_REGION_CODE, TO_PAGE_APPL_ID,
1493 TO_PAGE_CODE, TO_REGION_APPL_ID, TO_REGION_CODE
1494 from  AK_FLOW_REGION_RELATIONS
1495 where FOREIGN_KEY_NAME = p_foreign_key_name;
1496 l_api_version_number    CONSTANT number := 1.0;
1497 l_api_name              CONSTANT varchar2(30):= 'Delete_Foreign_Key';
1498 l_attribute_appl_id     NUMBER;
1499 l_attribute_code        VARCHAR2(30);
1500 l_msg_count             NUMBER;
1501 l_msg_data              VARCHAR2(2000);
1502 l_flow_application_id   NUMBER;
1503 l_flow_code             VARCHAR2(30);
1504 l_from_page_appl_id     NUMBER;
1505 l_from_page_code        VARCHAR2(30);
1506 l_from_region_appl_id   NUMBER;
1507 l_from_region_code      VARCHAR2(30);
1508 l_return_status         varchar2(1);
1509 l_to_page_appl_id       NUMBER;
1510 l_to_page_code          VARCHAR2(30);
1511 l_to_region_appl_id     NUMBER;
1512 l_to_region_code        VARCHAR2(30);
1513 begin
1514 IF NOT FND_API.Compatible_API_Call (
1515 l_api_version_number, p_api_version_number, l_api_name,
1516 G_PKG_NAME) then
1517 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1518 return;
1519 END IF;
1520 
1521 -- Initialize the message table if requested.
1522 
1523 if p_init_msg_tbl then
1524 FND_MSG_PUB.initialize;
1525 end if;
1526 
1527 savepoint start_delete_foreign_key;
1528 
1529 --
1530 -- error if foreign key to be deleted does not exists
1531 --
1532 if NOT AK_KEY_PVT.FOREIGN_KEY_EXISTS (
1533 p_api_version_number => 1.0,
1534 p_return_status => l_return_status,
1535 p_foreign_key_name => p_foreign_key_name) then
1536 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1537 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DOES_NOT_EXIST');
1538 FND_MSG_PUB.Add;
1539 end if;
1540 raise FND_API.G_EXC_ERROR;
1541 end if;
1542 
1543 if (p_delete_cascade = 'N') then
1544 --
1545 -- If we are not deleting any referencing records, we cannot
1546 -- delete the foreign key if it is being referenced in any of
1547 -- following tables.
1548 --
1549 -- AK_FOREIGN_KEY_COLUMNS
1550 --
1551 open l_get_columns_csr;
1552 fetch l_get_columns_csr into l_attribute_appl_id, l_attribute_code;
1553 if l_get_columns_csr%found then
1554 close l_get_columns_csr;
1555 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1559 raise FND_API.G_EXC_ERROR;
1556 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_DEL_REF_FK_FKC');
1557 FND_MSG_PUB.Add;
1558 end if;
1560 end if;
1561 close l_get_columns_csr;
1562 --
1563 -- AK_FLOW_REGION_RELATIONS
1564 --
1565 open l_get_relations_csr;
1566 fetch l_get_relations_csr into l_flow_application_id, l_flow_code,
1567 l_from_page_appl_id, l_from_page_code,
1568 l_from_region_appl_id, l_from_region_code,
1569 l_to_page_appl_id, l_to_page_code,
1570 l_to_region_appl_id, l_to_region_code;
1571 if l_get_relations_csr%found then
1572 close l_get_relations_csr;
1573 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1574 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_DEL_REF_FK_REL');
1575 FND_MSG_PUB.Add;
1576 end if;
1577 raise FND_API.G_EXC_ERROR;
1578 end if;
1579 close l_get_relations_csr;
1580 
1581 else
1582 --
1583 -- Otherwise, delete all referencing rows in other tables
1584 --
1585 -- AK_FOREIGN_KEY_COLUMNS
1586 --
1587 open l_get_columns_csr;
1588 loop
1589 fetch l_get_columns_csr into l_attribute_appl_id, l_attribute_code;
1590 exit when l_get_columns_csr%notfound;
1591 AK_KEY_PVT.DELETE_FOREIGN_KEY_COLUMN (
1592 p_validation_level => p_validation_level,
1593 p_api_version_number => 1.0,
1594 p_msg_count => l_msg_count,
1595 p_msg_data => l_msg_data,
1596 p_return_status => l_return_status,
1597 p_foreign_key_name => p_foreign_key_name,
1598 p_attribute_application_id => l_attribute_appl_id,
1599 p_attribute_code => l_attribute_code,
1600 p_delete_cascade => p_delete_cascade
1601 );
1602 if (l_return_status = FND_API.G_RET_STS_ERROR) or
1603 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
1604 close l_get_columns_csr;
1605 raise FND_API.G_EXC_ERROR;
1606 end if;
1607 end loop;
1608 close l_get_columns_csr;
1609 --
1610 -- AK_FLOW_REGION_RELATIONS
1611 --
1612 open l_get_relations_csr;
1613 loop
1614 fetch l_get_relations_csr into l_flow_application_id, l_flow_code,
1615 l_from_page_appl_id, l_from_page_code,
1616 l_from_region_appl_id, l_from_region_code,
1617 l_to_page_appl_id, l_to_page_code,
1618 l_to_region_appl_id, l_to_region_code;
1619 exit when l_get_relations_csr%notfound;
1620 AK_FLOW_PVT.DELETE_REGION_RELATION (
1621 p_validation_level => p_validation_level,
1622 p_api_version_number => 1.0,
1623 p_return_status => l_return_status,
1624 p_msg_count => l_msg_count,
1625 p_msg_data => l_msg_data,
1626 p_flow_application_id => l_flow_application_id,
1627 p_flow_code => l_flow_code,
1628 p_foreign_key_name => p_foreign_key_name,
1629 p_from_page_appl_id => l_from_page_appl_id,
1630 p_from_page_code => l_from_page_code,
1631 p_from_region_appl_id => l_from_region_appl_id,
1632 p_from_region_code => l_from_region_code,
1633 p_to_page_appl_id => l_to_page_appl_id,
1634 p_to_page_code => l_to_page_code,
1635 p_to_region_appl_id => l_to_region_appl_id,
1636 p_to_region_code => l_to_region_code,
1637 p_delete_cascade => p_delete_cascade
1638 );
1639 if (l_return_status = FND_API.G_RET_STS_ERROR) or
1640 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
1641 close l_get_relations_csr;
1642 raise FND_API.G_EXC_ERROR;
1643 end if;
1644 end loop;
1645 close l_get_relations_csr;
1646 
1647 end if;
1648 
1649 --
1650 -- delete foreign key once we checked that there are no references
1651 -- to it, or all references have been deleted.
1652 --
1653 delete from ak_foreign_keys
1654 where  foreign_key_name = p_foreign_key_name;
1655 
1656 if (sql%notfound) then
1657 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1658 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DOES_NOT_EXIST');
1659 FND_MSG_PUB.Add;
1660 end if;
1661 raise FND_API.G_EXC_ERROR;
1662 end if;
1663 
1664 delete from ak_foreign_keys_tl
1665 where  foreign_key_name = p_foreign_key_name;
1666 
1667 if (sql%notfound) then
1668 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1669 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DOES_NOT_EXIST');
1670 FND_MSG_PUB.Add;
1671 end if;
1672 raise FND_API.G_EXC_ERROR;
1673 end if;
1674 
1675 --
1676 -- Load success message
1677 --
1678 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) then
1679 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DELETED');
1680 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
1681 FND_MSG_PUB.Add;
1682 end if;
1683 
1684 p_return_status := FND_API.G_RET_STS_SUCCESS;
1685 
1686 FND_MSG_PUB.Count_And_Get (
1687 p_count => p_msg_count,
1688 p_data => p_msg_data);
1689 
1690 EXCEPTION
1691 WHEN FND_API.G_EXC_ERROR THEN
1692 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1693 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_NOT_DELETED');
1694 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
1695 FND_MSG_PUB.Add;
1696 end if;
1697 p_return_status := FND_API.G_RET_STS_ERROR;
1698 rollback to start_delete_foreign_key;
1699 FND_MSG_PUB.Count_And_Get (
1700 p_count => p_msg_count,
1701 p_data => p_msg_data);
1702 WHEN OTHERS THEN
1703 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1704 rollback to start_delete_foreign_key;
1705 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
1706 SUBSTR (SQLERRM, 1, 240) );
1707 FND_MSG_PUB.Add;
1708 FND_MSG_PUB.Count_And_Get (
1709 p_count => p_msg_count,
1713 --=======================================================
1710 p_data => p_msg_data);
1711 end DELETE_FOREIGN_KEY;
1712 
1714 --  Procedure   DELETE_FOREIGN_KEY_COLUMN
1715 --
1716 --  Usage       Private API for deleting a foreign key column record.
1717 --              This API should only be called by other APIs that are
1718 --              owned by the Core Modules Team (AK).
1719 --
1720 --  Desc        Deletes a foreign key column record with the given key value.
1721 --
1722 --  Results     The API returns the standard p_return_status parameter
1723 --              indicating one of the standard return statuses :
1724 --                  * Unexpected error
1725 --                  * Error
1726 --                  * Success
1727 --  Parameters  p_foreign_key_name : IN required
1728 --              p_attribute_application_id : IN required
1729 --              p_attribute_code : IN required
1730 --                  The key of the foreign key column record to be deleted.
1731 --              p_delete_cascade : IN required
1732 --                  If p_delete_cascade flag is 'Y', also delete all
1733 --                  rows in other tables that references this record.
1734 --                  Otherwise, this record will not be deleted if there
1735 --                  are any other rows referencing it.
1736 --
1737 --  Version     Initial version number  =   1.0
1738 --  History     Current version number  =   1.0
1739 --=======================================================
1740 procedure DELETE_FOREIGN_KEY_COLUMN (
1741 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
1742 p_api_version_number       IN      NUMBER,
1743 p_init_msg_tbl             IN      BOOLEAN := FALSE,
1744 p_msg_count                OUT NOCOPY     NUMBER,
1745 p_msg_data                 OUT NOCOPY     VARCHAR2,
1746 p_return_status            OUT NOCOPY     VARCHAR2,
1747 p_foreign_key_name         IN      VARCHAR2,
1748 p_attribute_application_id IN      NUMBER,
1749 p_attribute_code           IN      VARCHAR2,
1750 p_delete_cascade           IN      VARCHAR2
1751 ) is
1752 l_api_version_number    CONSTANT number := 1.0;
1753 l_api_name              CONSTANT varchar2(30):= 'Delete_Foreign_Key_Column';
1754 l_return_status         varchar2(1);
1755 begin
1756 IF NOT FND_API.Compatible_API_Call (
1757 l_api_version_number, p_api_version_number, l_api_name,
1758 G_PKG_NAME) then
1759 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1760 return;
1761 END IF;
1762 
1763 -- Initialize the message table if requested.
1764 
1765 if p_init_msg_tbl then
1766 FND_MSG_PUB.initialize;
1767 end if;
1768 
1769 savepoint start_delete_key_column;
1770 
1771 --
1772 -- error if foreign key to be deleted does not exists
1773 --
1774 if NOT AK_KEY_PVT.FOREIGN_KEY_COLUMN_EXISTS (
1775 p_api_version_number => 1.0,
1776 p_return_status => l_return_status,
1777 p_foreign_key_name => p_foreign_key_name,
1778 p_attribute_application_id => p_attribute_application_id,
1779 p_attribute_code => p_attribute_code) then
1780 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1781 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_DOES_NOT_EXIST');
1782 FND_MSG_PUB.Add;
1783 end if;
1784 raise FND_API.G_EXC_ERROR;
1785 end if;
1786 
1787 if (p_delete_cascade = 'N') then
1788 --
1789 -- If we are not deleting any referencing records, we cannot
1790 -- delete the foreign key column if it is being referenced in any of
1791 -- following tables.
1792 --
1793 -- (currently none - add logic here in the future)
1794 --
1795 null;
1796 else
1797 --
1798 -- Otherwise, delete all referencing rows in other tables
1799 --
1800 -- (currently none - add logic here in the future)
1801 --
1802 null;
1803 end if;
1804 
1805 --
1806 -- delete foreign key column once we checked that there are no references
1807 -- to it, or all references have been deleted.
1808 --
1809 delete from ak_foreign_key_columns
1810 where  foreign_key_name = p_foreign_key_name
1811 and    attribute_application_id = p_attribute_application_id
1812 and    attribute_code = p_attribute_code;
1813 
1814 if (sql%notfound) then
1815 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1816 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_DOES_NOT_EXIST');
1817 FND_MESSAGE.SET_TOKEN('OBJECT', 'AK_FOREIGN_KEY_COLUMN',TRUE);
1818 FND_MSG_PUB.Add;
1819 end if;
1820 raise FND_API.G_EXC_ERROR;
1821 end if;
1822 
1823 --
1824 -- Load success message
1825 --
1826 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) then
1827 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_DELETED');
1828 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
1829 ' ' || to_char(p_attribute_application_id) ||
1830 ' ' || p_attribute_code);
1831 FND_MSG_PUB.Add;
1832 end if;
1833 
1834 p_return_status := FND_API.G_RET_STS_SUCCESS;
1835 
1836 FND_MSG_PUB.Count_And_Get (
1837 p_count => p_msg_count,
1838 p_data => p_msg_data);
1839 
1840 EXCEPTION
1841 WHEN FND_API.G_EXC_ERROR THEN
1842 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1843 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_NOT_DELETED');
1844 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
1845 ' ' || to_char(p_attribute_application_id) ||
1846 ' ' || p_attribute_code);
1847 FND_MSG_PUB.Add;
1848 end if;
1849 p_return_status := FND_API.G_RET_STS_ERROR;
1850 rollback to start_delete_key_column;
1854 WHEN OTHERS THEN
1851 FND_MSG_PUB.Count_And_Get (
1852 p_count => p_msg_count,
1853 p_data => p_msg_data);
1855 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1856 rollback to start_delete_key_column;
1857 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
1858 SUBSTR (SQLERRM, 1, 240) );
1859 FND_MSG_PUB.Add;
1860 FND_MSG_PUB.Count_And_Get (
1861 p_count => p_msg_count,
1862 p_data => p_msg_data);
1863 end DELETE_FOREIGN_KEY_COLUMN;
1864 
1865 --=======================================================
1866 --  Procedure   DELETE_UNIQUE_KEY
1867 --
1868 --  Usage       Private API for deleting a unique key. This
1869 --              API should only be called by other APIs that are
1870 --              owned by the Core Modules Team (AK).
1871 --
1872 --  Desc        Deletes a unique key with the given key value.
1873 --
1874 --  Results     The API returns the standard p_return_status parameter
1875 --              indicating one of the standard return statuses :
1876 --                  * Unexpected error
1877 --                  * Error
1878 --                  * Success
1879 --  Parameters  p_unique_key_name : IN required
1880 --                  The name of the unique key to be deleted.
1881 --              p_delete_cascade : IN required
1882 --                  If p_delete_cascade flag is 'Y', also delete all
1883 --                  rows in other tables that references this record.
1884 --                  Otherwise, this record will not be deleted if there
1885 --                  are any other rows referencing it.
1886 --
1887 --  Version     Initial version number  =   1.0
1888 --  History     Current version number  =   1.0
1889 --=======================================================
1890 procedure DELETE_UNIQUE_KEY (
1891 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
1892 p_api_version_number       IN      NUMBER,
1893 p_init_msg_tbl             IN      BOOLEAN := FALSE,
1894 p_msg_count                OUT NOCOPY     NUMBER,
1895 p_msg_data                 OUT NOCOPY     VARCHAR2,
1896 p_return_status            OUT NOCOPY     VARCHAR2,
1897 p_unique_key_name          IN      VARCHAR2,
1898 p_delete_cascade           IN      VARCHAR2
1899 ) is
1900 cursor l_get_columns_csr is
1901 select ATTRIBUTE_APPLICATION_ID, ATTRIBUTE_CODE
1902 from   AK_UNIQUE_KEY_COLUMNS
1903 where  UNIQUE_KEY_NAME = p_unique_key_name;
1904 cursor l_get_fk_csr  is
1905 select FOREIGN_KEY_NAME
1906 from   AK_FOREIGN_KEYS
1907 where  UNIQUE_KEY_NAME = p_unique_key_name;
1908 
1909 l_api_version_number    CONSTANT number := 1.0;
1910 l_api_name              CONSTANT varchar2(30):= 'Delete_Unique_Key';
1911 l_attribute_appl_id     NUMBER;
1912 l_attribute_code        VARCHAR2(30);
1913 l_msg_count             NUMBER;
1914 l_msg_data              VARCHAR2(2000);
1915 l_foreign_key_name      VARCHAR2(30);
1916 l_return_status         varchar2(1);
1917 begin
1918 IF NOT FND_API.Compatible_API_Call (
1919 l_api_version_number, p_api_version_number, l_api_name,
1920 G_PKG_NAME) then
1921 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1922 return;
1923 END IF;
1924 
1925 -- Initialize the message table if requested.
1926 
1927 if p_init_msg_tbl then
1928 FND_MSG_PUB.initialize;
1929 end if;
1930 
1931 savepoint start_delete_unique_key;
1932 
1933 --
1934 -- error if foreign key to be deleted does not exists
1935 --
1936 if NOT AK_KEY_PVT.UNIQUE_KEY_EXISTS (
1937 p_api_version_number => 1.0,
1938 p_return_status => l_return_status,
1939 p_unique_key_name => p_unique_key_name) then
1940 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1941 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_DOES_NOT_EXIST');
1942 FND_MSG_PUB.Add;
1943 end if;
1944 raise FND_API.G_EXC_ERROR;
1945 end if;
1946 
1947 if (p_delete_cascade = 'N') then
1948 --
1949 -- If we are not deleting any referencing records, we cannot
1950 -- delete the primary key if it is being referenced in any of
1951 -- following tables.
1952 --
1953 -- AK_UNIQUE_KEY_COLUMNS
1954 --
1955 open l_get_columns_csr;
1956 fetch l_get_columns_csr into l_attribute_appl_id, l_attribute_code;
1957 if l_get_columns_csr%found then
1958 close l_get_columns_csr;
1959 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1960 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_DEL_REF_UK_UKC');
1961 FND_MSG_PUB.Add;
1962 end if;
1963 raise FND_API.G_EXC_ERROR;
1964 end if;
1965 close l_get_columns_csr;
1966 --
1967 -- AK_FOREIGN_KEYS
1968 --
1969 open l_get_fk_csr;
1970 fetch l_get_fk_csr into l_foreign_key_name;
1971 if l_get_fk_csr%found then
1972 close l_get_fk_csr;
1973 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
1974 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_DEL_REF_UK_FK');
1975 FND_MSG_PUB.Add;
1976 end if;
1977 raise FND_API.G_EXC_ERROR;
1978 end if;
1979 close l_get_fk_csr;
1980 
1981 else
1982 --
1983 -- Otherwise, delete all referencing rows in other tables
1984 --
1985 -- AK_UNIQUE_KEYS
1986 --
1987 open l_get_columns_csr;
1988 loop
1989 fetch l_get_columns_csr into l_attribute_appl_id, l_attribute_code;
1990 exit when l_get_columns_csr%notfound;
1991 AK_KEY_PVT.DELETE_UNIQUE_KEY_COLUMN (
1992 p_validation_level => p_validation_level,
1993 p_api_version_number => 1.0,
1994 p_msg_count => l_msg_count,
1995 p_msg_data => l_msg_data,
1999 p_attribute_code => l_attribute_code,
1996 p_return_status => l_return_status,
1997 p_unique_key_name => p_unique_key_name,
1998 p_attribute_application_id => l_attribute_appl_id,
2000 p_delete_cascade => p_delete_cascade
2001 );
2002 if (l_return_status = FND_API.G_RET_STS_ERROR) or
2003 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
2004 close l_get_columns_csr;
2005 raise FND_API.G_EXC_ERROR;
2006 end if;
2007 end loop;
2008 close l_get_columns_csr;
2009 --
2010 -- AK_FLOW_REGION_RELATIONS
2011 --
2012 open l_get_fk_csr;
2013 loop
2014 fetch l_get_fk_csr into l_foreign_key_name;
2015 exit when l_get_fk_csr%notfound;
2016 AK_KEY_PVT.DELETE_FOREIGN_KEY (
2017 p_validation_level => p_validation_level,
2018 p_api_version_number => 1.0,
2019 p_msg_count => l_msg_count,
2020 p_msg_data => l_msg_data,
2021 p_return_status => l_return_status,
2022 p_foreign_key_name => l_foreign_key_name,
2023 p_delete_cascade => p_delete_cascade
2024 );
2025 if (l_return_status = FND_API.G_RET_STS_ERROR) or
2026 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
2027 close l_get_fk_csr;
2028 raise FND_API.G_EXC_ERROR;
2029 end if;
2030 end loop;
2031 close l_get_fk_csr;
2032 
2033 end if;
2034 
2035 --
2036 -- delete unique key once we checked that there are no references
2037 -- to it, or all references have been deleted.
2038 --
2039 delete from ak_unique_keys
2040 where  unique_key_name = p_unique_key_name;
2041 
2042 if (sql%notfound) then
2043 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2044 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_DOES_NOT_EXIST');
2045 FND_MSG_PUB.Add;
2046 end if;
2047 raise FND_API.G_EXC_ERROR;
2048 end if;
2049 
2050 --
2051 -- Load success message
2052 --
2053 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) then
2054 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_DELETED');
2055 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
2056 FND_MSG_PUB.Add;
2057 end if;
2058 
2059 p_return_status := FND_API.G_RET_STS_SUCCESS;
2060 
2061 FND_MSG_PUB.Count_And_Get (
2062 p_count => p_msg_count,
2063 p_data => p_msg_data);
2064 
2065 EXCEPTION
2066 WHEN FND_API.G_EXC_ERROR THEN
2067 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2068 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_NOT_DELETED');
2069 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
2070 FND_MSG_PUB.Add;
2071 end if;
2072 p_return_status := FND_API.G_RET_STS_ERROR;
2073 rollback to start_delete_unique_key;
2074 FND_MSG_PUB.Count_And_Get (
2075 p_count => p_msg_count,
2076 p_data => p_msg_data);
2077 WHEN OTHERS THEN
2078 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2079 rollback to start_delete_unique_key;
2080 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2081 SUBSTR (SQLERRM, 1, 240) );
2082 FND_MSG_PUB.Add;
2083 FND_MSG_PUB.Count_And_Get (
2084 p_count => p_msg_count,
2085 p_data => p_msg_data);
2086 end DELETE_UNIQUE_KEY;
2087 
2088 --=======================================================
2089 --  Procedure   DELETE_UNIQUE_KEY_COLUMN
2090 --
2091 --  Usage       Private API for deleting a unique key column record.
2092 --              This API should only be called by other APIs that are
2093 --              owned by the Core Modules Team (AK).
2094 --
2095 --  Desc        Deletes a unique key column record with the given key value.
2096 --
2097 --  Results     The API returns the standard p_return_status parameter
2098 --              indicating one of the standard return statuses :
2099 --                  * Unexpected error
2100 --                  * Error
2101 --                  * Success
2102 --  Parameters  p_unique_key_name : IN required
2103 --              p_attribute_application_id : IN required
2104 --              p_attribute_code : IN required
2105 --                  The key of the unique key column record to be deleted.
2106 --              p_delete_cascade : IN required
2107 --                  If p_delete_cascade flag is 'Y', also delete all
2108 --                  rows in other tables that references this record.
2109 --                  Otherwise, this record will not be deleted if there
2110 --                  are any other rows referencing it.
2111 --
2112 --  Version     Initial version number  =   1.0
2113 --  History     Current version number  =   1.0
2114 --=======================================================
2115 procedure DELETE_UNIQUE_KEY_COLUMN (
2116 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
2117 p_api_version_number       IN      NUMBER,
2118 p_init_msg_tbl             IN      BOOLEAN := FALSE,
2119 p_msg_count                OUT NOCOPY     NUMBER,
2120 p_msg_data                 OUT NOCOPY     VARCHAR2,
2121 p_return_status            OUT NOCOPY     VARCHAR2,
2122 p_unique_key_name          IN      VARCHAR2,
2123 p_attribute_application_id IN      NUMBER,
2124 p_attribute_code           IN      VARCHAR2,
2125 p_delete_cascade           IN      VARCHAR2,
2126 p_override                 IN      VARCHAR2 := 'N'
2127 ) is
2128 cursor l_get_fkc_csr is
2129 select fkc.FOREIGN_KEY_NAME, fkc.ATTRIBUTE_APPLICATION_ID,
2130 fkc.ATTRIBUTE_CODE
2131 from   AK_FOREIGN_KEY_COLUMNS fkc,
2132 AK_FOREIGN_KEYS fk,
2133 AK_UNIQUE_KEY_COLUMNS pkc
2134 where  fk.unique_key_name = pkc.unique_key_name
2135 and    fk.foreign_key_name = fkc.foreign_key_name
2139 and    pkc.attribute_code = p_attribute_code;
2136 and    fkc.foreign_key_sequence = pkc.unique_key_sequence
2137 and    pkc.unique_key_name = p_unique_key_name
2138 and    pkc.attribute_application_id = p_attribute_application_id
2140 l_api_version_number    CONSTANT number := 1.0;
2141 l_api_name              CONSTANT varchar2(30):= 'Delete_Unique_Key_Column';
2142 l_attribute_appl_id     NUMBER;
2143 l_attribute_code        VARCHAR2(30);
2144 l_msg_count             NUMBER;
2145 l_msg_data              VARCHAR2(2000);
2146 l_foreign_key_name      VARCHAR2(30);
2147 l_return_status         varchar2(1);
2148 begin
2149 IF NOT FND_API.Compatible_API_Call (
2150 l_api_version_number, p_api_version_number, l_api_name,
2151 G_PKG_NAME) then
2152 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2153 return;
2154 END IF;
2155 
2156 -- Initialize the message table if requested.
2157 
2158 if p_init_msg_tbl then
2159 FND_MSG_PUB.initialize;
2160 end if;
2161 
2162 savepoint start_delete_key_column;
2163 
2164 --
2165 -- error if unique key to be deleted does not exists
2166 --
2167 if NOT AK_KEY_PVT.UNIQUE_KEY_COLUMN_EXISTS (
2168 p_api_version_number => 1.0,
2169 p_return_status => l_return_status,
2170 p_unique_key_name => p_unique_key_name,
2171 p_attribute_application_id => p_attribute_application_id,
2172 p_attribute_code => p_attribute_code) then
2173 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2174 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_DOES_NOT_EXIST');
2175 FND_MSG_PUB.Add;
2176 end if;
2177 raise FND_API.G_EXC_ERROR;
2178 end if;
2179 
2180 -- p_override is set to 'Y' during upload
2181 --
2182 if (p_override = 'N') then
2183 if (p_delete_cascade = 'N') then
2184 --
2185 -- If we are not deleting any referencing records, we cannot
2186 -- delete the unique key column if it is being referenced in any of
2187 -- following tables.
2188 --
2189 -- AK_FOREIGN_KEY_COLUMNS
2190 --
2191 open l_get_fkc_csr;
2192 fetch l_get_fkc_csr into l_foreign_key_name, l_attribute_appl_id,
2193 l_attribute_code;
2194 if l_get_fkc_csr%found then
2195 close l_get_fkc_csr;
2196 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2197 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_DEL_REF_UKC_FKC');
2198 FND_MSG_PUB.Add;
2199 end if;
2200 raise FND_API.G_EXC_ERROR;
2201 end if;
2202 close l_get_fkc_csr;
2203 else
2204 --
2205 -- Otherwise, delete all referencing rows in other tables
2206 --
2207 -- AK_FOREIGN_KEY_COLUMNS
2208 --
2209 open l_get_fkc_csr;
2210 loop
2211 fetch l_get_fkc_csr into l_foreign_key_name, l_attribute_appl_id,
2212 l_attribute_code;
2213 exit when l_get_fkc_csr%notfound;
2214 AK_KEY_PVT.DELETE_FOREIGN_KEY_COLUMN(
2215 p_validation_level => p_validation_level,
2216 p_api_version_number => 1.0,
2217 p_msg_count => l_msg_count,
2218 p_msg_data => l_msg_data,
2219 p_return_status => l_return_status,
2220 p_foreign_key_name => l_foreign_key_name,
2221 p_attribute_application_id => l_attribute_appl_id,
2222 p_attribute_code => l_attribute_code,
2223 p_delete_cascade => p_delete_cascade
2224 );
2225 if (l_return_status = FND_API.G_RET_STS_ERROR) or
2226 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
2227 close l_get_fkc_csr;
2228 raise FND_API.G_EXC_ERROR;
2229 end if;
2230 end loop;
2231 close l_get_fkc_csr;
2232 end if; -- /* if p_delete_cascade */
2233 end if; -- /* if p_override */
2234 --
2235 -- delete unique key column once we checked that there are no references
2236 -- to it, or all references have been deleted.
2237 --
2238 delete from ak_unique_key_columns
2239 where  unique_key_name = p_unique_key_name
2240 and    attribute_application_id = p_attribute_application_id
2241 and    attribute_code = p_attribute_code;
2242 
2243 if (sql%notfound) then
2244 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2245 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_DOES_NOT_EXIST');
2246 FND_MSG_PUB.Add;
2247 end if;
2248 raise FND_API.G_EXC_ERROR;
2249 end if;
2250 
2251 --
2252 -- Load success message
2253 --
2254 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) then
2255 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_DELETED');
2256 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name ||
2257 ' ' || to_char(p_attribute_application_id) ||
2258 ' ' || p_attribute_code);
2259 FND_MSG_PUB.Add;
2260 end if;
2261 
2262 p_return_status := FND_API.G_RET_STS_SUCCESS;
2263 
2264 FND_MSG_PUB.Count_And_Get (
2265 p_count => p_msg_count,
2266 p_data => p_msg_data);
2267 
2268 EXCEPTION
2269 WHEN FND_API.G_EXC_ERROR THEN
2270 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2271 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_NOT_DELETED');
2272 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name ||
2273 ' ' || to_char(p_attribute_application_id) ||
2274 ' ' || p_attribute_code);
2275 FND_MSG_PUB.Add;
2276 end if;
2277 p_return_status := FND_API.G_RET_STS_ERROR;
2278 rollback to start_delete_key_column;
2279 FND_MSG_PUB.Count_And_Get (
2280 p_count => p_msg_count,
2281 p_data => p_msg_data);
2282 WHEN OTHERS THEN
2283 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2284 rollback to start_delete_key_column;
2285 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2286 SUBSTR (SQLERRM, 1, 240) );
2287 FND_MSG_PUB.Add;
2291 end DELETE_UNIQUE_KEY_COLUMN;
2288 FND_MSG_PUB.Count_And_Get (
2289 p_count => p_msg_count,
2290 p_data => p_msg_data);
2292 
2293 --=======================================================
2294 --  Function    FOREIGN_KEY_EXISTS
2295 --
2296 --  Usage       Private API for checking for the existence of
2297 --              a foreign key with the given key values. This
2298 --              API should only be called by other APIs that are
2299 --              owned by the Core Modules Team (AK).
2300 --
2301 --  Desc        This API check to see if a foreign key record
2302 --              exists with the given key values.
2303 --
2304 --  Results     The API returns the standard p_return_status parameter
2305 --              indicating one of the standard return statuses :
2306 --                  * Unexpected error
2307 --                  * Error
2308 --                  * Success
2309 --              This function will return TRUE if such a foreign key
2310 --              exists, or FALSE otherwise.
2311 --  Parameters  Foreign Key key columns
2312 --
2313 --  Version     Initial version number  =   1.0
2314 --  History     Current version number  =   1.0
2315 --=======================================================
2316 function FOREIGN_KEY_EXISTS (
2317 p_api_version_number       IN      NUMBER,
2318 p_return_status            OUT NOCOPY     VARCHAR2,
2319 p_foreign_key_name         IN      VARCHAR2
2320 ) return BOOLEAN is
2321 cursor l_check_csr is
2322 select 1
2323 from  AK_FOREIGN_KEYS
2324 where FOREIGN_KEY_NAME = p_foreign_key_name;
2325 l_api_version_number      CONSTANT number := 1.0;
2326 l_api_name                CONSTANT varchar2(30) := 'Foreign_Key_Exists';
2327 l_dummy                   number;
2328 begin
2329 IF NOT FND_API.Compatible_API_Call (
2330 l_api_version_number, p_api_version_number, l_api_name,
2331 G_PKG_NAME) then
2332 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2333 return FALSE;
2334 END IF;
2335 
2336 open l_check_csr;
2337 fetch l_check_csr into l_dummy;
2338 if (l_check_csr%notfound) then
2339 close l_check_csr;
2340 p_return_status := FND_API.G_RET_STS_SUCCESS;
2341 return FALSE;
2342 else
2343 close l_check_csr;
2344 p_return_status := FND_API.G_RET_STS_SUCCESS;
2345 return TRUE;
2346 end if;
2347 
2348 EXCEPTION
2349 WHEN FND_API.G_EXC_ERROR THEN
2350 p_return_status := FND_API.G_RET_STS_ERROR;
2351 return FALSE;
2352 WHEN OTHERS THEN
2353 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2354 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2355 SUBSTR (SQLERRM, 1, 240) );
2356 FND_MSG_PUB.Add;
2357 return FALSE;
2358 
2359 end FOREIGN_KEY_EXISTS;
2360 
2361 --=======================================================
2362 --  Function    FOREIGN_KEY_COLUMN_EXISTS
2363 --
2364 --  Usage       Private API for checking for the existence of
2365 --              a foreign key column record with the given key values.
2366 --              This API should only be called by other APIs that are
2367 --              owned by the Core Modules Team (AK).
2368 --
2369 --  Desc        This API check to see if a foreign key column record
2370 --              exists with the given key values.
2371 --
2372 --  Results     The API returns the standard p_return_status parameter
2373 --              indicating one of the standard return statuses :
2374 --                  * Unexpected error
2375 --                  * Error
2376 --                  * Success
2377 --              This function will return TRUE if such a foreign key
2378 --              exists, or FALSE otherwise.
2379 --  Parameters  Foreign Key Column key columns
2380 --
2381 --  Version     Initial version number  =   1.0
2382 --  History     Current version number  =   1.0
2383 --=======================================================
2384 function FOREIGN_KEY_COLUMN_EXISTS (
2385 p_api_version_number       IN      NUMBER,
2386 p_return_status            OUT NOCOPY     VARCHAR2,
2387 p_foreign_key_name         IN      VARCHAR2,
2388 p_attribute_application_id IN      NUMBER,
2389 p_attribute_code           IN      VARCHAR2
2390 ) return BOOLEAN is
2391 cursor l_check_csr is
2392 select 1
2393 from  AK_FOREIGN_KEY_COLUMNS
2394 where FOREIGN_KEY_NAME = p_foreign_key_name
2395 and   ATTRIBUTE_APPLICATION_ID = p_attribute_application_id
2396 and   ATTRIBUTE_CODE = p_attribute_code;
2397 l_api_version_number      CONSTANT number := 1.0;
2398 l_api_name                CONSTANT varchar2(30) := 'Foreign_Key_Column_Exists'
2399 ;
2400 l_dummy                   number;
2401 begin
2402 open l_check_csr;
2403 fetch l_check_csr into l_dummy;
2404 if (l_check_csr%notfound) then
2405 close l_check_csr;
2406 p_return_status := FND_API.G_RET_STS_SUCCESS;
2407 return FALSE;
2408 else
2409 close l_check_csr;
2410 p_return_status := FND_API.G_RET_STS_SUCCESS;
2411 return TRUE;
2412 end if;
2413 
2414 EXCEPTION
2415 WHEN FND_API.G_EXC_ERROR THEN
2416 p_return_status := FND_API.G_RET_STS_ERROR;
2417 return FALSE;
2418 WHEN OTHERS THEN
2419 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2420 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2421 SUBSTR (SQLERRM, 1, 240) );
2422 FND_MSG_PUB.Add;
2423 return FALSE;
2424 
2425 end FOREIGN_KEY_COLUMN_EXISTS;
2426 
2427 --=======================================================
2428 --  Function    UNIQUE_KEY_EXISTS
2432 --              API should only be called by other APIs that are
2429 --
2430 --  Usage       Private API for checking for the existence of
2431 --              a unique key with the given key values. This
2433 --              owned by the Core Modules Team (AK).
2434 --
2435 --  Desc        This API check to see if a unique key record
2436 --              exists with the given key values.
2437 --
2438 --  Results     The API returns the standard p_return_status parameter
2439 --              indicating one of the standard return statuses :
2440 --                  * Unexpected error
2441 --                  * Error
2442 --                  * Success
2443 --              This function will return TRUE if such a foreign key
2444 --              exists, or FALSE otherwise.
2445 --  Parameters  Unique Key key columns
2446 --
2447 --  Version     Initial version number  =   1.0
2448 --  History     Current version number  =   1.0
2449 --=======================================================
2450 function UNIQUE_KEY_EXISTS (
2451 p_api_version_number       IN      NUMBER,
2452 p_return_status            OUT NOCOPY     VARCHAR2,
2453 p_unique_key_name          IN      VARCHAR2
2454 ) return BOOLEAN is
2455 cursor l_check_csr is
2456 select 1
2457 from  AK_UNIQUE_KEYS
2458 where UNIQUE_KEY_NAME = p_unique_key_name;
2459 l_api_version_number      CONSTANT number := 1.0;
2460 l_api_name                CONSTANT varchar2(30) := 'Unique_Key_Exists';
2461 l_dummy                   number;
2462 begin
2463 open l_check_csr;
2464 fetch l_check_csr into l_dummy;
2465 if (l_check_csr%notfound) then
2466 close l_check_csr;
2467 p_return_status := FND_API.G_RET_STS_SUCCESS;
2468 return FALSE;
2469 else
2470 close l_check_csr;
2471 p_return_status := FND_API.G_RET_STS_SUCCESS;
2472 return TRUE;
2473 end if;
2474 
2475 EXCEPTION
2476 WHEN FND_API.G_EXC_ERROR THEN
2477 p_return_status := FND_API.G_RET_STS_ERROR;
2478 return FALSE;
2479 WHEN OTHERS THEN
2480 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2481 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2482 SUBSTR (SQLERRM, 1, 240) );
2483 FND_MSG_PUB.Add;
2484 return FALSE;
2485 
2486 end UNIQUE_KEY_EXISTS;
2487 
2488 --=======================================================
2489 --  Function    UNIQUE_KEY_COLUMN_EXISTS
2490 --
2491 --  Usage       Private API for checking for the existence of
2492 --              a unique key column record with the given key values.
2493 --              This API should only be called by other APIs that are
2494 --              owned by the Core Modules Team (AK).
2495 --
2496 --  Desc        This API check to see if a unique key column record
2497 --              exists with the given key values.
2498 --
2499 --  Results     The API returns the standard p_return_status parameter
2500 --              indicating one of the standard return statuses :
2501 --                  * Unexpected error
2502 --                  * Error
2503 --                  * Success
2504 --              This function will return TRUE if such a unique key
2505 --              exists, or FALSE otherwise.
2506 --  Parameters  Unique Key Column key columns
2507 --
2508 --  Version     Initial version number  =   1.0
2509 --  History     Current version number  =   1.0
2510 --=======================================================
2511 function UNIQUE_KEY_COLUMN_EXISTS (
2512 p_api_version_number       IN      NUMBER,
2513 p_return_status            OUT NOCOPY     VARCHAR2,
2514 p_unique_key_name          IN      VARCHAR2,
2515 p_attribute_application_id IN      NUMBER,
2516 p_attribute_code           IN      VARCHAR2
2517 ) return BOOLEAN is
2518 cursor l_check_csr is
2519 select 1
2520 from  AK_UNIQUE_KEY_COLUMNS
2521 where UNIQUE_KEY_NAME = p_unique_key_name
2522 and   ATTRIBUTE_APPLICATION_ID = p_attribute_application_id
2523 and   ATTRIBUTE_CODE = p_attribute_code;
2524 l_api_version_number      CONSTANT number := 1.0;
2525 l_api_name                CONSTANT varchar2(30) := 'Unique_Key_Column_Exists';
2526 l_dummy                   number;
2527 begin
2528 open l_check_csr;
2529 fetch l_check_csr into l_dummy;
2530 if (l_check_csr%notfound) then
2531 close l_check_csr;
2532 p_return_status := FND_API.G_RET_STS_SUCCESS;
2533 return FALSE;
2534 else
2535 close l_check_csr;
2536 p_return_status := FND_API.G_RET_STS_SUCCESS;
2537 return TRUE;
2538 end if;
2539 
2540 EXCEPTION
2541 WHEN FND_API.G_EXC_ERROR THEN
2542 p_return_status := FND_API.G_RET_STS_ERROR;
2543 return FALSE;
2544 WHEN OTHERS THEN
2545 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2546 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2547 SUBSTR (SQLERRM, 1, 240) );
2548 FND_MSG_PUB.Add;
2549 return FALSE;
2550 
2551 end UNIQUE_KEY_COLUMN_EXISTS;
2552 
2553 --=======================================================
2554 --  Procedure   UPDATE_FOREIGN_KEY
2555 --
2556 --  Usage       Private API for updating a foreign key.
2557 --              This API should only be called by other APIs
2558 --              that are owned by the Core Modules Team (AK).
2559 --
2560 --  Desc        This API updates a foreign key using the given info
2561 --
2562 --  Results     The API returns the standard p_return_status parameter
2563 --              indicating one of the standard return statuses :
2564 --                  * Unexpected error
2565 --                  * Error
2566 --                  * Success
2570 --                  record using this timestamp. Only the upload API
2567 --  Parameters  Foreign Key columns
2568 --              p_loader_timestamp : IN optional
2569 --                  If a timestamp is passed, the API will update the
2571 --                  should call with this parameter loaded.
2572 --
2573 --  Version     Initial version number  =   1.0
2574 --  History     Current version number  =   1.0
2575 --=======================================================
2576 procedure UPDATE_FOREIGN_KEY (
2577 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
2578 p_api_version_number       IN      NUMBER,
2579 p_init_msg_tbl             IN      BOOLEAN := FALSE,
2580 p_msg_count                OUT NOCOPY     NUMBER,
2581 p_msg_data                 OUT NOCOPY     VARCHAR2,
2582 p_return_status            OUT NOCOPY     VARCHAR2,
2583 p_foreign_key_name         IN      VARCHAR2,
2584 p_database_object_name     IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2585 p_unique_key_name          IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2586 p_application_id           IN      NUMBER := FND_API.G_MISS_NUM,
2587 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2588 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2589 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2590 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2591 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2592 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2593 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2594 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2595 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2596 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2597 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2598 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2599 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2600 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2601 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2602 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2603 p_from_to_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2604 p_from_to_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2605 p_to_from_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2606 p_to_from_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2607 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
2608 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
2609 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
2610 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
2611 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
2612 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
2613 p_pass                     IN      NUMBER,
2614 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
2615 ) is
2616 cursor l_get_row_csr is
2617 select *
2618 from  AK_FOREIGN_KEYS
2619 where FOREIGN_KEY_NAME = p_foreign_key_name
2620 for   update of DATABASE_OBJECT_NAME;
2621 cursor l_get_tl_row_csr (lang_parm varchar2) is
2622 select *
2623 from  AK_FOREIGN_KEYS_TL
2624 where FOREIGN_KEY_NAME = p_foreign_key_name
2625 and   LANGUAGE = lang_parm
2626 for   update of FROM_TO_NAME;
2627 l_api_version_number    CONSTANT number := 1.0;
2628 l_api_name              CONSTANT varchar2(30):= 'Update_Foreign_Key';
2629 l_created_by            number;
2630 l_creation_date         date;
2631 l_foreign_key_rec       ak_foreign_keys%ROWTYPE;
2632 l_foreign_key_tl_rec    ak_foreign_keys_tl%ROWTYPE;
2633 l_error                 boolean;
2634 l_lang                  varchar2(30);
2635 l_last_update_date      date;
2636 l_last_update_login     number;
2637 l_last_updated_by       number;
2638 l_return_status         varchar2(1);
2639 l_file_version	  number;
2640 begin
2641 
2642 IF NOT FND_API.Compatible_API_Call (
2643 l_api_version_number, p_api_version_number, l_api_name,
2644 G_PKG_NAME) then
2645 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2646 return;
2647 END IF;
2648 
2649 -- Initialize the message table if requested.
2650 
2651 if p_init_msg_tbl then
2652 FND_MSG_PUB.initialize;
2653 end if;
2654 
2655 savepoint start_update_foreign_key;
2656 
2657 select userenv('LANG') into l_lang
2658 from dual;
2659 
2660 --** retrieve ak_foreign_keys row if it exists **
2661 open l_get_row_csr;
2662 fetch l_get_row_csr into l_foreign_key_rec;
2663 if (l_get_row_csr%notfound) then
2664 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2665 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DOES_NOT_EXIST');
2666 FND_MSG_PUB.Add;
2667 end if;
2668 --dbms_output.put_line('Error - Row does not exist');
2669 close l_get_row_csr;
2670 raise FND_API.G_EXC_ERROR;
2671 end if;
2672 close l_get_row_csr;
2673 
2674 --** retrieve ak_foreign_keys_tl row if it exists **
2675 open l_get_tl_row_csr(l_lang);
2676 fetch l_get_tl_row_csr into l_foreign_key_tl_rec;
2677 if (l_get_tl_row_csr%notfound) then
2678 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
2679 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_DOES_NOT_EXIST');
2680 FND_MSG_PUB.Add;
2681 end if;
2682 --dbms_output.put_line('Error - TL Row does not exist');
2683 close l_get_tl_row_csr;
2684 raise FND_API.G_EXC_ERROR;
2685 end if;
2689 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
2686 close l_get_tl_row_csr;
2687 
2688 --** validate table columns passed in **
2690 if not VALIDATE_FOREIGN_KEY (
2691 p_validation_level => p_validation_level,
2692 p_api_version_number => 1.0,
2693 p_return_status => l_return_status,
2694 p_foreign_key_name => p_foreign_key_name,
2695 p_database_object_name => p_database_object_name,
2696 p_unique_key_name => p_unique_key_name,
2697 p_application_id => p_application_id,
2698 p_from_to_name => p_from_to_name,
2699 p_from_to_description => p_from_to_description,
2700 p_to_from_name => p_to_from_name,
2701 p_to_from_description => p_to_from_description,
2702 p_caller => AK_ON_OBJECTS_PVT.G_UPDATE,
2703 p_pass => p_pass
2704 ) then
2705 --dbms_output.put_line(l_api_name || ' validation failed');
2706 raise FND_API.G_EXC_ERROR;
2707 end if;
2708 end if;
2709 
2710 --** Load record to be updated to the database **
2711 --** - first load nullable columns **
2712 
2713 if (p_attribute_category <> FND_API.G_MISS_CHAR) or
2714 (p_attribute_category is null) then
2715 l_foreign_key_rec.attribute_category := p_attribute_category;
2716 end if;
2717 if (p_attribute1 <> FND_API.G_MISS_CHAR) or
2718 (p_attribute1 is null) then
2719 l_foreign_key_rec.attribute1 := p_attribute1;
2720 end if;
2721 if (p_attribute2 <> FND_API.G_MISS_CHAR) or
2722 (p_attribute2 is null) then
2723 l_foreign_key_rec.attribute2 := p_attribute2;
2724 end if;
2725 if (p_attribute3 <> FND_API.G_MISS_CHAR) or
2726 (p_attribute3 is null) then
2727 l_foreign_key_rec.attribute3 := p_attribute3;
2728 end if;
2729 if (p_attribute4 <> FND_API.G_MISS_CHAR) or
2730 (p_attribute4 is null) then
2731 l_foreign_key_rec.attribute4 := p_attribute4;
2732 end if;
2733 if (p_attribute5 <> FND_API.G_MISS_CHAR) or
2734 (p_attribute5 is null) then
2735 l_foreign_key_rec.attribute5 := p_attribute5;
2736 end if;
2737 if (p_attribute6 <> FND_API.G_MISS_CHAR) or
2738 (p_attribute6 is null) then
2739 l_foreign_key_rec.attribute6 := p_attribute6;
2740 end if;
2741 if (p_attribute7 <> FND_API.G_MISS_CHAR) or
2742 (p_attribute7 is null) then
2743 l_foreign_key_rec.attribute7 := p_attribute7;
2744 end if;
2745 if (p_attribute8 <> FND_API.G_MISS_CHAR) or
2746 (p_attribute8 is null) then
2747 l_foreign_key_rec.attribute8 := p_attribute8;
2748 end if;
2749 if (p_attribute9 <> FND_API.G_MISS_CHAR) or
2750 (p_attribute9 is null) then
2751 l_foreign_key_rec.attribute9 := p_attribute9;
2752 end if;
2753 if (p_attribute10 <> FND_API.G_MISS_CHAR) or
2754 (p_attribute10 is null) then
2755 l_foreign_key_rec.attribute10 := p_attribute10;
2756 end if;
2757 if (p_attribute11 <> FND_API.G_MISS_CHAR) or
2758 (p_attribute11 is null) then
2759 l_foreign_key_rec.attribute11 := p_attribute11;
2760 end if;
2761 if (p_attribute12 <> FND_API.G_MISS_CHAR) or
2762 (p_attribute12 is null) then
2763 l_foreign_key_rec.attribute12 := p_attribute12;
2764 end if;
2765 if (p_attribute13 <> FND_API.G_MISS_CHAR) or
2766 (p_attribute13 is null) then
2767 l_foreign_key_rec.attribute13 := p_attribute13;
2768 end if;
2769 if (p_attribute14 <> FND_API.G_MISS_CHAR) or
2770 (p_attribute14 is null) then
2771 l_foreign_key_rec.attribute14 := p_attribute14;
2772 end if;
2773 if (p_attribute15 <> FND_API.G_MISS_CHAR) or
2774 (p_attribute15 is null) then
2775 l_foreign_key_rec.attribute15 := p_attribute15;
2776 end if;
2777 if (p_from_to_name <> FND_API.G_MISS_CHAR) or
2778 (p_from_to_name is null) then
2779 l_foreign_key_tl_rec.from_to_name := p_from_to_name;
2780 end if;
2781 
2782 if (p_from_to_description <> FND_API.G_MISS_CHAR) or
2783 (p_from_to_description is null) then
2784 l_foreign_key_tl_rec.from_to_description := p_from_to_description;
2785 end if;
2786 
2787 if (p_to_from_name <> FND_API.G_MISS_CHAR) or
2788 (p_to_from_name is null) then
2789 l_foreign_key_tl_rec.to_from_name := p_to_from_name;
2790 end if;
2791 
2792 if (p_to_from_description <> FND_API.G_MISS_CHAR) or
2793 (p_to_from_description is null) then
2794 l_foreign_key_tl_rec.to_from_description := p_to_from_description;
2795 end if;
2796 
2797 --** - load non-null columns **
2798 if (p_database_object_name <> FND_API.G_MISS_CHAR) then
2799 l_foreign_key_rec.database_object_name := p_database_object_name;
2800 end if;
2801 if (p_unique_key_name <> FND_API.G_MISS_CHAR) then
2802 l_foreign_key_rec.unique_key_name := p_unique_key_name;
2803 end if;
2804 if (p_application_id <> FND_API.G_MISS_NUM) then
2805 l_foreign_key_rec.application_id := p_application_id;
2806 end if;
2807 
2808   if (p_created_by <> FND_API.G_MISS_NUM) then
2809     l_created_by := p_created_by;
2810   end if;
2811   if (p_creation_date <> FND_API.G_MISS_DATE) then
2812     l_creation_date := p_creation_date;
2813   end if;
2814   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
2815     l_last_updated_by := p_last_updated_by;
2816   end if;
2817   if (p_last_update_date <> FND_API.G_MISS_DATE) then
2818     l_last_update_date := p_last_update_date;
2819   end if;
2820   if (p_last_update_login <> FND_API.G_MISS_NUM) then
2821     l_last_update_login := p_last_update_login;
2822   end if;
2823 
2824   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
2825        p_loader_timestamp => p_loader_timestamp,
2826        p_created_by => l_created_by,
2827        p_creation_date => l_creation_date,
2831        p_db_last_update_date => l_foreign_key_rec.last_update_date,
2828        p_last_updated_by => l_last_updated_by,
2829        p_db_last_updated_by => l_foreign_key_rec.last_updated_by,
2830        p_last_update_date => l_last_update_date,
2832        p_last_update_login => l_last_update_login,
2833        p_create_or_update => 'UPDATE') then
2834 
2835 update AK_FOREIGN_KEYS set
2836 DATABASE_OBJECT_NAME = l_foreign_key_rec.database_object_name,
2837 UNIQUE_KEY_NAME = l_foreign_key_rec.unique_key_name,
2838 APPLICATION_ID = l_foreign_key_rec.application_id,
2839 ATTRIBUTE_CATEGORY = l_foreign_key_rec.attribute_category,
2840 ATTRIBUTE1 = l_foreign_key_rec.attribute1,
2841 ATTRIBUTE2 = l_foreign_key_rec.attribute2,
2842 ATTRIBUTE3 = l_foreign_key_rec.attribute3,
2843 ATTRIBUTE4 = l_foreign_key_rec.attribute4,
2844 ATTRIBUTE5 = l_foreign_key_rec.attribute5,
2845 ATTRIBUTE6 = l_foreign_key_rec.attribute6,
2846 ATTRIBUTE7 = l_foreign_key_rec.attribute7,
2847 ATTRIBUTE8 = l_foreign_key_rec.attribute8,
2848 ATTRIBUTE9 = l_foreign_key_rec.attribute9,
2849 ATTRIBUTE10 = l_foreign_key_rec.attribute10,
2850 ATTRIBUTE11 = l_foreign_key_rec.attribute11,
2851 ATTRIBUTE12 = l_foreign_key_rec.attribute12,
2852 ATTRIBUTE13 = l_foreign_key_rec.attribute13,
2853 ATTRIBUTE14 = l_foreign_key_rec.attribute14,
2854 ATTRIBUTE15 = l_foreign_key_rec.attribute15,
2855 LAST_UPDATE_DATE = l_last_update_date,
2856 LAST_UPDATED_BY = l_last_updated_by,
2857 LAST_UPDATE_LOGIN = l_last_update_login
2858 where foreign_key_name = p_foreign_key_name;
2859 if (sql%notfound) then
2860 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2861 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_UPDATE_FAILED');
2862 FND_MSG_PUB.Add;
2863 end if;
2864 -- dbms_output.put_line('Row does not exist during update');
2865 raise FND_API.G_EXC_ERROR;
2866 end if;
2867 
2868 update AK_FOREIGN_KEYS_TL set
2869 FROM_TO_NAME = l_foreign_key_tl_rec.from_to_name,
2870 FROM_TO_DESCRIPTION = l_foreign_key_tl_rec.from_to_description,
2871 TO_FROM_NAME = l_foreign_key_tl_rec.to_from_name,
2872 TO_FROM_DESCRIPTION = l_foreign_key_tl_rec.to_from_description,
2873 LAST_UPDATE_DATE = l_last_update_date,
2874 LAST_UPDATED_BY = l_last_updated_by,
2875 LAST_UPDATE_LOGIN = l_last_update_login,
2876 SOURCE_LANG = l_lang
2877 where foreign_key_name = p_foreign_key_name
2878 and   l_lang in (LANGUAGE, SOURCE_LANG);
2879 if (sql%notfound) then
2880 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2881 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_UPDATE_FAILED');
2882 FND_MSG_PUB.Add;
2883 end if;
2884 --dbms_output.put_line('TL Row does not exist during update');
2885 raise FND_API.G_EXC_ERROR;
2886 end if;
2887 
2888 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
2889 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_UPDATED');
2890 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
2891 FND_MSG_PUB.Add;
2892 end if;
2893 
2894 end if;
2895 p_return_status := FND_API.G_RET_STS_SUCCESS;
2896 
2897 FND_MSG_PUB.Count_And_Get (
2898 p_count => p_msg_count,
2899 p_data => p_msg_data);
2900 
2901 EXCEPTION
2902 WHEN VALUE_ERROR THEN
2903 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2904 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_VALUE_ERROR');
2905 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
2906 FND_MSG_PUB.Add;
2907 end if;
2908 rollback to start_update_foreign_key;
2909 p_return_status := FND_API.G_RET_STS_ERROR;
2910 FND_MSG_PUB.Count_And_Get (
2911 p_count => p_msg_count,
2912 p_data => p_msg_data);
2913 WHEN FND_API.G_EXC_ERROR THEN
2914 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2915 FND_MESSAGE.SET_NAME('AK','AK_FOREIGN_KEY_NOT_UPDATED');
2916 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name);
2917 FND_MSG_PUB.Add;
2918 end if;
2919 p_return_status := FND_API.G_RET_STS_ERROR;
2920 rollback to start_update_foreign_key;
2921 FND_MSG_PUB.Count_And_Get (
2922 p_count => p_msg_count,
2923 p_data => p_msg_data);
2924 WHEN OTHERS THEN
2925 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2926 rollback to start_update_foreign_key;
2927 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
2928 SUBSTR (SQLERRM, 1, 240) );
2929 FND_MSG_PUB.Add;
2930 FND_MSG_PUB.Count_And_Get (
2931 p_count => p_msg_count,
2932 p_data => p_msg_data);
2933 end UPDATE_FOREIGN_KEY;
2934 
2935 --=======================================================
2936 --  Procedure   UPDATE_FOREIGN_KEY_COLUMN
2937 --
2938 --  Usage       Private API for updating a foreign key column.
2939 --              This API should only be called by other APIs
2940 --              that are owned by the Core Modules Team (AK).
2941 --
2942 --  Desc        This API updates a foreign key column using the given info
2943 --
2944 --  Results     The API returns the standard p_return_status parameter
2945 --              indicating one of the standard return statuses :
2946 --                  * Unexpected error
2947 --                  * Error
2948 --                  * Success
2949 --  Parameters  Foreign Key Column columns
2950 --              p_loader_timestamp : IN optional
2951 --                  If a timestamp is passed, the API will update the
2952 --                  record using this timestamp. Only the upload API
2953 --                  should call with this parameter loaded.
2954 --
2958 procedure UPDATE_FOREIGN_KEY_COLUMN (
2955 --  Version     Initial version number  =   1.0
2956 --  History     Current version number  =   1.0
2957 --=======================================================
2959 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
2960 p_api_version_number       IN      NUMBER,
2961 p_init_msg_tbl             IN      BOOLEAN := FALSE,
2962 p_msg_count                OUT NOCOPY     NUMBER,
2963 p_msg_data                 OUT NOCOPY     VARCHAR2,
2964 p_return_status            OUT NOCOPY     VARCHAR2,
2965 p_foreign_key_name         IN      VARCHAR2,
2966 p_attribute_application_id IN      NUMBER,
2967 p_attribute_code           IN      VARCHAR2,
2968 p_foreign_key_sequence     IN      NUMBER := FND_API.G_MISS_NUM,
2969 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2970 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2971 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2972 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2973 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2974 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2975 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2976 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2977 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2978 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2979 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2980 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2981 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2982 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2983 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2984 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
2985 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
2986 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
2987 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
2988 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
2989 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
2990 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
2991 p_pass                     IN      NUMBER,
2992 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
2993 ) is
2994 cursor l_get_row_csr is
2995 select *
2996 from  AK_FOREIGN_KEY_COLUMNS
2997 where FOREIGN_KEY_NAME = p_foreign_key_name
2998 and   ATTRIBUTE_APPLICATION_ID = p_attribute_application_id
2999 and   ATTRIBUTE_CODE = p_attribute_code
3000 for   update of FOREIGN_KEY_SEQUENCE;
3001 l_api_version_number    CONSTANT number := 1.0;
3002 l_api_name              CONSTANT varchar2(30):= 'Update_Foreign_Key_Column';
3003 l_created_by            number;
3004 l_creation_date         date;
3005 l_key_column_rec        ak_foreign_key_columns%ROWTYPE;
3006 l_error                 boolean;
3007 l_last_update_date      date;
3008 l_last_update_login     number;
3009 l_last_updated_by       number;
3010 l_return_status         varchar2(1);
3011 l_file_version	  number;
3012 begin
3013 IF NOT FND_API.Compatible_API_Call (
3014 l_api_version_number, p_api_version_number, l_api_name,
3015 G_PKG_NAME) then
3016 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3017 return;
3018 END IF;
3019 
3020 -- Initialize the message table if requested.
3021 
3022 if p_init_msg_tbl then
3023 FND_MSG_PUB.initialize;
3024 end if;
3025 
3026 savepoint start_update_key_column;
3027 
3028 --** retrieve ak_foreign_key_columns row if it exists **
3029 open l_get_row_csr;
3030 fetch l_get_row_csr into l_key_column_rec;
3031 if (l_get_row_csr%notfound) then
3032 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
3033 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_DOES_NOT_EXIST');
3034 FND_MSG_PUB.Add;
3035 end if;
3036 close l_get_row_csr;
3037 raise FND_API.G_EXC_ERROR;
3038 end if;
3039 close l_get_row_csr;
3040 
3041 --** validate table columns passed in **
3042 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
3043 if not VALIDATE_FOREIGN_KEY_COLUMN (
3044 p_validation_level => p_validation_level,
3045 p_api_version_number => 1.0,
3046 p_return_status => l_return_status,
3047 p_foreign_key_name => p_foreign_key_name,
3048 p_attribute_application_id => p_attribute_application_id,
3049 p_attribute_code => p_attribute_code,
3050 p_foreign_key_sequence => p_foreign_key_sequence,
3051 p_caller => AK_ON_OBJECTS_PVT.G_UPDATE,
3052 p_pass => p_pass
3053 ) then
3054 raise FND_API.G_EXC_ERROR;
3055 end if;
3056 end if;
3057 
3058 --** Load record to be updated to the database **
3059 --** - first load nullable columns **
3060 -- (none)
3061 
3062 --** - load non-null columns **
3063 
3064 if (p_foreign_key_sequence <> FND_API.G_MISS_NUM) then
3065 l_key_column_rec.foreign_key_sequence := p_foreign_key_sequence;
3066 end if;
3067 if (p_attribute_category <> FND_API.G_MISS_CHAR) or
3068 (p_attribute_category is null) then
3069 l_key_column_rec.attribute_category := p_attribute_category;
3070 end if;
3071 if (p_attribute1 <> FND_API.G_MISS_CHAR) or
3072 (p_attribute1 is null) then
3073 l_key_column_rec.attribute1 := p_attribute1;
3074 end if;
3075 if (p_attribute2 <> FND_API.G_MISS_CHAR) or
3076 (p_attribute2 is null) then
3077 l_key_column_rec.attribute2 := p_attribute2;
3078 end if;
3082 end if;
3079 if (p_attribute3 <> FND_API.G_MISS_CHAR) or
3080 (p_attribute3 is null) then
3081 l_key_column_rec.attribute3 := p_attribute3;
3083 if (p_attribute4 <> FND_API.G_MISS_CHAR) or
3084 (p_attribute4 is null) then
3085 l_key_column_rec.attribute4 := p_attribute4;
3086 end if;
3087 if (p_attribute5 <> FND_API.G_MISS_CHAR) or
3088 (p_attribute5 is null) then
3089 l_key_column_rec.attribute5 := p_attribute5;
3090 end if;
3091 if (p_attribute6 <> FND_API.G_MISS_CHAR) or
3092 (p_attribute6 is null) then
3093 l_key_column_rec.attribute6 := p_attribute6;
3094 end if;
3095 if (p_attribute7 <> FND_API.G_MISS_CHAR) or
3096 (p_attribute7 is null) then
3097 l_key_column_rec.attribute7 := p_attribute7;
3098 end if;
3099 if (p_attribute8 <> FND_API.G_MISS_CHAR) or
3100 (p_attribute8 is null) then
3101 l_key_column_rec.attribute8 := p_attribute8;
3102 end if;
3103 if (p_attribute9 <> FND_API.G_MISS_CHAR) or
3104 (p_attribute9 is null) then
3105 l_key_column_rec.attribute9 := p_attribute9;
3106 end if;
3107 if (p_attribute10 <> FND_API.G_MISS_CHAR) or
3108 (p_attribute10 is null) then
3109 l_key_column_rec.attribute10 := p_attribute10;
3110 end if;
3111 if (p_attribute11 <> FND_API.G_MISS_CHAR) or
3112 (p_attribute11 is null) then
3113 l_key_column_rec.attribute11 := p_attribute11;
3114 end if;
3115 if (p_attribute12 <> FND_API.G_MISS_CHAR) or
3116 (p_attribute12 is null) then
3117 l_key_column_rec.attribute12 := p_attribute12;
3118 end if;
3119 if (p_attribute13 <> FND_API.G_MISS_CHAR) or
3120 (p_attribute13 is null) then
3121 l_key_column_rec.attribute13 := p_attribute13;
3122 end if;
3123 if (p_attribute14 <> FND_API.G_MISS_CHAR) or
3124 (p_attribute14 is null) then
3125 l_key_column_rec.attribute14 := p_attribute14;
3126 end if;
3127 if (p_attribute15 <> FND_API.G_MISS_CHAR) or
3128 (p_attribute15 is null) then
3129 l_key_column_rec.attribute15 := p_attribute15;
3130 end if;
3131 
3132   if (p_created_by <> FND_API.G_MISS_NUM) then
3133     l_created_by := p_created_by;
3134   end if;
3135   if (p_creation_date <> FND_API.G_MISS_DATE) then
3136     l_creation_date := p_creation_date;
3137   end if;
3138   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
3139     l_last_updated_by := p_last_updated_by;
3140   end if;
3141   if (p_last_update_date <> FND_API.G_MISS_DATE) then
3142     l_last_update_date := p_last_update_date;
3143   end if;
3144   if (p_last_update_login <> FND_API.G_MISS_NUM) then
3145     l_last_update_login := p_last_update_login;
3146   end if;
3147 
3148   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
3149        p_loader_timestamp => p_loader_timestamp,
3150        p_created_by => l_created_by,
3151        p_creation_date => l_creation_date,
3152        p_last_updated_by => l_last_updated_by,
3153        p_db_last_updated_by => l_key_column_rec.last_updated_by,
3154        p_last_update_date => l_last_update_date,
3155        p_db_last_update_date => l_key_column_rec.last_update_date,
3156        p_last_update_login => l_last_update_login,
3157        p_create_or_update => 'UPDATE') then
3158 
3159 update AK_FOREIGN_KEY_COLUMNS set
3160 FOREIGN_KEY_SEQUENCE = l_key_column_rec.foreign_key_sequence,
3161 ATTRIBUTE_CATEGORY = l_key_column_rec.attribute_category,
3162 ATTRIBUTE1 = l_key_column_rec.attribute1,
3163 ATTRIBUTE2 = l_key_column_rec.attribute2,
3164 ATTRIBUTE3 = l_key_column_rec.attribute3,
3165 ATTRIBUTE4 = l_key_column_rec.attribute4,
3166 ATTRIBUTE5 = l_key_column_rec.attribute5,
3167 ATTRIBUTE6 = l_key_column_rec.attribute6,
3168 ATTRIBUTE7 = l_key_column_rec.attribute7,
3169 ATTRIBUTE8 = l_key_column_rec.attribute8,
3170 ATTRIBUTE9 = l_key_column_rec.attribute9,
3171 ATTRIBUTE10 = l_key_column_rec.attribute10,
3172 ATTRIBUTE11 = l_key_column_rec.attribute11,
3173 ATTRIBUTE12 = l_key_column_rec.attribute12,
3174 ATTRIBUTE13 = l_key_column_rec.attribute13,
3175 ATTRIBUTE14 = l_key_column_rec.attribute14,
3176 ATTRIBUTE15 = l_key_column_rec.attribute15,
3177 LAST_UPDATE_DATE = l_last_update_date,
3178 LAST_UPDATED_BY = l_last_updated_by,
3179 LAST_UPDATE_LOGIN = l_last_update_login
3180 where foreign_key_name = p_foreign_key_name
3181 and   attribute_application_id = p_attribute_application_id
3182 and   attribute_code = p_attribute_code;
3183 if (sql%notfound) then
3184 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
3185 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_UPDATE_FAILED');
3186 FND_MSG_PUB.Add;
3187 end if;
3188 --dbms_output.put_line('Row does not exist during update');
3189 raise FND_API.G_EXC_ERROR;
3190 end if;
3191 
3192 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
3193 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_UPDATED');
3194 FND_MESSAGE.SET_TOKEN('OBJECT','AK_FOREIGN_KEY_COLUMN',TRUE);
3195 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
3196 ' ' || to_char(p_attribute_application_id) ||
3197 ' ' || p_attribute_code);
3198 FND_MSG_PUB.Add;
3199 end if;
3200 
3201 end if;
3202 p_return_status := FND_API.G_RET_STS_SUCCESS;
3203 
3204 FND_MSG_PUB.Count_And_Get (
3205 p_count => p_msg_count,
3206 p_data => p_msg_data);
3207 
3208 EXCEPTION
3209 WHEN VALUE_ERROR THEN
3210 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3211 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_VALUE_ERROR');
3212 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
3216 end if;
3213 ' ' || to_char(p_attribute_application_id) ||
3214 ' ' || p_attribute_code);
3215 FND_MSG_PUB.Add;
3217 rollback to start_update_key_column;
3218 p_return_status := FND_API.G_RET_STS_ERROR;
3219 FND_MSG_PUB.Count_And_Get (
3220 p_count => p_msg_count,
3221 p_data => p_msg_data);
3222 WHEN FND_API.G_EXC_ERROR THEN
3223 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3224 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_NOT_UPDATED');
3225 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
3226 ' ' || to_char(p_attribute_application_id) ||
3227 ' ' || p_attribute_code);
3228 FND_MSG_PUB.Add;
3229 end if;
3230 p_return_status := FND_API.G_RET_STS_ERROR;
3231 rollback to start_update_key_column;
3232 FND_MSG_PUB.Count_And_Get (
3233 p_count => p_msg_count,
3234 p_data => p_msg_data);
3235 WHEN OTHERS THEN
3236 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3237 rollback to start_update_key_column;
3238 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
3239 SUBSTR (SQLERRM, 1, 240) );
3240 FND_MSG_PUB.Add;
3241 FND_MSG_PUB.Count_And_Get (
3242 p_count => p_msg_count,
3243 p_data => p_msg_data);
3244 end UPDATE_FOREIGN_KEY_COLUMN;
3245 
3246 --=======================================================
3247 --  Procedure   UPDATE_UNIQUE_KEY
3248 --
3249 --  Usage       Private API for updating a unique key.
3250 --              This API should only be called by other APIs
3251 --              that are owned by the Core Modules Team (AK).
3252 --
3253 --  Desc        This API updates a unique key using the given info
3254 --
3255 --  Results     The API returns the standard p_return_status parameter
3256 --              indicating one of the standard return statuses :
3257 --                  * Unexpected error
3258 --                  * Error
3259 --                  * Success
3260 --  Parameters  Unique Key columns
3261 --              p_loader_timestamp : IN optional
3262 --                  If a timestamp is passed, the API will update the
3263 --                  record using this timestamp. Only the upload API
3264 --                  should call with this parameter loaded.
3265 --
3266 --  Version     Initial version number  =   1.0
3267 --  History     Current version number  =   1.0
3268 --=======================================================
3269 procedure UPDATE_UNIQUE_KEY (
3270 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
3271 p_api_version_number       IN      NUMBER,
3272 p_init_msg_tbl             IN      BOOLEAN := FALSE,
3273 p_msg_count                OUT NOCOPY     NUMBER,
3274 p_msg_data                 OUT NOCOPY     VARCHAR2,
3275 p_return_status            OUT NOCOPY     VARCHAR2,
3276 p_unique_key_name          IN      VARCHAR2,
3277 p_database_object_name     IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3278 p_application_id           IN      NUMBER := FND_API.G_MISS_NUM,
3279 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3280 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3281 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3282 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3283 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3284 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3285 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3286 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3287 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3288 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3289 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3290 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3291 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3292 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3293 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3294 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3295 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
3296 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
3297 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
3298 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
3299 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
3300 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
3301 p_pass                     IN      NUMBER,
3302 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
3303 ) is
3304 cursor l_get_row_csr is
3305 select *
3306 from  AK_UNIQUE_KEYS
3307 where UNIQUE_KEY_NAME = p_unique_key_name
3308 for   update of DATABASE_OBJECT_NAME;
3309 l_api_version_number    CONSTANT number := 1.0;
3310 l_api_name              CONSTANT varchar2(30):= 'Update_Unique_Key';
3311 l_created_by            number;
3312 l_creation_date         date;
3313 l_unique_key_rec        ak_unique_keys%ROWTYPE;
3314 l_error                 boolean;
3315 l_last_update_date      date;
3316 l_last_update_login     number;
3317 l_last_updated_by       number;
3318 l_return_status         varchar2(1);
3319 l_file_version	  number;
3320 begin
3321 IF NOT FND_API.Compatible_API_Call (
3322 l_api_version_number, p_api_version_number, l_api_name,
3323 G_PKG_NAME) then
3324 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3325 return;
3326 END IF;
3327 
3328 -- Initialize the message table if requested.
3329 
3330 if p_init_msg_tbl then
3334 savepoint start_update_unique_key;
3331 FND_MSG_PUB.initialize;
3332 end if;
3333 
3335 
3336 --** retrieve ak_unique_keys row if it exists **
3337 open l_get_row_csr;
3338 fetch l_get_row_csr into l_unique_key_rec;
3339 if (l_get_row_csr%notfound) then
3340 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
3341 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_DOES_NOT_EXIST');
3342 FND_MSG_PUB.Add;
3343 end if;
3344 -- dbms_output.put_line('Error - Row does not exist');
3345 close l_get_row_csr;
3346 raise FND_API.G_EXC_ERROR;
3347 end if;
3348 close l_get_row_csr;
3349 
3350 --** validate table columns passed in **
3351 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
3352 if not VALIDATE_UNIQUE_KEY (
3353 p_validation_level => p_validation_level,
3354 p_api_version_number => 1.0,
3355 p_return_status => l_return_status,
3356 p_unique_key_name => p_unique_key_name,
3357 p_database_object_name => p_database_object_name,
3358 p_application_id => p_application_id,
3359 p_caller => AK_ON_OBJECTS_PVT.G_UPDATE,
3360 p_pass => p_pass
3361 ) then
3362 --dbms_output.put_line(l_api_name || ' validation failed');
3363 raise FND_API.G_EXC_ERROR;
3364 end if;
3365 end if;
3366 
3367 --** Load record to be updated to the database **
3368 --** - load non-null columns **
3369 
3370 if (p_database_object_name <> FND_API.G_MISS_CHAR) then
3371 l_unique_key_rec.database_object_name := p_database_object_name;
3372 end if;
3373 if (p_application_id <> FND_API.G_MISS_NUM) then
3374 l_unique_key_rec.application_id := p_application_id;
3375 end if;
3376 if (p_attribute_category <> FND_API.G_MISS_CHAR) or
3377 (p_attribute_category is null) then
3378 l_unique_key_rec.attribute_category := p_attribute_category;
3379 end if;
3380 if (p_attribute1 <> FND_API.G_MISS_CHAR) or
3381 (p_attribute1 is null) then
3382 l_unique_key_rec.attribute1 := p_attribute1;
3383 end if;
3384 if (p_attribute2 <> FND_API.G_MISS_CHAR) or
3385 (p_attribute2 is null) then
3386 l_unique_key_rec.attribute2 := p_attribute2;
3387 end if;
3388 if (p_attribute3 <> FND_API.G_MISS_CHAR) or
3389 (p_attribute3 is null) then
3390 l_unique_key_rec.attribute3 := p_attribute3;
3391 end if;
3392 if (p_attribute4 <> FND_API.G_MISS_CHAR) or
3393 (p_attribute4 is null) then
3394 l_unique_key_rec.attribute4 := p_attribute4;
3395 end if;
3396 if (p_attribute5 <> FND_API.G_MISS_CHAR) or
3397 (p_attribute5 is null) then
3398 l_unique_key_rec.attribute5 := p_attribute5;
3399 end if;
3400 if (p_attribute6 <> FND_API.G_MISS_CHAR) or
3401 (p_attribute6 is null) then
3402 l_unique_key_rec.attribute6 := p_attribute6;
3403 end if;
3404 if (p_attribute7 <> FND_API.G_MISS_CHAR) or
3405 (p_attribute7 is null) then
3406 l_unique_key_rec.attribute7 := p_attribute7;
3407 end if;
3408 if (p_attribute8 <> FND_API.G_MISS_CHAR) or
3409 (p_attribute8 is null) then
3410 l_unique_key_rec.attribute8 := p_attribute8;
3411 end if;
3412 if (p_attribute9 <> FND_API.G_MISS_CHAR) or
3413 (p_attribute9 is null) then
3414 l_unique_key_rec.attribute9 := p_attribute9;
3415 end if;
3416 if (p_attribute10 <> FND_API.G_MISS_CHAR) or
3417 (p_attribute10 is null) then
3418 l_unique_key_rec.attribute10 := p_attribute10;
3419 end if;
3420 if (p_attribute11 <> FND_API.G_MISS_CHAR) or
3421 (p_attribute11 is null) then
3422 l_unique_key_rec.attribute11 := p_attribute11;
3423 end if;
3424 if (p_attribute12 <> FND_API.G_MISS_CHAR) or
3425 (p_attribute12 is null) then
3426 l_unique_key_rec.attribute12 := p_attribute12;
3427 end if;
3428 if (p_attribute13 <> FND_API.G_MISS_CHAR) or
3429 (p_attribute13 is null) then
3430 l_unique_key_rec.attribute13 := p_attribute13;
3431 end if;
3432 if (p_attribute14 <> FND_API.G_MISS_CHAR) or
3433 (p_attribute14 is null) then
3434 l_unique_key_rec.attribute14 := p_attribute14;
3435 end if;
3436 if (p_attribute15 <> FND_API.G_MISS_CHAR) or
3437 (p_attribute15 is null) then
3438 l_unique_key_rec.attribute15 := p_attribute15;
3439 end if;
3440 
3441   if (p_created_by <> FND_API.G_MISS_NUM) then
3442     l_created_by := p_created_by;
3443   end if;
3444   if (p_creation_date <> FND_API.G_MISS_DATE) then
3445     l_creation_date := p_creation_date;
3446   end if;
3447   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
3448     l_last_updated_by := p_last_updated_by;
3449   end if;
3450   if (p_last_update_date <> FND_API.G_MISS_DATE) then
3451     l_last_update_date := p_last_update_date;
3452   end if;
3453   if (p_last_update_login <> FND_API.G_MISS_NUM) then
3454     l_last_update_login := p_last_update_login;
3455   end if;
3456 
3457   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
3458        p_loader_timestamp => p_loader_timestamp,
3459        p_created_by => l_created_by,
3460        p_creation_date => l_creation_date,
3461        p_last_updated_by => l_last_updated_by,
3462        p_db_last_updated_by => l_unique_key_rec.last_updated_by,
3463        p_last_update_date => l_last_update_date,
3464        p_db_last_update_date => l_unique_key_rec.last_update_date,
3465        p_last_update_login => l_last_update_login,
3466        p_create_or_update => 'UPDATE') then
3467 
3468 update AK_UNIQUE_KEYS set
3469 DATABASE_OBJECT_NAME = l_unique_key_rec.database_object_name,
3470 APPLICATION_ID = l_unique_key_rec.application_id,
3474 ATTRIBUTE3 = l_unique_key_rec.attribute3,
3471 ATTRIBUTE_CATEGORY = l_unique_key_rec.attribute_category,
3472 ATTRIBUTE1 = l_unique_key_rec.attribute1,
3473 ATTRIBUTE2 = l_unique_key_rec.attribute2,
3475 ATTRIBUTE4 = l_unique_key_rec.attribute4,
3476 ATTRIBUTE5 = l_unique_key_rec.attribute5,
3477 ATTRIBUTE6 = l_unique_key_rec.attribute6,
3478 ATTRIBUTE7 = l_unique_key_rec.attribute7,
3479 ATTRIBUTE8 = l_unique_key_rec.attribute8,
3480 ATTRIBUTE9 = l_unique_key_rec.attribute9,
3481 ATTRIBUTE10 = l_unique_key_rec.attribute10,
3482 ATTRIBUTE11 = l_unique_key_rec.attribute11,
3483 ATTRIBUTE12 = l_unique_key_rec.attribute12,
3484 ATTRIBUTE13 = l_unique_key_rec.attribute13,
3485 ATTRIBUTE14 = l_unique_key_rec.attribute14,
3486 ATTRIBUTE15 = l_unique_key_rec.attribute15,
3487 LAST_UPDATE_DATE = l_last_update_date,
3488 LAST_UPDATED_BY = l_last_updated_by,
3489 LAST_UPDATE_LOGIN = l_last_update_login
3490 where unique_key_name = p_unique_key_name;
3491 if (sql%notfound) then
3492 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3493 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_UPDATE_FAILED');
3494 FND_MSG_PUB.Add;
3495 end if;
3496 --dbms_output.put_line('Row does not exist during update');
3497 raise FND_API.G_EXC_ERROR;
3498 end if;
3499 
3500 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
3501 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_UPDATED');
3502 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
3503 FND_MSG_PUB.Add;
3504 end if;
3505 
3506 end if;
3507 p_return_status := FND_API.G_RET_STS_SUCCESS;
3508 
3509 FND_MSG_PUB.Count_And_Get (
3510 p_count => p_msg_count,
3511 p_data => p_msg_data);
3512 
3513 EXCEPTION
3514 WHEN VALUE_ERROR THEN
3515 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3516 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_VALUE_ERROR');
3517 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
3518 FND_MSG_PUB.Add;
3519 end if;
3520 rollback to start_update_unique_key;
3521 p_return_status := FND_API.G_RET_STS_ERROR;
3522 FND_MSG_PUB.Count_And_Get (
3523 p_count => p_msg_count,
3524 p_data => p_msg_data);
3525 WHEN FND_API.G_EXC_ERROR THEN
3526 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3527 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_KEY_NOT_UPDATED');
3528 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name);
3529 FND_MSG_PUB.Add;
3530 end if;
3531 p_return_status := FND_API.G_RET_STS_ERROR;
3532 rollback to start_update_unique_key;
3533 FND_MSG_PUB.Count_And_Get (
3534 p_count => p_msg_count,
3535 p_data => p_msg_data);
3536 WHEN OTHERS THEN
3537 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3538 rollback to start_update_unique_key;
3539 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
3540 SUBSTR (SQLERRM, 1, 240) );
3541 FND_MSG_PUB.Add;
3542 FND_MSG_PUB.Count_And_Get (
3543 p_count => p_msg_count,
3544 p_data => p_msg_data);
3545 end UPDATE_UNIQUE_KEY;
3546 
3547 --=======================================================
3548 --  Procedure   UPDATE_UNIQUE_KEY_COLUMN
3549 --
3550 --  Usage       Private API for updating a unique key column.
3551 --              This API should only be called by other APIs
3552 --              that are owned by the Core Modules Team (AK).
3553 --
3554 --  Desc        This API updates a unique key column using the given info
3555 --
3556 --  Results     The API returns the standard p_return_status parameter
3557 --              indicating one of the standard return statuses :
3558 --                  * Unexpected error
3559 --                  * Error
3560 --                  * Success
3561 --  Parameters  Unique Key Column columns
3562 --              p_loader_timestamp : IN optional
3563 --                  If a timestamp is passed, the API will update the
3564 --                  record using this timestamp. Only the upload API
3565 --                  should call with this parameter loaded.
3566 --
3567 --  Version     Initial version number  =   1.0
3568 --  History     Current version number  =   1.0
3569 --=======================================================
3570 procedure UPDATE_UNIQUE_KEY_COLUMN (
3571 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
3572 p_api_version_number       IN      NUMBER,
3573 p_init_msg_tbl             IN      BOOLEAN := FALSE,
3574 p_msg_count                OUT NOCOPY     NUMBER,
3575 p_msg_data                 OUT NOCOPY     VARCHAR2,
3576 p_return_status            OUT NOCOPY     VARCHAR2,
3577 p_unique_key_name          IN      VARCHAR2,
3578 p_attribute_application_id IN      NUMBER,
3579 p_attribute_code           IN      VARCHAR2,
3580 p_unique_key_sequence      IN      NUMBER := FND_API.G_MISS_NUM,
3581 p_attribute_category       IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3582 p_attribute1               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3583 p_attribute2               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3584 p_attribute3               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3585 p_attribute4               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3586 p_attribute5               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3587 p_attribute6               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3588 p_attribute7               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3589 p_attribute8               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3590 p_attribute9               IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3591 p_attribute10              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3595 p_attribute14              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3592 p_attribute11              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3593 p_attribute12              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3594 p_attribute13              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3596 p_attribute15              IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3597 p_created_by               IN     NUMBER := FND_API.G_MISS_NUM,
3598 p_creation_date            IN      DATE := FND_API.G_MISS_DATE,
3599 p_last_updated_by          IN     NUMBER := FND_API.G_MISS_NUM,
3600 p_last_update_date         IN      DATE := FND_API.G_MISS_DATE,
3601 p_last_update_login        IN     NUMBER := FND_API.G_MISS_NUM,
3602 p_loader_timestamp         IN      DATE := FND_API.G_MISS_DATE,
3603 p_pass                     IN      NUMBER,
3604 p_copy_redo_flag           IN OUT NOCOPY  BOOLEAN
3605 ) is
3606 cursor l_get_row_csr is
3607 select *
3608 from  AK_UNIQUE_KEY_COLUMNS
3609 where UNIQUE_KEY_NAME = p_unique_key_name
3610 and   ATTRIBUTE_APPLICATION_ID = p_attribute_application_id
3611 and   ATTRIBUTE_CODE = p_attribute_code
3612 for   update of UNIQUE_KEY_SEQUENCE;
3613 l_api_version_number    CONSTANT number := 1.0;
3614 l_api_name              CONSTANT varchar2(30):= 'Update_Unique_Key_Column';
3615 l_created_by            number;
3616 l_creation_date         date;
3617 l_key_column_rec        ak_unique_key_columns%ROWTYPE;
3618 l_error                 boolean;
3619 l_last_update_date      date;
3620 l_last_update_login     number;
3621 l_last_updated_by       number;
3622 l_return_status         varchar2(1);
3623 l_file_version	  number;
3624 begin
3625 IF NOT FND_API.Compatible_API_Call (
3626 l_api_version_number, p_api_version_number, l_api_name,
3627 G_PKG_NAME) then
3628 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3629 return;
3630 END IF;
3631 
3632 -- Initialize the message table if requested.
3633 
3634 if p_init_msg_tbl then
3635 FND_MSG_PUB.initialize;
3636 end if;
3637 
3638 savepoint start_update_key_column;
3639 
3640 --** retrieve ak_unique_key_columns row if it exists **
3641 open l_get_row_csr;
3642 fetch l_get_row_csr into l_key_column_rec;
3643 if (l_get_row_csr%notfound) then
3644 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
3645 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_DOES_NOT_EXIST');
3646 FND_MSG_PUB.Add;
3647 end if;
3648 --dbms_output.put_line('Error - Row does not exist');
3649 close l_get_row_csr;
3650 raise FND_API.G_EXC_ERROR;
3651 end if;
3652 close l_get_row_csr;
3653 
3654 --** validate table columns passed in **
3655 if p_validation_level <> FND_API.G_VALID_LEVEL_NONE then
3656 if not VALIDATE_UNIQUE_KEY_COLUMN (
3657 p_validation_level => p_validation_level,
3658 p_api_version_number => 1.0,
3659 p_return_status => l_return_status,
3660 p_unique_key_name => p_unique_key_name,
3661 p_attribute_application_id => p_attribute_application_id,
3662 p_attribute_code => p_attribute_code,
3663 p_unique_key_sequence => p_unique_key_sequence,
3664 p_caller => AK_ON_OBJECTS_PVT.G_UPDATE,
3665 p_pass => p_pass
3666 ) then
3667 --dbms_output.put_line(l_api_name || ' validation failed');
3668 raise FND_API.G_EXC_ERROR;
3669 end if;
3670 end if;
3671 
3672 --** Load record to be updated to the database **
3673 --** - load non-null columns **
3674 
3675 if (p_unique_key_sequence <> FND_API.G_MISS_NUM) then
3676 l_key_column_rec.unique_key_sequence := p_unique_key_sequence;
3677 end if;
3678 if (p_attribute_category <> FND_API.G_MISS_CHAR) or
3679 (p_attribute_category is null) then
3680 l_key_column_rec.attribute_category := p_attribute_category;
3681 end if;
3682 if (p_attribute1 <> FND_API.G_MISS_CHAR) or
3683 (p_attribute1 is null) then
3684 l_key_column_rec.attribute1 := p_attribute1;
3685 end if;
3686 if (p_attribute2 <> FND_API.G_MISS_CHAR) or
3687 (p_attribute2 is null) then
3688 l_key_column_rec.attribute2 := p_attribute2;
3689 end if;
3690 if (p_attribute3 <> FND_API.G_MISS_CHAR) or
3691 (p_attribute3 is null) then
3692 l_key_column_rec.attribute3 := p_attribute3;
3693 end if;
3694 if (p_attribute4 <> FND_API.G_MISS_CHAR) or
3695 (p_attribute4 is null) then
3696 l_key_column_rec.attribute4 := p_attribute4;
3697 end if;
3698 if (p_attribute5 <> FND_API.G_MISS_CHAR) or
3699 (p_attribute5 is null) then
3700 l_key_column_rec.attribute5 := p_attribute5;
3701 end if;
3702 if (p_attribute6 <> FND_API.G_MISS_CHAR) or
3703 (p_attribute6 is null) then
3704 l_key_column_rec.attribute6 := p_attribute6;
3705 end if;
3706 if (p_attribute7 <> FND_API.G_MISS_CHAR) or
3707 (p_attribute7 is null) then
3708 l_key_column_rec.attribute7 := p_attribute7;
3709 end if;
3710 if (p_attribute8 <> FND_API.G_MISS_CHAR) or
3711 (p_attribute8 is null) then
3712 l_key_column_rec.attribute8 := p_attribute8;
3713 end if;
3714 if (p_attribute9 <> FND_API.G_MISS_CHAR) or
3715 (p_attribute9 is null) then
3716 l_key_column_rec.attribute9 := p_attribute9;
3717 end if;
3718 if (p_attribute10 <> FND_API.G_MISS_CHAR) or
3719 (p_attribute10 is null) then
3720 l_key_column_rec.attribute10 := p_attribute10;
3721 end if;
3722 if (p_attribute11 <> FND_API.G_MISS_CHAR) or
3723 (p_attribute11 is null) then
3724 l_key_column_rec.attribute11 := p_attribute11;
3728 l_key_column_rec.attribute12 := p_attribute12;
3725 end if;
3726 if (p_attribute12 <> FND_API.G_MISS_CHAR) or
3727 (p_attribute12 is null) then
3729 end if;
3730 if (p_attribute13 <> FND_API.G_MISS_CHAR) or
3731 (p_attribute13 is null) then
3732 l_key_column_rec.attribute13 := p_attribute13;
3733 end if;
3734 if (p_attribute14 <> FND_API.G_MISS_CHAR) or
3735 (p_attribute14 is null) then
3736 l_key_column_rec.attribute14 := p_attribute14;
3737 end if;
3738 if (p_attribute15 <> FND_API.G_MISS_CHAR) or
3739 (p_attribute15 is null) then
3740 l_key_column_rec.attribute15 := p_attribute15;
3741 end if;
3742 
3743   if (p_created_by <> FND_API.G_MISS_NUM) then
3744     l_created_by := p_created_by;
3745   end if;
3746   if (p_creation_date <> FND_API.G_MISS_DATE) then
3747     l_creation_date := p_creation_date;
3748   end if;
3749   if (p_last_updated_by <> FND_API.G_MISS_NUM) then
3750     l_last_updated_by := p_last_updated_by;
3751   end if;
3752   if (p_last_update_date <> FND_API.G_MISS_DATE) then
3753     l_last_update_date := p_last_update_date;
3754   end if;
3755   if (p_last_update_login <> FND_API.G_MISS_NUM) then
3756     l_last_update_login := p_last_update_login;
3757   end if;
3758 
3759   if AK_ON_OBJECTS_PVT.IS_UPDATEABLE(
3760        p_loader_timestamp => p_loader_timestamp,
3761        p_created_by => l_created_by,
3762        p_creation_date => l_creation_date,
3763        p_last_updated_by => l_last_updated_by,
3764        p_db_last_updated_by => l_key_column_rec.last_updated_by,
3765        p_last_update_date => l_last_update_date,
3766        p_db_last_update_date => l_key_column_rec.last_update_date,
3767        p_last_update_login => l_last_update_login,
3768        p_create_or_update => 'UPDATE') then
3769 
3770 update AK_UNIQUE_KEY_COLUMNS set
3771 UNIQUE_KEY_SEQUENCE = l_key_column_rec.unique_key_sequence,
3772 ATTRIBUTE_CATEGORY = l_key_column_rec.attribute_category,
3773 ATTRIBUTE1 = l_key_column_rec.attribute1,
3774 ATTRIBUTE2 = l_key_column_rec.attribute2,
3775 ATTRIBUTE3 = l_key_column_rec.attribute3,
3776 ATTRIBUTE4 = l_key_column_rec.attribute4,
3777 ATTRIBUTE5 = l_key_column_rec.attribute5,
3778 ATTRIBUTE6 = l_key_column_rec.attribute6,
3779 ATTRIBUTE7 = l_key_column_rec.attribute7,
3780 ATTRIBUTE8 = l_key_column_rec.attribute8,
3781 ATTRIBUTE9 = l_key_column_rec.attribute9,
3782 ATTRIBUTE10 = l_key_column_rec.attribute10,
3783 ATTRIBUTE11 = l_key_column_rec.attribute11,
3784 ATTRIBUTE12 = l_key_column_rec.attribute12,
3785 ATTRIBUTE13 = l_key_column_rec.attribute13,
3786 ATTRIBUTE14 = l_key_column_rec.attribute14,
3787 ATTRIBUTE15 = l_key_column_rec.attribute15,
3788 LAST_UPDATE_DATE = l_last_update_date,
3789 LAST_UPDATED_BY = l_last_updated_by,
3790 LAST_UPDATE_LOGIN = l_last_update_login
3791 where unique_key_name = p_unique_key_name
3792 and   attribute_application_id = p_attribute_application_id
3793 and   attribute_code = p_attribute_code;
3794 if (sql%notfound) then
3795 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) then
3796 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_UPDATE_FAILED');
3797 FND_MSG_PUB.Add;
3798 end if;
3799 --dbms_output.put_line('Row does not exist during update');
3800 raise FND_API.G_EXC_ERROR;
3801 end if;
3802 
3803 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
3804 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_UPDATED');
3805 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
3806 ' ' || to_char(p_attribute_application_id) ||
3807 ' ' || p_attribute_code);
3808 FND_MSG_PUB.Add;
3809 end if;
3810 
3811 end if;
3812 p_return_status := FND_API.G_RET_STS_SUCCESS;
3813 
3814 FND_MSG_PUB.Count_And_Get (
3815 p_count => p_msg_count,
3816 p_data => p_msg_data);
3817 
3818 EXCEPTION
3819 WHEN VALUE_ERROR THEN
3820 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3821 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_VALUE_ERROR');
3822 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
3823 ' ' || to_char(p_attribute_application_id) ||
3824 ' ' || p_attribute_code);
3825 FND_MSG_PUB.Add;
3826 end if;
3827 rollback to start_update_key_column;
3828 p_return_status := FND_API.G_RET_STS_ERROR;
3829 FND_MSG_PUB.Count_And_Get (
3830 p_count => p_msg_count,
3831 p_data => p_msg_data);
3832 WHEN FND_API.G_EXC_ERROR THEN
3833 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3834 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_NOT_UPDATED');
3835 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name || ' ' ||
3836 ' ' || to_char(p_attribute_application_id) ||
3837 ' ' || p_attribute_code);
3838 FND_MSG_PUB.Add;
3839 end if;
3840 p_return_status := FND_API.G_RET_STS_ERROR;
3841 rollback to start_update_key_column;
3842 FND_MSG_PUB.Count_And_Get (
3843 p_count => p_msg_count,
3844 p_data => p_msg_data);
3845 WHEN OTHERS THEN
3846 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3847 rollback to start_update_key_column;
3848 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
3849 SUBSTR (SQLERRM, 1, 240) );
3850 FND_MSG_PUB.Add;
3851 FND_MSG_PUB.Count_And_Get (
3852 p_count => p_msg_count,
3853 p_data => p_msg_data);
3854 end UPDATE_UNIQUE_KEY_COLUMN;
3855 
3856 --========================================================
3857 --  Function    VALIDATE_FOREIGN_KEY
3858 --
3859 --  Usage       Private API for validating a foreign key. This
3860 --              API should only be called by other APIs that are
3861 --              owned by the Core Modules Team (AK).
3865 --  Results     The API returns the standard p_return_status parameter
3862 --
3863 --  Desc        Perform validation on a foreign key record.
3864 --
3866 --              indicating one of the standard return statuses :
3867 --                  * Unexpected error
3868 --                  * Error
3869 --                  * Success
3870 --              In addition, this function returns TRUE if all
3871 --              validation tests are passed, or FALSE otherwise.
3872 --  Parameters  Foreign Key columns
3873 --              p_caller : IN required
3874 --                  Must be one of the following values defined
3875 --                  in package AK_ON_OBJECTS_PVT:
3876 --                  - G_CREATE   (if calling from the Create API)
3877 --                  - G_DOWNLOAD (if calling from the Download API)
3878 --                  - G_UPDATE   (if calling from the Update API)
3879 --
3880 --  Note        This API is intended for performing record-level
3881 --              validation. It is not designed for item-level
3882 --              validation.
3883 --
3884 --  Version     Initial version number  =   1.0
3885 --  History     Current version number  =   1.0
3886 --========================================================
3887 function VALIDATE_FOREIGN_KEY (
3888 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
3889 p_api_version_number       IN      NUMBER,
3890 p_return_status            OUT NOCOPY     VARCHAR2,
3891 p_foreign_key_name         IN      VARCHAR2,
3892 p_database_object_name     IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3893 p_unique_key_name          IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3894 p_application_id           IN      NUMBER := FND_API.G_MISS_NUM,
3895 p_from_to_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3896 p_from_to_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3897 p_to_from_name             IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3898 p_to_from_description      IN      VARCHAR2 := FND_API.G_MISS_CHAR,
3899 p_caller                   IN      VARCHAR2,
3900 p_pass                     IN      NUMBER := 2
3901 ) return BOOLEAN is
3902 l_api_version_number      CONSTANT number := 1.0;
3903 l_api_name                CONSTANT varchar2(30) := 'Validate_Foreign_Key';
3904 l_error                   BOOLEAN;
3905 l_return_status           VARCHAR2(1);
3906 begin
3907 IF NOT FND_API.Compatible_API_Call (
3908 l_api_version_number, p_api_version_number, l_api_name,
3909 G_PKG_NAME) then
3910 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3911 return FALSE;
3912 END IF;
3913 
3914 l_error := FALSE;
3915 
3916 --** if validation level is none, no validation is necessary
3917 if (p_validation_level = FND_API.G_VALID_LEVEL_NONE) then
3918 p_return_status := FND_API.G_RET_STS_SUCCESS;
3919 return TRUE;
3920 end if;
3921 
3922 --** check that key columns are not null and not missing **
3923 if ((p_foreign_key_name is null) or
3924 (p_foreign_key_name = FND_API.G_MISS_CHAR)) then
3925 l_error := TRUE;
3926 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3927 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
3928 FND_MESSAGE.SET_TOKEN('COLUMN', 'FOREIGN_KEY_NAME');
3929 FND_MSG_PUB.Add;
3930 end if;
3931 end if;
3932 
3933 -- - Check that the parent object exists
3934 --* (This check can be skipped if called from the download procedure
3935 --*  which have already read the parent object.)
3936 --* (This check is only done if a view name is given, which may not
3937 --*  be the case if called from the Update_Foreign_Key API.)
3938 if (p_caller <> AK_ON_OBJECTS_PVT.G_DOWNLOAD) then
3939 if (p_database_object_name <> FND_API.G_MISS_CHAR) then
3940 if (NOT AK_OBJECT_PVT.OBJECT_EXISTS (
3941 p_api_version_number => 1.0,
3942 p_return_status => l_return_status,
3943 p_database_object_name => p_database_object_name) ) then
3944 l_error := TRUE;
3945 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3946 FND_MESSAGE.SET_NAME('AK','AK_INVALID_OBJECT_REFERENCE');
3947 FND_MESSAGE.SET_TOKEN('KEY', p_database_object_name);
3948 FND_MSG_PUB.Add;
3949 end if;
3950 end if;
3951 end if;
3952 end if;
3953 
3954 --** check that required columns are not null and, unless calling  **
3955 --** from UPDATE procedure, the columns are not missing            **
3956 if ((p_database_object_name is null) or
3957 (p_database_object_name = FND_API.G_MISS_CHAR and
3958 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE))
3959 then
3960 l_error := TRUE;
3961 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3962 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
3963 FND_MESSAGE.SET_TOKEN('COLUMN', 'DATABASE_OBJECT_NAME');
3964 FND_MSG_PUB.Add;
3965 end if;
3966 end if;
3967 
3968 if ((p_unique_key_name is null) or
3969 (p_unique_key_name = FND_API.G_MISS_CHAR and
3970 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE)) then
3971 l_error := TRUE;
3972 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3973 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
3974 FND_MESSAGE.SET_TOKEN('COLUMN', 'UNIQUE_KEY_NAME');
3975 FND_MSG_PUB.Add;
3976 end if;
3977 end if;
3978 
3979 if ((p_application_id is null) or
3980 (p_application_id = FND_API.G_MISS_NUM and
3981 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE)) then
3982 l_error := TRUE;
3986 FND_MSG_PUB.Add;
3983 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3984 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
3985 FND_MESSAGE.SET_TOKEN('COLUMN', 'APPLICATION_ID');
3987 end if;
3988 end if;
3989 
3990 --** Validate columns **
3991 -- - application ID
3992 if (p_application_id <> FND_API.G_MISS_NUM) then
3993 if (NOT AK_ON_OBJECTS_PVT.VALID_APPLICATION_ID (
3994 p_api_version_number => 1.0,
3995 p_return_status => l_return_status,
3996 p_application_id => p_application_id) ) then
3997 l_error := TRUE;
3998 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
3999 FND_MESSAGE.SET_NAME('AK','AK_INVALID_COLUMN_VALUE');
4000 FND_MESSAGE.SET_TOKEN('COLUMN','APPLICATION_ID');
4001 FND_MSG_PUB.Add;
4002 end if;
4003 end if;
4004 end if;
4005 
4006 -- - unique_key_name
4007 if (p_unique_key_name <> FND_API.G_MISS_CHAR) then
4008 if (NOT AK_KEY_PVT.UNIQUE_KEY_EXISTS (
4009 p_api_version_number => 1.0,
4010 p_return_status => l_return_status,
4011 p_unique_key_name => p_unique_key_name) ) then
4012 l_error := TRUE;
4013 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4014 FND_MESSAGE.SET_NAME('AK','AK_INVALID_UK_REFERENCE');
4015 FND_MESSAGE.SET_TOKEN('KEY', p_unique_key_name);
4016 FND_MSG_PUB.Add;
4017 end if;
4018 --dbms_output.put_line('Invalid unique key name');
4019 end if;
4020 end if;
4021 
4022 -- return true if no error, false otherwise
4023 p_return_status := FND_API.G_RET_STS_SUCCESS;
4024 return (not l_error);
4025 
4026 EXCEPTION
4027 WHEN FND_API.G_EXC_ERROR THEN
4028 p_return_status := FND_API.G_RET_STS_ERROR;
4029 return FALSE;
4030 WHEN OTHERS THEN
4031 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4032 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4033 SUBSTR (SQLERRM, 1, 240) );
4034 FND_MSG_PUB.Add;
4035 return FALSE;
4036 
4037 end VALIDATE_FOREIGN_KEY;
4038 
4039 --========================================================
4040 --  Function    VALIDATE_FOREIGN_KEY_COLUMN
4041 --
4042 --  Usage       Private API for validating a foreign key column record.
4043 --              This API should only be called by other APIs that are
4044 --              owned by the Core Modules Team (AK).
4045 --
4046 --  Desc        Perform validation on a foreign key column record.
4047 --
4048 --  Results     The API returns the standard p_return_status parameter
4049 --              indicating one of the standard return statuses :
4050 --                  * Unexpected error
4051 --                  * Error
4052 --                  * Success
4053 --              In addition, this function returns TRUE if all
4054 --              validation tests are passed, or FALSE otherwise.
4055 --  Parameters  Foreign Key Column columns
4056 --              p_caller : IN required
4057 --                  Must be one of the following values defined
4058 --                  in package AK_ON_OBJECTS_PVT:
4059 --                  - G_CREATE   (if calling from the Create API)
4060 --                  - G_DOWNLOAD (if calling from the Download API)
4061 --                  - G_UPDATE   (if calling from the Update API)
4062 --
4063 --  Note        This API is intended for performing record-level
4064 --              validation. It is not designed for item-level
4065 --              validation.
4066 --
4067 --  Version     Initial version number  =   1.0
4068 --  History     Current version number  =   1.0
4069 --========================================================
4070 function VALIDATE_FOREIGN_KEY_COLUMN (
4071 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4072 p_api_version_number       IN      NUMBER,
4073 p_return_status            OUT NOCOPY     VARCHAR2,
4074 p_foreign_key_name         IN      VARCHAR2,
4075 p_attribute_application_id IN      NUMBER,
4076 p_attribute_code           IN      VARCHAR2,
4077 p_foreign_key_sequence     IN      NUMBER := FND_API.G_MISS_NUM,
4078 p_caller                   IN      VARCHAR2,
4079 p_pass                     IN      NUMBER := 2
4080 ) return BOOLEAN is
4081 cursor l_check_fk_csr is
4082 select  database_object_name
4083 from    AK_FOREIGN_KEYS
4084 where   FOREIGN_KEY_NAME = p_foreign_key_name;
4085 cursor l_check_seq_csr is
4086 select  1
4087 from    AK_UNIQUE_KEY_COLUMNS pkc, AK_FOREIGN_KEYS fk
4088 where   fk.FOREIGN_KEY_NAME = p_foreign_key_name
4089 and     fk.UNIQUE_KEY_NAME = pkc.UNIQUE_KEY_NAME
4090 and     pkc.UNIQUE_KEY_SEQUENCE = p_foreign_key_sequence;
4091 l_api_version_number      CONSTANT number := 1.0;
4092 l_api_name                CONSTANT varchar2(30) := 'Validate_Foreign_Key_Column';
4093 l_dummy                   NUMBER;
4094 l_error                   BOOLEAN;
4095 l_return_status           VARCHAR2(1);
4096 l_database_object_name    VARCHAR2(30);
4097 begin
4098 
4099 IF NOT FND_API.Compatible_API_Call (
4100 l_api_version_number, p_api_version_number, l_api_name,
4101 G_PKG_NAME) then
4102 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4103 return FALSE;
4104 END IF;
4105 
4106 l_error := FALSE;
4107 
4108 --** if validation level is none, no validation is necessary
4109 if (p_validation_level = FND_API.G_VALID_LEVEL_NONE) then
4110 p_return_status := FND_API.G_RET_STS_SUCCESS;
4111 return TRUE;
4112 end if;
4113 
4114 --** check that key columns are not null and not missing **
4115 if ((p_foreign_key_name is null) or
4119 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4116 (p_foreign_key_name = FND_API.G_MISS_CHAR)) then
4117 l_error := TRUE;
4118 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4120 FND_MESSAGE.SET_TOKEN('COLUMN', 'FOREIGN_KEY_NAME');
4121 FND_MSG_PUB.Add;
4122 end if;
4123 end if;
4124 
4125 if ((p_attribute_application_id is null) or
4126 (p_attribute_application_id = FND_API.G_MISS_NUM)) then
4127 l_error := TRUE;
4128 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4129 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4130 FND_MESSAGE.SET_TOKEN('COLUMN', 'ATTRIBUTE_APPLICATION_ID');
4131 FND_MSG_PUB.Add;
4132 end if;
4133 end if;
4134 
4135 if ((p_attribute_code is null) or
4136 (p_attribute_code = FND_API.G_MISS_CHAR)) then
4137 l_error := TRUE;
4138 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4139 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4140 FND_MESSAGE.SET_TOKEN('COLUMN', 'ATTRIBUTE_CODE');
4141 FND_MSG_PUB.Add;
4142 end if;
4143 end if;
4144 
4145 -- - Check that the parent foreign key exists, and retrieve
4146 --   the view name for checking of valid column name below
4147 open l_check_fk_csr;
4148 fetch l_check_fk_csr into l_database_object_name;
4149 if (l_check_fk_csr%notfound) then
4150 close l_check_fk_csr;
4151 l_error := TRUE;
4152 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4153 FND_MESSAGE.SET_NAME('AK','AK_INVALID_FK_REFERENCE');
4154 FND_MESSAGE.SET_TOKEN('KEY', p_foreign_key_name);
4155 FND_MSG_PUB.Add;
4156 end if;
4157 --dbms_output.put_line('Parent foreign key does not exist!');
4158 else
4159 close l_check_fk_csr;
4160 -- - verify that the column attribute is a valid object attribute
4161 if (NOT AK_OBJECT_PVT.ATTRIBUTE_EXISTS (
4162 p_api_version_number => 1.0,
4163 p_return_status => l_return_status,
4164 p_database_object_name => l_database_object_name,
4165 p_attribute_application_id => p_attribute_application_id,
4166 p_attribute_code => p_attribute_code) ) then
4167 l_error := TRUE;
4168 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4169 FND_MESSAGE.SET_NAME('AK','AK_INVALID_OA_REFERENCE');
4170 FND_MESSAGE.SET_TOKEN('KEY', l_database_object_name ||
4171 ' ' || to_char(p_attribute_application_id) ||
4172 ' ' || p_attribute_code);
4173 FND_MSG_PUB.Add;
4174 end if;
4175 end if;
4176 end if;
4177 
4178 --** check that required columns are not null and, unless calling  **
4179 --** from UPDATE procedure, the columns are not missing            **
4180 if ((p_foreign_key_sequence is null) or
4181 (p_foreign_key_sequence = FND_API.G_MISS_NUM and
4182 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE))
4183 then
4184 l_error := TRUE;
4185 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4186 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4187 FND_MESSAGE.SET_TOKEN('COLUMN', 'FOREIGN_KEY_SEQUENCE');
4188 FND_MSG_PUB.Add;
4189 end if;
4190 end if;
4191 
4192 --** check that the foreign_key_sequence should be referencing   *
4193 --** some valid unique key columns                              *
4194 --** (Check this only if a foreign_key_sequence value is passed) *
4195 if (p_foreign_key_sequence <> FND_API.G_MISS_NUM) then
4196 open l_check_seq_csr;
4197 fetch l_check_seq_csr into l_dummy;
4198 if (l_check_seq_csr%notfound) then
4199 close l_check_seq_csr;
4200 l_error := TRUE;
4201 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4202 FND_MESSAGE.SET_NAME('AK','AK_INVALID_FOREIGN_KEY_SEQ');
4203 FND_MESSAGE.SET_TOKEN('SEQUENCE', to_char(p_foreign_key_sequence));
4204 FND_MSG_PUB.Add;
4205 end if;
4206 else
4207 close l_check_seq_csr;
4208 end if;
4209 end if;
4210 
4211 -- return true if no error, false otherwise
4212 p_return_status := FND_API.G_RET_STS_SUCCESS;
4213 return (not l_error);
4214 
4215 EXCEPTION
4216 WHEN FND_API.G_EXC_ERROR THEN
4217 p_return_status := FND_API.G_RET_STS_ERROR;
4218 return FALSE;
4219 WHEN OTHERS THEN
4220 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4221 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4222 SUBSTR (SQLERRM, 1, 240) );
4223 FND_MSG_PUB.Add;
4224 return FALSE;
4225 
4226 end VALIDATE_FOREIGN_KEY_COLUMN;
4227 
4228 --========================================================
4229 --  Function    VALIDATE_UNIQUE_KEY
4230 --
4231 --  Usage       Private API for validating a unique key. This
4232 --              API should only be called by other APIs that are
4233 --              owned by the Core Modules Team (AK).
4234 --
4235 --  Desc        Perform validation on a unique key record.
4236 --
4237 --  Results     The API returns the standard p_return_status parameter
4238 --              indicating one of the standard return statuses :
4239 --                  * Unexpected error
4240 --                  * Error
4241 --                  * Success
4242 --              In addition, this function returns TRUE if all
4243 --              validation tests are passed, or FALSE otherwise.
4244 --  Parameters  Unique Key columns
4245 --              p_caller : IN required
4246 --                  Must be one of the following values defined
4247 --                  in package AK_ON_OBJECTS_PVT:
4251 --
4248 --                  - G_CREATE   (if calling from the Create API)
4249 --                  - G_DOWNLOAD (if calling from the Download API)
4250 --                  - G_UPDATE   (if calling from the Update API)
4252 --  Note        This API is intended for performing record-level
4253 --              validation. It is not designed for item-level
4254 --              validation.
4255 --
4256 --  Version     Initial version number  =   1.0
4257 --  History     Current version number  =   1.0
4258 --========================================================
4259 function VALIDATE_UNIQUE_KEY (
4260 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4261 p_api_version_number       IN      NUMBER,
4262 p_return_status            OUT NOCOPY     VARCHAR2,
4263 p_unique_key_name          IN      VARCHAR2,
4264 p_database_object_name     IN      VARCHAR2 := FND_API.G_MISS_CHAR,
4265 p_application_id           IN      NUMBER := FND_API.G_MISS_NUM,
4266 p_caller                   IN      VARCHAR2,
4267 p_pass                     IN      NUMBER := 2
4268 ) return BOOLEAN is
4269 l_api_version_number      CONSTANT number := 1.0;
4270 l_api_name                CONSTANT varchar2(30) := 'Validate_Unique_Key';
4271 l_error                   BOOLEAN;
4272 l_return_status           VARCHAR2(1);
4273 begin
4274 
4275 IF NOT FND_API.Compatible_API_Call (
4276 l_api_version_number, p_api_version_number, l_api_name,
4277 G_PKG_NAME) then
4278 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4279 return FALSE;
4280 END IF;
4281 
4282 l_error := FALSE;
4283 
4284 --** if validation level is none, no validation is necessary
4285 if (p_validation_level = FND_API.G_VALID_LEVEL_NONE) then
4286 p_return_status := FND_API.G_RET_STS_SUCCESS;
4287 return TRUE;
4288 end if;
4289 
4290 --** check that key columns are not null and not missing **
4291 if ((p_unique_key_name is null) or
4292 (p_unique_key_name = FND_API.G_MISS_CHAR)) then
4293 l_error := TRUE;
4294 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4295 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4296 FND_MESSAGE.SET_TOKEN('COLUMN', 'UNIQUE_KEY_NAME');
4297 FND_MSG_PUB.Add;
4298 end if;
4299 end if;
4300 
4301 -- - Check that the parent object exists
4302 --* (This check can be skipped if called from the download procedure
4303 --*  which have already read the parent object.)
4304 --* (This check will only be done if a view name is passed.)
4305 if (p_caller <> AK_ON_OBJECTS_PVT.G_DOWNLOAD) then
4306 if (p_database_object_name <> FND_API.G_MISS_CHAR) then
4307 if (NOT AK_OBJECT_PVT.OBJECT_EXISTS (
4308 p_api_version_number => 1.0,
4309 p_return_status => l_return_status,
4310 p_database_object_name => p_database_object_name) ) then
4311 l_error := TRUE;
4312 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4313 FND_MESSAGE.SET_NAME('AK','AK_INVALID_OBJECT_REFERENCE');
4314 FND_MESSAGE.SET_TOKEN('KEY', p_database_object_name);
4315 FND_MSG_PUB.Add;
4316 end if;
4317 end if;
4318 end if;
4319 end if;
4320 
4321 --** check that required columns are not null and, unless calling  **
4322 --** from UPDATE procedure, the columns are not missing            **
4323 if ((p_database_object_name is null) or
4324 (p_database_object_name = FND_API.G_MISS_CHAR and
4325 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE)) then
4326 l_error := TRUE;
4327 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4328 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4329 FND_MESSAGE.SET_TOKEN('COLUMN', 'DATABASE_OBJECT_NAME');
4330 FND_MSG_PUB.Add;
4331 end if;
4332 end if;
4333 
4334 if ((p_application_id is null) or
4335 (p_application_id = FND_API.G_MISS_NUM and
4336 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE)) then
4337 l_error := TRUE;
4338 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4339 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4340 FND_MESSAGE.SET_TOKEN('COLUMN', 'APPLICATION_ID');
4341 FND_MSG_PUB.Add;
4342 end if;
4343 end if;
4344 
4345 
4346 --** Validate columns **
4347 -- - application ID
4348 if (p_application_id <> FND_API.G_MISS_NUM) then
4349 if (NOT AK_ON_OBJECTS_PVT.VALID_APPLICATION_ID (
4350 p_api_version_number => 1.0,
4351 p_return_status => l_return_status,
4352 p_application_id => p_application_id) ) then
4353 l_error := TRUE;
4354 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4355 FND_MESSAGE.SET_NAME('AK','AK_INVALID_COLUMN_VALUE');
4356 FND_MESSAGE.SET_TOKEN('COLUMN','APPLICATION_ID');
4357 FND_MSG_PUB.Add;
4358 end if;
4359 --dbms_output.put_line('Invalid application ID');
4360 end if;
4361 end if;
4362 
4363 -- return true if no error, false otherwise
4364 p_return_status := FND_API.G_RET_STS_SUCCESS;
4365 return (not l_error);
4366 
4367 EXCEPTION
4368 WHEN FND_API.G_EXC_ERROR THEN
4369 p_return_status := FND_API.G_RET_STS_ERROR;
4370 return FALSE;
4371 WHEN OTHERS THEN
4372 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4373 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4374 SUBSTR (SQLERRM, 1, 240) );
4375 FND_MSG_PUB.Add;
4376 return FALSE;
4377 
4378 end VALIDATE_UNIQUE_KEY;
4379 
4380 --========================================================
4381 --  Function    VALIDATE_UNIQUE_KEY_COLUMN
4382 --
4386 --
4383 --  Usage       Private API for validating a unique key column record.
4384 --              This API should only be called by other APIs that are
4385 --              owned by the Core Modules Team (AK).
4387 --  Desc        Perform validation on a unique key column record.
4388 --
4389 --  Results     The API returns the standard p_return_status parameter
4390 --              indicating one of the standard return statuses :
4391 --                  * Unexpected error
4392 --                  * Error
4393 --                  * Success
4394 --              In addition, this function returns TRUE if all
4395 --              validation tests are passed, or FALSE otherwise.
4396 --  Parameters  Unique Key Column columns
4397 --              p_caller : IN required
4398 --                  Must be one of the following values defined
4399 --                  in package AK_ON_OBJECTS_PVT:
4400 --                  - G_CREATE   (if calling from the Create API)
4401 --                  - G_DOWNLOAD (if calling from the Download API)
4402 --                  - G_UPDATE   (if calling from the Update API)
4403 --
4404 --  Note        This API is intended for performing record-level
4405 --              validation. It is not designed for item-level
4406 --              validation.
4407 --
4408 --  Version     Initial version number  =   1.0
4409 --  History     Current version number  =   1.0
4410 --========================================================
4411 function VALIDATE_UNIQUE_KEY_COLUMN (
4412 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4413 p_api_version_number       IN      NUMBER,
4414 p_return_status            OUT NOCOPY     VARCHAR2,
4415 p_unique_key_name          IN      VARCHAR2,
4416 p_attribute_application_id IN      NUMBER,
4417 p_attribute_code           IN      VARCHAR2,
4418 p_unique_key_sequence      IN      NUMBER := FND_API.G_MISS_NUM,
4419 p_caller                   IN      VARCHAR2,
4420 p_pass                     IN      NUMBER := 2
4421 ) return BOOLEAN is
4422 cursor l_check_pk_csr is
4423 select  database_object_name
4424 from    AK_UNIQUE_KEYS
4425 where   UNIQUE_KEY_NAME = p_unique_key_name;
4426 cursor l_check_seq_csr is
4427 select  1
4428 from    AK_UNIQUE_KEY_COLUMNS
4429 where   UNIQUE_KEY_NAME = p_unique_key_name
4430 and     UNIQUE_KEY_SEQUENCE = p_unique_key_sequence
4431 and     ( (ATTRIBUTE_APPLICATION_ID <> p_attribute_application_id)
4432 or        (ATTRIBUTE_CODE <> p_attribute_code) );
4433 l_api_version_number      CONSTANT number := 1.0;
4434 l_api_name                CONSTANT varchar2(30) := 'Validate_Unique_Key_Column';
4435 l_dummy                   NUMBER;
4436 l_error                   BOOLEAN;
4437 l_return_status           VARCHAR2(1);
4438 l_database_object_name    VARCHAR2(30);
4439 begin
4440 
4441 IF NOT FND_API.Compatible_API_Call (
4442 l_api_version_number, p_api_version_number, l_api_name,
4443 G_PKG_NAME) then
4444 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4445 return FALSE;
4446 END IF;
4447 
4448 l_error := FALSE;
4449 
4450 --** if validation level is none, no validation is necessary
4451 if (p_validation_level = FND_API.G_VALID_LEVEL_NONE) then
4452 p_return_status := FND_API.G_RET_STS_SUCCESS;
4453 return TRUE;
4454 end if;
4455 
4456 --** check that key columns are not null and not missing **
4457 if ((p_unique_key_name is null) or
4458 (p_unique_key_name = FND_API.G_MISS_CHAR)) then
4459 l_error := TRUE;
4460 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4461 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4462 FND_MESSAGE.SET_TOKEN('COLUMN', 'UNIQUE_KEY_NAME');
4463 FND_MSG_PUB.Add;
4464 end if;
4465 end if;
4466 
4467 if ((p_attribute_application_id is null) or
4468 (p_attribute_application_id = FND_API.G_MISS_NUM)) then
4469 l_error := TRUE;
4470 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4471 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4472 FND_MESSAGE.SET_TOKEN('COLUMN', 'ATTRIBUTE_APPLICATION_ID');
4473 FND_MSG_PUB.Add;
4474 end if;
4475 end if;
4476 
4477 if ((p_attribute_code is null) or
4478 (p_attribute_code = FND_API.G_MISS_CHAR)) then
4479 l_error := TRUE;
4480 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4481 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4482 FND_MESSAGE.SET_TOKEN('COLUMN', 'ATTRIBUTE_CODE');
4483 FND_MSG_PUB.Add;
4484 end if;
4485 end if;
4486 
4487 -- - Check that the parent unique key exists, and retrieve
4488 --   the database object name for checking of valid column name below
4489 open l_check_pk_csr;
4490 fetch l_check_pk_csr into l_database_object_name;
4491 if (l_check_pk_csr%notfound) then
4492 close l_check_pk_csr;
4493 l_error := TRUE;
4494 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4495 FND_MESSAGE.SET_NAME('AK','AK_INVALID_UK_REFERENCE');
4496 FND_MESSAGE.SET_TOKEN('KEY', p_unique_key_name);
4497 FND_MSG_PUB.Add;
4498 end if;
4499 else
4500 close l_check_pk_csr;
4501 -- - verify that the column attribute is a valid object attribute
4502 if (NOT AK_OBJECT_PVT.ATTRIBUTE_EXISTS (
4503 p_api_version_number => 1.0,
4504 p_return_status => l_return_status,
4505 p_database_object_name => l_database_object_name,
4506 p_attribute_application_id => p_attribute_application_id,
4507 p_attribute_code => p_attribute_code) ) then
4508 l_error := TRUE;
4512 ' ' || to_char(p_attribute_application_id) ||
4509 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4510 FND_MESSAGE.SET_NAME('AK','AK_INVALID_OA_REFERENCE');
4511 FND_MESSAGE.SET_TOKEN('KEY', l_database_object_name ||
4513 ' ' || p_attribute_code);
4514 FND_MSG_PUB.Add;
4515 end if;
4516 end if;
4517 end if;
4518 
4519 --** check that required columns are not null and, unless calling  **
4520 --** from UPDATE procedure, the columns are not missing            **
4521 if ((p_unique_key_sequence is null) or
4522 (p_unique_key_sequence = FND_API.G_MISS_NUM and
4523 p_caller <> AK_ON_OBJECTS_PVT.G_UPDATE))
4524 then
4525 l_error := TRUE;
4526 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4527 FND_MESSAGE.SET_NAME('AK','AK_CANNOT_BE_NULL');
4528 FND_MESSAGE.SET_TOKEN('COLUMN', 'UNIQUE_KEY_SEQUENCE');
4529 FND_MSG_PUB.Add;
4530 end if;
4531 end if;
4532 
4533 --** check that the unique_key_sequence should be unique within *
4534 --** the same unique key                                        *
4535 open l_check_seq_csr;
4536 fetch l_check_seq_csr into l_dummy;
4537 if (l_check_seq_csr%found) then
4538 close l_check_seq_csr;
4539 l_error := TRUE;
4540 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) and (p_pass = 2) then
4541 FND_MESSAGE.SET_NAME('AK','AK_UNIQUE_UNIQUE_SEQ');
4542 FND_MESSAGE.SET_TOKEN('SEQUENCE', to_char(p_unique_key_sequence) );
4543 FND_MESSAGE.SET_TOKEN('KEY', p_unique_key_name);
4544 FND_MSG_PUB.Add;
4545 end if;
4546 else
4547 close l_check_seq_csr;
4548 end if;
4549 
4550 -- return true if no error, false otherwise
4551 p_return_status := FND_API.G_RET_STS_SUCCESS;
4552 return (not l_error);
4553 
4554 EXCEPTION
4555 WHEN FND_API.G_EXC_ERROR THEN
4556 p_return_status := FND_API.G_RET_STS_ERROR;
4557 return FALSE;
4558 WHEN OTHERS THEN
4559 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4560 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4561 SUBSTR (SQLERRM, 1, 240) );
4562 FND_MSG_PUB.Add;
4563 return FALSE;
4564 
4565 end VALIDATE_UNIQUE_KEY_COLUMN;
4566 
4567 
4568 --=======================================================
4569 --  Procedure   CHECK_FOREIGN_KEY_SEQUENCE
4570 --
4571 --  Usage       Private API for checking for the existence of
4572 --              a foreign key column record with the given foreign_
4573 --              key_name and foreign_key_sequence. If such a record
4574 --              exists but has attribute_codes or attribute_application
4575 --              id values different from the parameters, the record
4576 --              will be deleted
4577 --              owned by the Core Modules Team (AK).
4578 --
4579 --  Desc        This API check to see if a foreign key column record
4580 --              exists with the given key values.
4581 --
4582 --  Results     The API returns the standard p_return_status parameter
4583 --              indicating one of the standard return statuses :
4584 --                  * Unexpected error
4585 --                  * Error
4586 --                  * Success
4587 --  Parameters  Foreign Key Column key columns
4588 --
4589 --  Version     Initial version number  =   1.0
4590 --  History     Current version number  =   1.0
4591 --=======================================================
4592 procedure CHECK_FOREIGN_KEY_SEQUENCE (
4593 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4594 p_api_version_number       IN      NUMBER,
4595 p_return_status            OUT NOCOPY     VARCHAR2,
4596 p_foreign_key_name         IN      VARCHAR2,
4597 p_attribute_application_id IN      NUMBER,
4598 p_attribute_code           IN      VARCHAR2,
4599 p_foreign_key_sequence     IN      NUMBER
4600 ) is
4601 cursor l_check_csr is
4602 select ATTRIBUTE_CODE, ATTRIBUTE_APPLICATION_ID
4603 from  AK_FOREIGN_KEY_COLUMNS
4604 where FOREIGN_KEY_NAME = p_foreign_key_name
4605 and   FOREIGN_KEY_SEQUENCE = p_foreign_key_sequence;
4606 l_api_version_number      CONSTANT number := 1.0;
4607 l_api_name                CONSTANT varchar2(30) := 'Cbeck_Foreign_Key_Sequence';
4608 l_attribute_code                   varchar2(30);
4609 l_attribute_application_id         number;
4610 l_done                             boolean := FALSE;
4611 l_return_status                    varchar(1);
4612 l_msg_data                         VARCHAR2(2000);
4613 l_msg_count                        number;
4614 begin
4615 open l_check_csr;
4616 loop
4617 fetch l_check_csr into l_attribute_code, l_attribute_application_id;
4618 if (l_check_csr%notfound) then
4619 close l_check_csr;
4620 p_return_status := FND_API.G_RET_STS_SUCCESS;
4621 exit;
4622 else
4623 if (l_attribute_code <> p_attribute_code) or
4624 (l_attribute_application_id <> p_attribute_application_id) then
4625 --
4626 -- Delete the record in foreign_key_column that has the same
4627 -- foreign_key_name and foreign_key_sequence, but has different
4628 -- attribute_code or attribute_application_id
4629 --
4630 AK_KEY_PVT.DELETE_FOREIGN_KEY_COLUMN (
4631 p_validation_level => p_validation_level,
4632 p_api_version_number => 1.0,
4633 p_msg_count => l_msg_count,
4634 p_msg_data => l_msg_data,
4635 p_return_status => l_return_status,
4636 p_foreign_key_name => p_foreign_key_name,
4640 );
4637 p_attribute_application_id => l_attribute_application_id,
4638 p_attribute_code => l_attribute_code,
4639 p_delete_cascade => 'Y'
4641 if (l_return_status = FND_API.G_RET_STS_ERROR) or
4642 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
4643 close l_check_csr;
4644 raise FND_API.G_EXC_ERROR;
4645 end if;
4646 end if; -- /* if l_attribute_code */
4647 end if; -- /* if l_check_csr%notfound */
4648 end loop;
4649 if l_check_csr%isopen then
4650 close l_check_csr;
4651 end if;
4652 
4653 EXCEPTION
4654 WHEN FND_API.G_EXC_ERROR THEN
4655 p_return_status := FND_API.G_RET_STS_ERROR;
4656 WHEN OTHERS THEN
4657 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4658 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4659 SUBSTR (SQLERRM, 1, 240) );
4660 FND_MSG_PUB.Add;
4661 
4662 END CHECK_FOREIGN_KEY_SEQUENCE;
4663 
4664 
4665 --=======================================================
4666 --  Procedure   DELETE_RELATED_FOREIGN_KEY_COL
4667 --
4668 --  Usage       Private API for deleting foreign key columns.
4669 --              This API should only be called by other APIs
4670 --              that are owned by the Core Modules Team (AK).
4671 --
4672 --  Desc        This API deletes foreign key columns from a
4673 --              given foreign_key_name.
4674 --
4675 --  Results     The API returns the standard p_return_status parameter
4676 --              indicating one of the standard return statuses :
4677 --                  * Unexpected error
4678 --                  * Error
4679 --                  * Success
4680 --  Parameters  Foreign Key columns
4681 --
4682 --  Version     Initial version number  =   1.0
4683 --  History     Current version number  =   1.0
4684 --=======================================================
4685 procedure DELETE_RELATED_FOREIGN_KEY_COL (
4686 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4687 p_api_version_number       IN      NUMBER,
4688 p_msg_count                OUT NOCOPY     NUMBER,
4689 p_msg_data                 OUT NOCOPY     VARCHAR2,
4690 p_return_status            OUT NOCOPY     VARCHAR2,
4691 p_foreign_key_name         IN      VARCHAR2
4692 ) is
4693 
4694 cursor l_get_columns_csr is
4695 select ATTRIBUTE_APPLICATION_ID, ATTRIBUTE_CODE
4696 from   AK_FOREIGN_KEY_COLUMNS
4697 where  FOREIGN_KEY_NAME = p_foreign_key_name;
4698 
4699 l_api_name                 CONSTANT varchar2(30):= 'Delete_Related_Foreign_Key_Col';
4700 l_msg_count                NUMBER;
4701 l_msg_data                 VARCHAR2(2000);
4702 l_return_status            VARCHAR2(1);
4703 l_attribute_code           VARCHAR2(30);
4704 l_attribute_appl_id        NUMBER;
4705 i                          NUMBER := 0;
4706 begin
4707 
4708 savepoint start_delete_rel_foreign_col;
4709 
4710 for csr_rec in l_get_columns_csr loop
4711 AK_KEY_PVT.DELETE_FOREIGN_KEY_COLUMN (
4712 p_validation_level => p_validation_level,
4713 p_api_version_number => 1.0,
4714 p_msg_count => l_msg_count,
4715 p_msg_data => l_msg_data,
4716 p_return_status => l_return_status,
4717 p_foreign_key_name => p_foreign_key_name,
4718 p_attribute_application_id => csr_rec.attribute_application_id,
4719 p_attribute_code => csr_rec.attribute_code,
4720 p_delete_cascade => 'Y'
4721 );
4722 if (l_return_status = FND_API.G_RET_STS_ERROR) or
4723 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
4724 l_attribute_code := csr_rec.attribute_code;
4725 l_attribute_appl_id := csr_rec.attribute_application_id;
4726 raise FND_API.G_EXC_ERROR;
4727 end if;
4728 end loop;
4729 
4730 p_return_status := FND_API.G_RET_STS_SUCCESS;
4731 
4732 EXCEPTION
4733 WHEN FND_API.G_EXC_ERROR THEN
4734 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4735 FND_MESSAGE.SET_NAME('AK','AK_FK_COLUMN_NOT_DELETED');
4736 FND_MESSAGE.SET_TOKEN('KEY',p_foreign_key_name ||
4737 ' ' || to_char(l_attribute_appl_id) ||
4738 ' ' || l_attribute_code);
4739 FND_MSG_PUB.Add;
4740 end if;
4741 p_return_status := FND_API.G_RET_STS_ERROR;
4742 rollback to start_delete_rel_foreign_col;
4743 FND_MSG_PUB.Count_And_Get (
4744 p_count => p_msg_count,
4745 p_data => p_msg_data);
4746 WHEN OTHERS THEN
4747 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4748 -- dbms_output.put_line('Unexpected error:'||substr(SQLERRM,1,240));
4749 rollback to start_delete_rel_foreign_col;
4750 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4751 SUBSTR (SQLERRM, 1, 240) );
4752 FND_MSG_PUB.Add;
4753 FND_MSG_PUB.Count_And_Get (
4754 p_count => p_msg_count,
4755 p_data => p_msg_data);
4756 end DELETE_RELATED_FOREIGN_KEY_COL;
4757 
4758 --=======================================================
4759 --  Procedure   DELETE_RELATED_UNIQUE_KEY_COL
4760 --
4761 --  Usage       Private API for deleting foreign key columns.
4762 --              This API should only be called by other APIs
4763 --              that are owned by the Core Modules Team (AK).
4764 --
4765 --  Desc        This API deletes foreign key columns from a
4766 --              given foreign_key_name.
4767 --
4768 --  Results     The API returns the standard p_return_status parameter
4769 --              indicating one of the standard return statuses :
4770 --                  * Unexpected error
4771 --                  * Error
4772 --                  * Success
4773 --  Parameters  Foreign Key columns
4774 --
4775 --  Version     Initial version number  =   1.0
4776 --  History     Current version number  =   1.0
4777 --=======================================================
4778 procedure DELETE_RELATED_UNIQUE_KEY_COL (
4779 p_validation_level         IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
4780 p_api_version_number       IN      NUMBER,
4781 p_msg_count                OUT NOCOPY     NUMBER,
4782 p_msg_data                 OUT NOCOPY     VARCHAR2,
4783 p_return_status            OUT NOCOPY     VARCHAR2,
4784 p_unique_key_name          IN      VARCHAR2
4785 ) is
4786 
4787 cursor l_get_columns_csr is
4788 select ATTRIBUTE_APPLICATION_ID, ATTRIBUTE_CODE
4789 from   AK_UNIQUE_KEY_COLUMNS
4790 where  UNIQUE_KEY_NAME = p_unique_key_name;
4791 
4792 l_api_name                 CONSTANT varchar2(30):= 'Delete_Related_Unique_Key_Col';
4793 l_msg_count                NUMBER;
4794 l_msg_data                 VARCHAR2(2000);
4795 l_return_status            VARCHAR2(1);
4796 l_attribute_code           VARCHAR2(30);
4797 l_attribute_appl_id        NUMBER;
4798 begin
4799 
4800 savepoint start_delete_rel_unique_col;
4801 
4802 for csr_rec in l_get_columns_csr loop
4803 --
4804 -- p_override flag is set to 'Y' here so that only AK_UNIQUE_KEY_COLUMNS
4805 -- get deleted, other references would not be deleted and would not be
4806 -- checked.
4807 AK_KEY_PVT.DELETE_UNIQUE_KEY_COLUMN (
4808 p_validation_level => p_validation_level,
4809 p_api_version_number => 1.0,
4810 p_msg_count => l_msg_count,
4811 p_msg_data => l_msg_data,
4812 p_return_status => l_return_status,
4813 p_unique_key_name => p_unique_key_name,
4814 p_attribute_application_id => csr_rec.attribute_application_id,
4815 p_attribute_code => csr_rec.attribute_code,
4816 p_delete_cascade => 'N',
4817 p_override => 'Y'
4818 );
4819 
4820 if (l_return_status = FND_API.G_RET_STS_ERROR) or
4821 (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
4822 l_attribute_code := csr_rec.attribute_code;
4823 l_attribute_appl_id := csr_rec.attribute_application_id;
4824 raise FND_API.G_EXC_ERROR;
4825 end if;
4826 end loop;
4827 
4828 p_return_status := FND_API.G_RET_STS_SUCCESS;
4829 
4830 EXCEPTION
4831 WHEN FND_API.G_EXC_ERROR THEN
4832 if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4833 FND_MESSAGE.SET_NAME('AK','AK_UK_COLUMN_NOT_DELETED');
4834 FND_MESSAGE.SET_TOKEN('OBJECT', 'AK_UNIQUE_KEY_COLUMN',TRUE);
4835 FND_MESSAGE.SET_TOKEN('KEY',p_unique_key_name ||
4836 ' ' || to_char(l_attribute_appl_id) ||
4837 ' ' || l_attribute_code);
4838 FND_MSG_PUB.Add;
4839 end if;
4840 p_return_status := FND_API.G_RET_STS_ERROR;
4841 rollback to start_delete_rel_unique_col;
4842 FND_MSG_PUB.Count_And_Get (
4843 p_count => p_msg_count,
4844 p_data => p_msg_data);
4845 WHEN OTHERS THEN
4846 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4847 rollback to start_delete_rel_unique_col;
4848 FND_MSG_PUB.Build_Exc_Msg( G_PKG_NAME, l_api_name,
4849 SUBSTR (SQLERRM, 1, 240) );
4850 FND_MSG_PUB.Add;
4851 FND_MSG_PUB.Count_And_Get (
4852 p_count => p_msg_count,
4853 p_data => p_msg_data);
4854 end DELETE_RELATED_UNIQUE_KEY_COL;
4855 
4856 end AK_KEY_PVT;