DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_DB_MEASURE_COLS_PKG

Source


1 package body BSC_DB_MEASURE_COLS_PKG as
2 /* $Header: BSCMSCOB.pls 120.1 2006/01/09 23:17:11 ppandey noship $ */
3 
4 -- mdamle 09/03/03 - Validate measure col
5 function Validate_Measure_Col
6 ( p_measure_col IN VARCHAR2
7 ) return boolean;
8 
9 
10 procedure INSERT_ROW (
11   X_MEASURE_COL in VARCHAR2,
12   X_MEASURE_GROUP_ID in NUMBER,
13   X_PROJECTION_ID in NUMBER,
14   X_MEASURE_TYPE in NUMBER,
15   X_HELP in VARCHAR2
16 ) is
17 l_count number;
18 l_msg_data  varchar2(2000);
19 l_msg_count number;
20 begin
21 
22     -- mdamle 09/03/03 - Validate measure col
23     if not validate_measure_col(X_Measure_Col) then
24       FND_MESSAGE.SET_NAME('BSC','BSC_MEASURE_INV_SOURCE_NAME');
25       FND_MSG_PUB.ADD;
26       RAISE FND_API.G_EXC_ERROR;
27     end if;
28 
29   -- mdamle 4/23/2003 - Measure Definer - Added default for measure_group_id and projection_id
30   insert into BSC_DB_MEASURE_COLS_TL (
31     MEASURE_COL,
32     HELP,
33     MEASURE_GROUP_ID,
34     PROJECTION_ID,
35     MEASURE_TYPE,
36     LANGUAGE,
37     SOURCE_LANG
38   ) select
39     X_MEASURE_COL,
40     nvl(X_HELP, 'Internal Column'),
41     nvl(X_MEASURE_GROUP_ID, -1),
42     nvl(X_PROJECTION_ID, 3),
43     nvl(X_MEASURE_TYPE, 1),
44     L.LANGUAGE_CODE,
45     USERENV('LANG')
46   from FND_LANGUAGES L
47   where L.INSTALLED_FLAG in ('I', 'B')
48   and not exists
49     (select NULL
50     from BSC_DB_MEASURE_COLS_TL T
51     where UPPER(T.MEASURE_COL) = UPPER(X_MEASURE_COL)
52     and T.LANGUAGE = L.LANGUAGE_CODE);
53 
54 end INSERT_ROW;
55 
56 procedure LOCK_ROW (
57   X_MEASURE_COL in VARCHAR2,
58   X_MEASURE_GROUP_ID in NUMBER,
59   X_PROJECTION_ID in NUMBER,
60   X_MEASURE_TYPE in NUMBER,
61   X_HELP in VARCHAR2
62 ) is
63   cursor c1 is select
64       MEASURE_GROUP_ID,
65       PROJECTION_ID,
66       MEASURE_TYPE,
67       HELP,
68       decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
69     from BSC_DB_MEASURE_COLS_TL
70     where MEASURE_COL = X_MEASURE_COL
71     and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
72     for update of MEASURE_COL nowait;
73 begin
74   for tlinfo in c1 loop
75     if (tlinfo.BASELANG = 'Y') then
76       if (    (tlinfo.HELP = X_HELP)
77           AND (tlinfo.MEASURE_GROUP_ID = X_MEASURE_GROUP_ID)
78           AND (tlinfo.PROJECTION_ID = X_PROJECTION_ID)
79           AND ((tlinfo.MEASURE_TYPE = X_MEASURE_TYPE)
80                OR ((tlinfo.MEASURE_TYPE is null) AND (X_MEASURE_TYPE is null)))
81       ) then
82         null;
83       else
84         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
85         app_exception.raise_exception;
86       end if;
87     end if;
88   end loop;
89   return;
90 end LOCK_ROW;
91 
92 procedure TRANSLATE_ROW (
93   X_MEASURE_COL in VARCHAR2,
94   X_HELP in VARCHAR2
95 ) is
96 begin
97   update BSC_DB_MEASURE_COLS_TL set
98     HELP = nvl(X_HELP,HELP),
99     SOURCE_LANG = userenv('LANG')
100   where MEASURE_COL = X_MEASURE_COL
101   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
102 
103   if (sql%notfound) then
104     raise no_data_found;
105   end if;
106 end TRANSLATE_ROW;
107 
108 procedure UPDATE_ROW (
109   X_MEASURE_COL in VARCHAR2,
110   X_MEASURE_GROUP_ID in NUMBER,
111   X_PROJECTION_ID in NUMBER,
112   X_MEASURE_TYPE in NUMBER,
113   X_HELP in VARCHAR2
114 ) is
115 begin
116 
117   TRANSLATE_ROW(X_MEASURE_COL, X_HELP);
118 
119   update BSC_DB_MEASURE_COLS_TL set
120       MEASURE_GROUP_ID = X_MEASURE_GROUP_ID,
121       PROJECTION_ID = X_PROJECTION_ID,
122       MEASURE_TYPE = X_MEASURE_TYPE
123     where MEASURE_COL = X_MEASURE_COL;
124 
125   if (sql%notfound) then
126     raise no_data_found;
127   end if;
128 end UPDATE_ROW;
129 
130 procedure DELETE_ROW (
131   X_MEASURE_COL in VARCHAR2
132 ) is
133 begin
134   delete from BSC_DB_MEASURE_COLS_TL
135   where MEASURE_COL = X_MEASURE_COL;
136 
137   if (sql%notfound) then
138     raise no_data_found;
139   end if;
140 
141 end DELETE_ROW;
142 
143 procedure ADD_LANGUAGE
144 is
145 begin
146   update BSC_DB_MEASURE_COLS_TL T set (
147       HELP
148     ) = (select
149       B.HELP
150     from BSC_DB_MEASURE_COLS_TL B
151     where B.MEASURE_COL = T.MEASURE_COL
152     and B.LANGUAGE = T.SOURCE_LANG)
153   where (
154       T.MEASURE_COL,
155       T.LANGUAGE
156   ) in (select
157       SUBT.MEASURE_COL,
158       SUBT.LANGUAGE
159     from BSC_DB_MEASURE_COLS_TL SUBB, BSC_DB_MEASURE_COLS_TL SUBT
160     where SUBB.MEASURE_COL = SUBT.MEASURE_COL
161     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
162     and (SUBB.HELP <> SUBT.HELP
163   ));
164 
165   insert into BSC_DB_MEASURE_COLS_TL (
166     MEASURE_COL,
167     HELP,
168     MEASURE_GROUP_ID,
169     PROJECTION_ID,
170     MEASURE_TYPE,
171     LANGUAGE,
172     SOURCE_LANG
173   ) select
174     B.MEASURE_COL,
175     B.HELP,
176     B.MEASURE_GROUP_ID,
177     B.PROJECTION_ID,
178     B.MEASURE_TYPE,
179     L.LANGUAGE_CODE,
180     B.SOURCE_LANG
181   from BSC_DB_MEASURE_COLS_TL B, FND_LANGUAGES L
182   where L.INSTALLED_FLAG in ('I', 'B')
183   and B.LANGUAGE = userenv('LANG')
184   and not exists
185     (select NULL
186     from BSC_DB_MEASURE_COLS_TL T
187     where T.MEASURE_COL = B.MEASURE_COL
188     and T.LANGUAGE = L.LANGUAGE_CODE);
189 end ADD_LANGUAGE;
190 
191 
192 -- mdamle 09/03/03 - Validate measure col
193 function validate_measure_col
194 (p_measure_col  IN VARCHAR2) return boolean is
195 l_valid         boolean := TRUE;
196 l_asc           number;
197 l_cursor        number;
198 BEGIN
199     if p_measure_col is not null then
200 
201         -- Check if first letter is a number or an underscore
202         l_asc := ascii(substr(p_measure_col, 1, 1));
203 
204         if (l_asc >= 48 and l_asc <= 57) or (l_asc = 95) then
205             l_valid := false;
206         else
207             -- Valid values - numbers/alphabets/underscore
208                 for i in 1..length(p_measure_col) loop
209                 l_asc := ascii(substr(p_measure_col, i, 1));
210                 If Not (l_asc >= 48 And l_asc <= 57) And
211                        Not (l_asc >= 65 And l_asc <= 90) And
212                        Not (l_asc >= 97 And l_asc <= 122) and
213                    Not (l_asc = 95) Then
214                     l_valid := false;
215                 end if;
216             end loop;
217 
218             if (l_valid) then
219                 -- Parse to check if it's not a reserved word
220                 l_cursor := dbms_sql.open_cursor;
221                 dbms_sql.parse(l_cursor, 'select null ' || p_measure_col || ' from dual', dbms_sql.native);
222                 dbms_sql.close_cursor(l_cursor);
223             end if;
224 
225         end if;
226 
227     else
228         l_valid := false;
229     end if;
230 
231 
232     return l_valid;
233 EXCEPTION
234     when others then return false;
235 
236 END validate_measure_col;
237 
238 
239 -- added for Bug#3817894 (POSCO)
240 /**************************************************************************
241  Update_Measure_Column_Help
242 
243  This API updates the help column in BSC_DB_MEASURE_COLS_TL table
244  for the appropriate session language.
245 
246  Returns 'S' on successful update else returns 'E' or 'U' in x_Return_Status
247  with an appropriate error message readable from x_Msg_Data
248 ***************************************************************************/
249 
250 PROCEDURE Update_Measure_Column_Help (
251     p_Measure_Col    IN VARCHAR2
252   , p_Help           IN VARCHAR2
253   , x_Return_Status  OUT NOCOPY VARCHAR2
254   , x_Msg_Count      OUT NOCOPY NUMBER
255   , x_Msg_Data       OUT NOCOPY VARCHAR2
256 ) IS
257 BEGIN
258   SAVEPOINT UPDMEASCOLHELP;
259 
260   x_Return_Status :=  FND_API.G_RET_STS_SUCCESS;
261   FND_MSG_PUB.INITIALIZE;
262 
263   UPDATE BSC_DB_MEASURE_COLS_TL
264   SET    HELP        = NVL(p_Help, HELP),
265          SOURCE_LANG = USERENV('LANG')
266   WHERE  MEASURE_COL = p_Measure_Col
267   AND    USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
268 
269   IF (SQL%NOTFOUND) THEN
270     FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
271     FND_MESSAGE.SET_TOKEN('TYPE', NVL(p_Measure_Col, BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'SOURCE_COLUMNS')));
272     FND_MSG_PUB.ADD;
273     RAISE NO_DATA_FOUND;
274   END IF;
275 
276 EXCEPTION
277    WHEN NO_DATA_FOUND THEN
278       ROLLBACK TO UPDMEASCOLHELP;
279       FND_MSG_PUB.Count_And_Get
280       (      p_encoded   =>  FND_API.G_FALSE
281          ,   p_count     =>  x_msg_count
282          ,   p_data      =>  x_msg_data
283       );
284       x_Return_Status :=  FND_API.G_RET_STS_ERROR;
285 
286    WHEN OTHERS THEN
287       ROLLBACK TO UPDMEASCOLHELP;
288       x_Return_Status :=  FND_API.G_RET_STS_UNEXP_ERROR;
289       x_msg_data      :=  'Error occured at BSC_DB_MEASURE_COLS_PKG.Update_Measure_Column_Help  - ' || SQLERRM;
290 END Update_Measure_Column_Help;
291 
292 end BSC_DB_MEASURE_COLS_PKG;