1 package body FND_CP_SERVICES_PKG as
2 /* $Header: AFCPSERB.pls 120.2 2005/08/19 14:34:23 susghosh ship $ */
3 procedure INSERT_ROW (
4 X_ROWID in out NOCOPY VARCHAR2,
5 X_SERVICE_ID in NUMBER,
6 X_DEBUG_TYPE in VARCHAR2,
7 X_DEBUG_CHANGE_ACTION in VARCHAR2,
8 X_ALLOW_MULTIPLE_PROC_SI in VARCHAR2,
9 X_DEFAULT_DEBUG_LEVEL in VARCHAR2,
10 X_ENABLED in VARCHAR2,
11 X_CARTRIDGE_APPLICATION_ID in NUMBER,
12 X_ALLOW_MULTIPLE_PROC_INSTANCE in VARCHAR2,
13 X_ALLOW_MULTIPLE_PROC_NODE in VARCHAR2,
14 X_MIGRATE_ON_FAILURE in VARCHAR2,
15 X_SERVER_TYPE in VARCHAR2,
16 X_ALLOW_SUSPEND in VARCHAR2,
17 X_ALLOW_VERIFY in VARCHAR2,
18 X_ALLOW_PARAMETER in VARCHAR2,
19 X_ALLOW_START in VARCHAR2,
20 X_ALLOW_EDIT in VARCHAR2,
21 X_CARTRIDGE_HANDLE in VARCHAR2,
22 X_SERVICE_HANDLE in VARCHAR2,
23 X_ALLOW_CREATE in VARCHAR2,
24 X_SERVICE_CLASS in VARCHAR2,
25 X_SERVICE_INSTANCE_CLASS in VARCHAR2,
26 X_ALLOW_RCG in VARCHAR2,
27 X_OAM_DISPLAY_ORDER in NUMBER,
28 X_ALLOW_RESTART in VARCHAR2,
29 X_PARAMETER_CHANGE_ACTION in VARCHAR2,
30 X_DEVELOPER_PARAMETERS in VARCHAR2,
31 X_ENV_FILE_NAME in VARCHAR2,
32 X_SERVICE_NAME in VARCHAR2,
33 X_DESCRIPTION in VARCHAR2,
34 X_SERVICE_PLURAL_NAME in VARCHAR2,
35 X_CREATION_DATE in DATE,
36 X_CREATED_BY in NUMBER,
37 X_LAST_UPDATE_DATE in DATE,
38 X_LAST_UPDATED_BY in NUMBER,
39 X_LAST_UPDATE_LOGIN in NUMBER
40 ) is
41 cursor C is select ROWID from FND_CP_SERVICES
42 where SERVICE_ID = X_SERVICE_ID
43 ;
44 begin
45 insert into FND_CP_SERVICES (
46 DEBUG_TYPE,
47 DEBUG_CHANGE_ACTION,
48 ALLOW_MULTIPLE_PROC_SI,
49 DEFAULT_DEBUG_LEVEL,
50 ENABLED,
51 CARTRIDGE_APPLICATION_ID,
52 ALLOW_MULTIPLE_PROC_INSTANCE,
53 ALLOW_MULTIPLE_PROC_NODE,
54 MIGRATE_ON_FAILURE,
55 SERVER_TYPE,
56 ALLOW_SUSPEND,
57 ALLOW_VERIFY,
58 ALLOW_PARAMETER,
59 ALLOW_START,
60 ALLOW_EDIT,
61 CARTRIDGE_HANDLE,
62 SERVICE_HANDLE,
63 SERVICE_ID,
64 ALLOW_CREATE,
65 SERVICE_CLASS,
66 SERVICE_INSTANCE_CLASS,
67 ALLOW_RCG,
68 OAM_DISPLAY_ORDER,
69 ALLOW_RESTART,
70 PARAMETER_CHANGE_ACTION,
71 DEVELOPER_PARAMETERS,
72 ENV_FILE_NAME,
73 CREATION_DATE,
74 CREATED_BY,
75 LAST_UPDATE_DATE,
76 LAST_UPDATED_BY,
77 LAST_UPDATE_LOGIN
78 ) values (
79 X_DEBUG_TYPE,
80 X_DEBUG_CHANGE_ACTION,
81 X_ALLOW_MULTIPLE_PROC_SI,
82 X_DEFAULT_DEBUG_LEVEL,
83 X_ENABLED,
84 X_CARTRIDGE_APPLICATION_ID,
85 X_ALLOW_MULTIPLE_PROC_INSTANCE,
86 X_ALLOW_MULTIPLE_PROC_NODE,
87 X_MIGRATE_ON_FAILURE,
88 X_SERVER_TYPE,
89 X_ALLOW_SUSPEND,
90 X_ALLOW_VERIFY,
91 X_ALLOW_PARAMETER,
92 X_ALLOW_START,
93 X_ALLOW_EDIT,
94 X_CARTRIDGE_HANDLE,
95 X_SERVICE_HANDLE,
96 X_SERVICE_ID,
97 X_ALLOW_CREATE,
98 X_SERVICE_CLASS,
99 X_SERVICE_INSTANCE_CLASS,
100 X_ALLOW_RCG,
101 X_OAM_DISPLAY_ORDER,
102 X_ALLOW_RESTART,
103 X_PARAMETER_CHANGE_ACTION,
104 X_DEVELOPER_PARAMETERS,
105 X_ENV_FILE_NAME,
106 X_CREATION_DATE,
107 X_CREATED_BY,
108 X_LAST_UPDATE_DATE,
109 X_LAST_UPDATED_BY,
110 X_LAST_UPDATE_LOGIN
111 );
112
113 insert into FND_CP_SERVICES_TL (
114 SERVICE_PLURAL_NAME,
115 CREATION_DATE,
116 CREATED_BY,
117 DESCRIPTION,
118 LAST_UPDATE_DATE,
119 LAST_UPDATED_BY,
120 LAST_UPDATE_LOGIN,
121 SERVICE_ID,
122 SERVICE_NAME,
123 LANGUAGE,
124 SOURCE_LANG
125 ) select
126 X_SERVICE_PLURAL_NAME,
127 X_CREATION_DATE,
128 X_CREATED_BY,
129 X_DESCRIPTION,
130 X_LAST_UPDATE_DATE,
131 X_LAST_UPDATED_BY,
132 X_LAST_UPDATE_LOGIN,
133 X_SERVICE_ID,
134 X_SERVICE_NAME,
135 L.LANGUAGE_CODE,
136 userenv('LANG')
137 from FND_LANGUAGES L
138 where L.INSTALLED_FLAG in ('I', 'B')
139 and not exists
140 (select NULL
141 from FND_CP_SERVICES_TL T
142 where T.SERVICE_ID = X_SERVICE_ID
143 and T.LANGUAGE = L.LANGUAGE_CODE);
144
145 open c;
146 fetch c into X_ROWID;
147 if (c%notfound) then
148 close c;
149 raise no_data_found;
150 end if;
151 close c;
152
153 end INSERT_ROW;
154
155 procedure LOCK_ROW (
156 X_SERVICE_ID in NUMBER,
157 X_DEBUG_TYPE in VARCHAR2,
158 X_DEBUG_CHANGE_ACTION in VARCHAR2,
159 X_ALLOW_MULTIPLE_PROC_SI in VARCHAR2,
160 X_DEFAULT_DEBUG_LEVEL in VARCHAR2,
161 X_ENABLED in VARCHAR2,
162 X_CARTRIDGE_APPLICATION_ID in NUMBER,
163 X_ALLOW_MULTIPLE_PROC_INSTANCE in VARCHAR2,
164 X_ALLOW_MULTIPLE_PROC_NODE in VARCHAR2,
165 X_MIGRATE_ON_FAILURE in VARCHAR2,
166 X_SERVER_TYPE in VARCHAR2,
167 X_ALLOW_SUSPEND in VARCHAR2,
168 X_ALLOW_VERIFY in VARCHAR2,
169 X_ALLOW_PARAMETER in VARCHAR2,
170 X_ALLOW_START in VARCHAR2,
171 X_ALLOW_EDIT in VARCHAR2,
172 X_CARTRIDGE_HANDLE in VARCHAR2,
173 X_SERVICE_HANDLE in VARCHAR2,
174 X_ALLOW_CREATE in VARCHAR2,
175 X_SERVICE_CLASS in VARCHAR2,
176 X_SERVICE_INSTANCE_CLASS in VARCHAR2,
177 X_ALLOW_RCG in VARCHAR2,
178 X_OAM_DISPLAY_ORDER in NUMBER,
179 X_ALLOW_RESTART in VARCHAR2,
180 X_PARAMETER_CHANGE_ACTION in VARCHAR2,
181 X_DEVELOPER_PARAMETERS in VARCHAR2,
182 X_ENV_FILE_NAME in VARCHAR2,
183 X_SERVICE_NAME in VARCHAR2,
184 X_DESCRIPTION in VARCHAR2,
185 X_SERVICE_PLURAL_NAME in VARCHAR2
186 ) is
187 cursor c is select
188 DEBUG_TYPE,
189 DEBUG_CHANGE_ACTION,
190 ALLOW_MULTIPLE_PROC_SI,
191 DEFAULT_DEBUG_LEVEL,
192 ENABLED,
193 CARTRIDGE_APPLICATION_ID,
194 ALLOW_MULTIPLE_PROC_INSTANCE,
195 ALLOW_MULTIPLE_PROC_NODE,
196 MIGRATE_ON_FAILURE,
197 SERVER_TYPE,
198 ALLOW_SUSPEND,
199 ALLOW_VERIFY,
200 ALLOW_PARAMETER,
201 ALLOW_START,
202 ALLOW_EDIT,
203 CARTRIDGE_HANDLE,
204 SERVICE_HANDLE,
205 ALLOW_CREATE,
206 SERVICE_CLASS,
207 SERVICE_INSTANCE_CLASS,
208 ALLOW_RCG,
209 OAM_DISPLAY_ORDER,
210 ALLOW_RESTART,
211 PARAMETER_CHANGE_ACTION,
212 DEVELOPER_PARAMETERS,
213 ENV_FILE_NAME
214 from FND_CP_SERVICES
215 where SERVICE_ID = X_SERVICE_ID
216 for update of SERVICE_ID nowait;
217 recinfo c%rowtype;
218
219 cursor c1 is select
220 SERVICE_NAME,
221 DESCRIPTION,
222 SERVICE_PLURAL_NAME,
223 decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
224 from FND_CP_SERVICES_TL
225 where SERVICE_ID = X_SERVICE_ID
226 and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
227 for update of SERVICE_ID nowait;
228 begin
229 open c;
230 fetch c into recinfo;
231 if (c%notfound) then
232 close c;
233 fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
234 app_exception.raise_exception;
235 end if;
236 close c;
237 if ( ((recinfo.DEBUG_TYPE = X_DEBUG_TYPE)
238 OR ((recinfo.DEBUG_TYPE is null) AND (X_DEBUG_TYPE is null)))
239 AND (recinfo.DEBUG_CHANGE_ACTION = X_DEBUG_CHANGE_ACTION)
240 AND ((recinfo.ALLOW_MULTIPLE_PROC_SI = X_ALLOW_MULTIPLE_PROC_SI)
241 OR ((recinfo.ALLOW_MULTIPLE_PROC_SI is null) AND (X_ALLOW_MULTIPLE_PROC_SI is null)))
242 AND ((recinfo.DEFAULT_DEBUG_LEVEL = X_DEFAULT_DEBUG_LEVEL)
243 OR ((recinfo.DEFAULT_DEBUG_LEVEL is null) AND (X_DEFAULT_DEBUG_LEVEL is null)))
244 AND (recinfo.ENABLED = X_ENABLED)
245 AND ((recinfo.CARTRIDGE_APPLICATION_ID = X_CARTRIDGE_APPLICATION_ID)
246 OR ((recinfo.CARTRIDGE_APPLICATION_ID is null) AND (X_CARTRIDGE_APPLICATION_ID is null)))
247 AND (recinfo.ALLOW_MULTIPLE_PROC_INSTANCE = X_ALLOW_MULTIPLE_PROC_INSTANCE)
248 AND (recinfo.ALLOW_MULTIPLE_PROC_NODE = X_ALLOW_MULTIPLE_PROC_NODE)
249 AND (recinfo.MIGRATE_ON_FAILURE = X_MIGRATE_ON_FAILURE)
250 AND (recinfo.SERVER_TYPE = X_SERVER_TYPE)
251 AND (recinfo.ALLOW_SUSPEND = X_ALLOW_SUSPEND)
252 AND (recinfo.ALLOW_VERIFY = X_ALLOW_VERIFY)
253 AND (recinfo.ALLOW_PARAMETER = X_ALLOW_PARAMETER)
254 AND (recinfo.ALLOW_START = X_ALLOW_START)
255 AND (recinfo.ALLOW_EDIT = X_ALLOW_EDIT)
256 AND (recinfo.CARTRIDGE_HANDLE = X_CARTRIDGE_HANDLE)
257 AND (recinfo.SERVICE_HANDLE = X_SERVICE_HANDLE)
258 AND ((recinfo.ALLOW_CREATE = X_ALLOW_CREATE)
259 OR ((recinfo.ALLOW_CREATE is null) AND (X_ALLOW_CREATE is null)))
260 AND ((recinfo.SERVICE_CLASS = X_SERVICE_CLASS)
261 OR ((recinfo.SERVICE_CLASS is null) AND (X_SERVICE_CLASS is null)))
262 AND ((recinfo.SERVICE_INSTANCE_CLASS = X_SERVICE_INSTANCE_CLASS)
263 OR ((recinfo.SERVICE_INSTANCE_CLASS is null) AND (X_SERVICE_INSTANCE_CLASS is null)))
264 AND (recinfo.ALLOW_RCG = X_ALLOW_RCG)
265 AND ((recinfo.OAM_DISPLAY_ORDER = X_OAM_DISPLAY_ORDER)
266 OR ((recinfo.OAM_DISPLAY_ORDER is null) AND (X_OAM_DISPLAY_ORDER is null)))
267 AND (recinfo.ALLOW_RESTART = X_ALLOW_RESTART)
268 AND (recinfo.PARAMETER_CHANGE_ACTION = X_PARAMETER_CHANGE_ACTION)
269 AND ((recinfo.DEVELOPER_PARAMETERS = X_DEVELOPER_PARAMETERS)
270 OR ((recinfo.DEVELOPER_PARAMETERS is null) AND (X_DEVELOPER_PARAMETERS is null)))
271 AND ((recinfo.ENV_FILE_NAME = X_ENV_FILE_NAME)
272 OR ((recinfo.ENV_FILE_NAME is null) AND (X_ENV_FILE_NAME is null)))
273 ) then
274 null;
275 else
276 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
277 app_exception.raise_exception;
278 end if;
279
280 for tlinfo in c1 loop
281 if (tlinfo.BASELANG = 'Y') then
282 if ( (tlinfo.SERVICE_NAME = X_SERVICE_NAME)
283 AND ((tlinfo.DESCRIPTION = X_DESCRIPTION)
284 OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
285 AND ((tlinfo.SERVICE_PLURAL_NAME = X_SERVICE_PLURAL_NAME)
286 OR ((tlinfo.SERVICE_PLURAL_NAME is null) AND (X_SERVICE_PLURAL_NAME is null)))
287 ) then
288 null;
289 else
290 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
291 app_exception.raise_exception;
292 end if;
293 end if;
294 end loop;
295 return;
296 end LOCK_ROW;
297
298 procedure UPDATE_ROW (
299 X_SERVICE_ID in NUMBER,
300 X_DEBUG_TYPE in VARCHAR2,
301 X_DEBUG_CHANGE_ACTION in VARCHAR2,
302 X_ALLOW_MULTIPLE_PROC_SI in VARCHAR2,
303 X_DEFAULT_DEBUG_LEVEL in VARCHAR2,
304 X_ENABLED in VARCHAR2,
305 X_CARTRIDGE_APPLICATION_ID in NUMBER,
306 X_ALLOW_MULTIPLE_PROC_INSTANCE in VARCHAR2,
307 X_ALLOW_MULTIPLE_PROC_NODE in VARCHAR2,
308 X_MIGRATE_ON_FAILURE in VARCHAR2,
309 X_SERVER_TYPE in VARCHAR2,
310 X_ALLOW_SUSPEND in VARCHAR2,
311 X_ALLOW_VERIFY in VARCHAR2,
312 X_ALLOW_PARAMETER in VARCHAR2,
313 X_ALLOW_START in VARCHAR2,
314 X_ALLOW_EDIT in VARCHAR2,
315 X_CARTRIDGE_HANDLE in VARCHAR2,
316 X_SERVICE_HANDLE in VARCHAR2,
317 X_ALLOW_CREATE in VARCHAR2,
318 X_SERVICE_CLASS in VARCHAR2,
319 X_SERVICE_INSTANCE_CLASS in VARCHAR2,
320 X_ALLOW_RCG in VARCHAR2,
321 X_OAM_DISPLAY_ORDER in NUMBER,
322 X_ALLOW_RESTART in VARCHAR2,
323 X_PARAMETER_CHANGE_ACTION in VARCHAR2,
324 X_DEVELOPER_PARAMETERS in VARCHAR2,
325 X_ENV_FILE_NAME in VARCHAR2,
326 X_SERVICE_NAME in VARCHAR2,
327 X_DESCRIPTION in VARCHAR2,
328 X_SERVICE_PLURAL_NAME in VARCHAR2,
329 X_LAST_UPDATE_DATE in DATE,
330 X_LAST_UPDATED_BY in NUMBER,
331 X_LAST_UPDATE_LOGIN in NUMBER
332 ) is
333 begin
334 update FND_CP_SERVICES set
335 DEBUG_TYPE = X_DEBUG_TYPE,
336 DEBUG_CHANGE_ACTION = X_DEBUG_CHANGE_ACTION,
337 ALLOW_MULTIPLE_PROC_SI = X_ALLOW_MULTIPLE_PROC_SI,
338 DEFAULT_DEBUG_LEVEL = X_DEFAULT_DEBUG_LEVEL,
339 ENABLED = X_ENABLED,
340 CARTRIDGE_APPLICATION_ID = X_CARTRIDGE_APPLICATION_ID,
341 ALLOW_MULTIPLE_PROC_INSTANCE = X_ALLOW_MULTIPLE_PROC_INSTANCE,
342 ALLOW_MULTIPLE_PROC_NODE = X_ALLOW_MULTIPLE_PROC_NODE,
343 MIGRATE_ON_FAILURE = X_MIGRATE_ON_FAILURE,
344 SERVER_TYPE = X_SERVER_TYPE,
345 ALLOW_SUSPEND = X_ALLOW_SUSPEND,
346 ALLOW_VERIFY = X_ALLOW_VERIFY,
347 ALLOW_PARAMETER = X_ALLOW_PARAMETER,
348 ALLOW_START = X_ALLOW_START,
349 ALLOW_EDIT = X_ALLOW_EDIT,
350 CARTRIDGE_HANDLE = X_CARTRIDGE_HANDLE,
351 SERVICE_HANDLE = X_SERVICE_HANDLE,
352 ALLOW_CREATE = X_ALLOW_CREATE,
353 SERVICE_CLASS = X_SERVICE_CLASS,
354 SERVICE_INSTANCE_CLASS = X_SERVICE_INSTANCE_CLASS,
355 ALLOW_RCG = X_ALLOW_RCG,
356 OAM_DISPLAY_ORDER = X_OAM_DISPLAY_ORDER,
357 ALLOW_RESTART = X_ALLOW_RESTART,
358 PARAMETER_CHANGE_ACTION = X_PARAMETER_CHANGE_ACTION,
359 DEVELOPER_PARAMETERS = X_DEVELOPER_PARAMETERS,
360 ENV_FILE_NAME = X_ENV_FILE_NAME,
361 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
362 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
363 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
364 where SERVICE_ID = X_SERVICE_ID;
365
366 if (sql%notfound) then
367 raise no_data_found;
368 end if;
369
370 update FND_CP_SERVICES_TL set
371 SERVICE_NAME = X_SERVICE_NAME,
372 DESCRIPTION = X_DESCRIPTION,
373 SERVICE_PLURAL_NAME = X_SERVICE_PLURAL_NAME,
374 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
375 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
376 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
377 SOURCE_LANG = userenv('LANG')
378 where SERVICE_ID = X_SERVICE_ID
379 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
380
381 if (sql%notfound) then
382 raise no_data_found;
383 end if;
384 end UPDATE_ROW;
385
386 procedure DELETE_ROW (
387 X_SERVICE_ID in NUMBER
388 ) is
389 begin
390 delete from FND_CP_SERVICES_TL
391 where SERVICE_ID = X_SERVICE_ID;
392
393 if (sql%notfound) then
394 raise no_data_found;
395 end if;
396
397 delete from FND_CP_SERVICES
398 where SERVICE_ID = X_SERVICE_ID;
399
400 if (sql%notfound) then
401 raise no_data_found;
402 end if;
403 end DELETE_ROW;
404
405 procedure ADD_LANGUAGE
406 is
407 begin
408
409 /* Mar/19/03 requested by Ric Ginsberg */
410 /* The following delete and update statements are commented out */
411 /* as a quick workaround to fix the time-consuming table handler issue */
412 /* Eventually we'll need to turn them into a separate fix_language procedure */
413 /*
414
415 delete from FND_CP_SERVICES_TL T
416 where not exists
417 (select NULL
418 from FND_CP_SERVICES B
419 where B.SERVICE_ID = T.SERVICE_ID
420 );
421
422 update FND_CP_SERVICES_TL T set (
423 SERVICE_NAME,
424 DESCRIPTION,
425 SERVICE_PLURAL_NAME
426 ) = (select
427 B.SERVICE_NAME,
428 B.DESCRIPTION,
429 B.SERVICE_PLURAL_NAME
430 from FND_CP_SERVICES_TL B
431 where B.SERVICE_ID = T.SERVICE_ID
432 and B.LANGUAGE = T.SOURCE_LANG)
433 where (
434 T.SERVICE_ID,
435 T.LANGUAGE
436 ) in (select
437 SUBT.SERVICE_ID,
438 SUBT.LANGUAGE
439 from FND_CP_SERVICES_TL SUBB, FND_CP_SERVICES_TL SUBT
440 where SUBB.SERVICE_ID = SUBT.SERVICE_ID
441 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
442 and (SUBB.SERVICE_NAME <> SUBT.SERVICE_NAME
443 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
444 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
445 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
446 or SUBB.SERVICE_PLURAL_NAME <> SUBT.SERVICE_PLURAL_NAME
447 or (SUBB.SERVICE_PLURAL_NAME is null and SUBT.SERVICE_PLURAL_NAME is not null)
448 or (SUBB.SERVICE_PLURAL_NAME is not null and SUBT.SERVICE_PLURAL_NAME is null)
449 ));
450 */
451
452 insert into FND_CP_SERVICES_TL (
453 SERVICE_PLURAL_NAME,
454 CREATION_DATE,
455 CREATED_BY,
456 DESCRIPTION,
457 LAST_UPDATE_DATE,
458 LAST_UPDATED_BY,
459 LAST_UPDATE_LOGIN,
460 SERVICE_ID,
461 SERVICE_NAME,
462 LANGUAGE,
463 SOURCE_LANG
464 ) select
465 B.SERVICE_PLURAL_NAME,
466 B.CREATION_DATE,
467 B.CREATED_BY,
468 B.DESCRIPTION,
469 B.LAST_UPDATE_DATE,
470 B.LAST_UPDATED_BY,
471 B.LAST_UPDATE_LOGIN,
472 B.SERVICE_ID,
473 B.SERVICE_NAME,
474 L.LANGUAGE_CODE,
475 B.SOURCE_LANG
476 from FND_CP_SERVICES_TL B, FND_LANGUAGES L
477 where L.INSTALLED_FLAG in ('I', 'B')
478 and B.LANGUAGE = userenv('LANG')
479 and not exists
480 (select NULL
481 from FND_CP_SERVICES_TL T
482 where T.SERVICE_ID = B.SERVICE_ID
483 and T.LANGUAGE = L.LANGUAGE_CODE);
484 end ADD_LANGUAGE;
485
486 end FND_CP_SERVICES_PKG;