DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_CP_SERVICES_PKG

Source


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;