DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_METADATA_DESC

Source


1 PACKAGE BODY BSC_METADATA_DESC as
2 /* $Header: BSCMDDB.pls 120.0 2005/05/31 18:53 appldev noship $ */
3 
4 G_PKG_NAME              CONSTANT        varchar2(30) := 'BSC_METADATA_DESC';
5 g_db_object                             varchar2(30) := null;
6 
7  TYPE Analysis_Group_Rec_Type IS RECORD (
8    dependency_flag     BSC_KPI_ANALYSIS_GROUPS.dependency_flag%TYPE
9    ,change_dim_set      BSC_KPI_ANALYSIS_GROUPS.change_dim_set%TYPE
10  );
11 
12 TYPE t_Analysis_Group_Rec_tbl IS TABLE OF Analysis_Group_Rec_Type
13     INDEX BY BINARY_INTEGER;
14 
15 g_margin  number;
16 g_desc_db_flag boolean;
17 g_row_num  number; -- count the sequence of each row in the metadata description
18 
19 ------------------------------------------------------------------------------
20 -- SaveText:  This procedure store a log line into the table
21 ------------------------------------------------------------------------------
22 PROCEDURE SaveText(
23  p_Text        IN      varchar2
24 ) IS
25   l_source  varchar2(30);
26   l_session_id  number;
27 BEGIN
28 
29  l_source := G_PKG_NAME;
30  l_session_id := userenv('SESSIONID');
31  if g_row_num is null then
32     g_row_num := 0;
33  end if;
34  g_row_num := g_row_num + 1 ;
35 
36  INSERT INTO  BSC_MESSAGE_LOGS  (
37     SOURCE,
38     TYPE,
39     MESSAGE,
40     CREATION_DATE,
41     CREATED_BY,
42     LAST_UPDATE_DATE,
43     LAST_UPDATED_BY,
44     LAST_UPDATE_LOGIN
45   ) VALUES(
46         l_source,
47         0,
48         p_Text,
49         sysdate,
50         l_session_id,
51         sysdate,
52         l_session_id,
53         g_row_num
54   );
55  commit;
56 
57 EXCEPTION
58   WHEN OTHERS THEN
59      raise;
60 
61 END SaveText;
62 
63 -- ------------------------------------------------------------------
64 -- Name: put_line
65 -- Desc: For now, just a wrapper on top of fnd_file
66 -- -----------------------------------------------------------------
67 PROCEDURE put_line(
68                 p_text			VARCHAR2) IS
69  l_len number;
70  l_start number:=1;
71  l_end number:=1;
72  last_reached boolean:=false;
73 BEGIN
74  if p_text is null or p_text='' then
75    return;
76  end if;
77  l_len:=nvl(length(p_text),0);
78  if l_len <=0 then
79    return;
80  end if;
81  while true loop
82     l_end:=l_start+250;
83    if l_end >= l_len then
84      l_end:=l_len;
85      last_reached:=true;
86    end if;
87    /*---------------------------------------------*/
88     -- Select Here the Output:
89    FND_FILE.PUT_LINE(FND_FILE.LOG,substr(p_text, l_start, 250));
90 
91    if g_desc_db_flag = true then
92       SaveText(substr(p_text, l_start, 250));
93    end if;
94    -- DBMS_OUTPUT.PUT_LINE(substr(p_text, l_start, 250));
95    /*---------------------------------------------*/
96    l_start:=l_start+250;
97    if last_reached then
98      exit;
99    end if;
100  end loop;
101 END put_line;
102 
103 FUNCTION getMargin(margenCharacter VARCHAR2
104                 , numCharacters NUMBER
105 ) RETURN VARCHAR2 IS
106  L_margen   VARCHAR2(20);
107  L_index    NUMBER;
108 BEGIN
109 
110  FOR L_index IN 1.. numCharacters -1  LOOP
111     L_margen:=L_margen || margenCharacter;
112  END LOOP;
113  IF margenCharacter = '-' THEN
114     L_margen:=L_margen || '> ';
115  ELSE
116     L_margen:=L_margen || margenCharacter || ' ';
117  END IF;
118  RETURN L_margen;
119 
120  EXCEPTION
121     WHEN OTHERS THEN
122         put_line(' Error Running BSC_METADATA_DESC.getMargin ');
123         put_line(SQLERRM||' ');
124         raise;
125 END getMargin ;
126 
127 /*--------------------------------------------------------------------------------------*/
128 
129 PROCEDURE Describe_kpi_DataSeries (
130  p_kpi_id              IN      NUMBER
131  ,p_Anaysis_option0     IN      NUMBER
132  ,p_Anaysis_option1     IN      NUMBER
133  ,p_Anaysis_option2     IN      NUMBER
134 ) IS
135     l_not_found_msg              VARCHAR2(2000);
136     l_not_found_msg2             VARCHAR2(2000);
137     l_not_found_msg3             VARCHAR2(2000);
138 
139     l_kpi_id              NUMBER;
140     l_Anaysis_option0     NUMBER;
141     l_Anaysis_option1     NUMBER ;
142     l_Anaysis_option2     NUMBER ;
143     l_Dataset_id          NUMBER ;
144     l_Measure_id          NUMBER ;
145 
146     -------------------------------------
147      -- show the relation between Analysis options, Data Series,
148      -- Datasets and Dimension Sets
149      CURSOR  c_KPI_Data_Series IS
150      SELECT A.series_id, A.Name, A.default_value
151             ,A.dataset_id, E.dim_set_id
152      FROM BSC_KPI_ANALYSIS_MEASURES_VL  A
153           , bsc_db_dataset_dim_sets_v     E
154      WHERE  E.INDICATOR         =  A.INDICATOR
155         AND E.A0                = A.Analysis_Option0
156         AND E.A1                = A.Analysis_Option1
157         AND E.A2                = A.Analysis_Option2
158         AND E.Series_Id         = A.Series_Id
159         AND A.INDICATOR         = l_Kpi_Id
160         AND A.Analysis_Option0  = l_Anaysis_option0
161         AND A.Analysis_Option1  = l_Anaysis_option1
162         AND A.Analysis_Option2 =  l_Anaysis_option2;
163     -------------------------------------
164      -- Show DataSets and Measure Information
165      CURSOR  c_Data_Set IS
166      SELECT  A.dataset_id,  A.Name, A.COLOR_METHOD
167            ,A.SOURCE ,A.Measure_Id1,
168             B.Measure_ID M_FLAG,  B.Short_Name Short_Name1, B.MEASURE_COL, B.SOURCE SOURCE1
169            ,A.Measure_Id2
170       FROM   BSC_SYS_DATASETS_VL           A
171            , BSC_SYS_MEASURES              B
172       WHERE B.Measure_ID   (+) = A.Measure_ID1
173        AND  A.dataset_id       = l_Dataset_id;
174     -------------------------------------
175      -- Show Measure Information
176      -- Used to show information in the secod measure of the dataset
177      CURSOR  c_measure IS
178      SELECT Short_Name, MEASURE_COL, SOURCE
179      FROM BSC_SYS_MEASURES
180      WHERE Measure_ID      = l_Measure_id;
181 
182 BEGIN
183     l_Kpi_Id             :=  p_Kpi_Id;
184     l_Anaysis_option0    :=  p_Anaysis_option0;
185     l_Anaysis_option1    :=  p_Anaysis_option1;
186     l_Anaysis_option2    :=  p_Anaysis_option2;
187     if g_margin is null then
188         g_margin := 0;
189     end if;
190     -------------- kpi Data Series
191     l_not_found_msg := getMargin('-', g_margin)||'Objective ID <'||l_Kpi_Id
192         || '>. There is any Data Series defined in table BSC_KPI_ANALYSIS_MEASURES_VL  for analysis combination <' || l_Anaysis_option0 || '-'
193         || l_Anaysis_option1 || '-' || l_Anaysis_option2 || '> in the table BSC_KPI_ANALYSIS_MEASURES_VL ' ;
194     FOR bsc_cd IN c_KPI_Data_Series  LOOP
195       l_not_found_msg := NULL;
196       put_line(getMargin('-', g_margin)||  'SERIES_ID is      <'||bsc_cd.SERIES_ID ||'> ' );
197       put_line(getMargin('.', g_margin+2)||'NAME is           <'||bsc_cd.NAME ||'> ' );
198       put_line(getMargin('.', g_margin+2)||'DEFAULT_VALUE is  <'||bsc_cd.DEFAULT_VALUE ||'> ' );
199       put_line(getMargin('.', g_margin+2)||'DIM_SET_ID is     <'||bsc_cd.DIM_SET_ID ||'> ' );
200       put_line(getMargin('.', g_margin+2)||'DATASET_ID is     <'||bsc_cd.DATASET_ID ||'> ' );
201     -------------- Sys Data sets
202       l_not_found_msg2 := getMargin('-', g_margin+4)||'ERROR. Objective ID <' ||l_Kpi_Id
203          || '> assigned to invalid Data Set Id in table BSC_KPI_ANALYSIS_MEASURES_VL.  Dataset Id <'||bsc_cd.DATASET_ID||'> not exitst in table BSC_SYS_DATASETS_VL.' ;
204       l_Dataset_id := bsc_cd.DATASET_ID;
205       FOR bsc_dset_cd IN c_Data_Set    LOOP
206         l_not_found_msg2 := NULL;
207         put_line(getMargin('.', g_margin+4)||'NAME (Data set Name)is <'||bsc_dset_cd.NAME ||'> ' );
208         put_line(getMargin('.', g_margin+4)||'SOURCE is              <'||bsc_dset_cd.SOURCE ||'> ' );
209         put_line(getMargin('.', g_margin+4)||'COLOR_METHOD is        <'||bsc_dset_cd.COLOR_METHOD ||'> ' );
210         put_line(getMargin('.', g_margin+4)||'MEASURE_ID1 is         <'||bsc_dset_cd.MEASURE_ID1  ||'> ' );
211         put_line(getMargin('.', g_margin+6)||'SHORT_NAME is          <'||bsc_dset_cd.SHORT_NAME1  ||'> ' );
212         put_line(getMargin('.', g_margin+6)||'SOURCE is              <'||bsc_dset_cd.SOURCE1  ||'> ' );
213         IF bsc_dset_cd.M_FLAG IS NULL THEN
214          put_line(getMargin('.', g_margin+6)||'ERROR. Measuare Id     <'||bsc_dset_cd.MEASURE_ID1 ||'> is invalid. I does not exists in BSC_SYS_MEASURES .' );
215         END IF;
216         IF bsc_dset_cd.MEASURE_ID2 IS NOT NULL THEN
217          put_line(getMargin('.', g_margin+6)||'MEASURE_ID2 is         <'||bsc_dset_cd.MEASURE_ID2  ||'> ' );
218           l_not_found_msg3  := getMargin('.', g_margin+8)||'ERROR. Measuare Id <'||bsc_dset_cd.MEASURE_ID2 ||'> is invalid. I does not exists in BSC_SYS_MEASURES .' ;
219           FOR bsc_m_cd IN c_measure    LOOP
220             l_not_found_msg3 := NULL;
221             put_line(getMargin('.', g_margin+8)||'SHORT_NAME is          <'||bsc_m_cd.SHORT_NAME  ||'> ' );
222             put_line(getMargin('.', g_margin+8)||'MEASURE_COL is         <'||bsc_m_cd.MEASURE_COL  ||'> ' );
223             put_line(getMargin('.', g_margin+8)||'SOURCE is              <'||bsc_m_cd.SOURCE  ||'> ' );
224           END LOOP;
225           IF (l_not_found_msg3 IS NOT NULL) THEN
226             put_line(l_not_found_msg3);
227           END IF;
228         END IF;
229       END LOOP;
230       IF (l_not_found_msg2 IS NOT NULL) THEN
231           put_line(l_not_found_msg2);
232       END IF;
233     END LOOP;
234     IF (l_not_found_msg IS NOT NULL) THEN
235         put_line(l_not_found_msg);
236     END IF;
237 
238 EXCEPTION
239     WHEN OTHERS THEN
240         put_line(' Error Running BSC_METADATA_DESC.Describe_kpi_DataSeries ');
241         put_line(SQLERRM||' ');
242         raise;
243 
244 END Describe_kpi_DataSeries;
245 
246 PROCEDURE Describe_kpi(
247  p_kpi_id              IN      NUMBER
248 ) IS
249 -- DECLARE
250     l_KPI_Exception              EXCEPTION;
251     l_error_msg                  VARCHAR2(32000);
252     l_not_found_msg              VARCHAR2(2000);
253     l_not_found_msg2             VARCHAR2(2000);
254     l_not_found_msg3             VARCHAR2(2000);
255 
256     l_not_Analysis_Options0_msg   VARCHAR2(2000);
257     l_not_Analysis_Options1_msg   VARCHAR2(2000);
258     l_not_Analysis_Options2_msg   VARCHAR2(2000);
259     l_not_Data_Series_msg        VARCHAR2(2000);
260     l_not_DataSets_msg           VARCHAR2(2000);
261     l_not_Measures_msg           VARCHAR2(2000);
262 
263     l_database            VARCHAR2(100);
264     l_Kpi_Id              NUMBER;
265     l_kpi_group_id        NUMBER;
266     l_Dim_set_Id          NUMBER;
267     l_Dim_Id              NUMBER;
268     l_Dim_Obj_Id          NUMBER;
269     l_Analysis_Group_Id   NUMBER;
270     l_Parent_Option_Id    NUMBER;
271     l_Grandparent_Option  NUMBER;
272     l_periodicity_id      NUMBER;
273     l_Dim_combination     VARCHAR2(100);
274 
275     l_Analysis_Group_Rec_tbl    t_Analysis_Group_Rec_tbl;
276     l_Analysis_Group_Rec_Type   Analysis_Group_Rec_Type;
277     l_index                         NUMBER;
278 
279     -------------------------------------
280     CURSOR c_KPI_Info IS
281     SELECT Indicator
282          , Name
283          , Ind_Group_ID
284          , Prototype_Flag
285          , Indicator_Type
286          , Share_Flag
287          , Short_Name
288          , Source_Indicator
289     FROM   BSC_KPIS_VL
290     WHERE  Indicator = l_Kpi_Id;
291     -------------------------------------
292     CURSOR  c_Share_Kpi_Ids IS
293     SELECT  indicator
294           , Name
295           , Short_Name
296     FROM    BSC_KPIS_VL
297     WHERE   Source_Indicator  =  l_Kpi_Id;
298     -------------------------------------
299     CURSOR  c_Tab_Ids IS
300     SELECT TI.TAB_ID, T.NAME
301     FROM  BSC_TAB_INDICATORS TI
302       ,BSC_TABS_VL T
303     WHERE  TI.INDICATOR = l_Kpi_Id
304       AND  T.TAB_ID (+) = TI.TAB_ID;
305     -------------------------------------
306     CURSOR  c_KPI_Group IS
307     SELECT IND_GROUP_ID, NAME, TAB_ID
308      FROM BSC_TAB_IND_GROUPS_VL
309     WHERE IND_GROUP_ID = l_kpi_group_id
310       AND ( TAB_ID = -1 OR TAB_ID IN
311        (SELECT TAB_ID FROM BSC_TAB_INDICATORS  WHERE INDICATOR = l_Kpi_Id));
312     -------------------------------------
313     CURSOR  c_KPI_Responsibilities IS
314     SELECT K.RESPONSIBILITY_ID, R.RESPONSIBILITY_NAME
315      FROM BSC_USER_KPI_ACCESS K,
316           BSC_RESPONSIBILITY_VL R
317      WHERE K.INDICATOR = l_Kpi_Id
318           AND K.RESPONSIBILITY_ID =  R.RESPONSIBILITY_ID (+);
319     -------------------------------------
320     CURSOR  c_KPI_Dim_sets IS
321      SELECT  DIM_SET_ID, NAME
322      FROM BSC_KPI_DIM_SETS_VL
323      WHERE INDICATOR = l_Kpi_Id;
324     -------------------------------------
325     CURSOR  c_KPI_Dimensions IS
326      SELECT A.Name, A.Short_Name, B.Dim_Group_Id
327         FROM   BSC_SYS_DIM_GROUPS_VL A
328             ,  BSC_KPI_DIM_GROUPS    B
329         WHERE  A.Dim_Group_Id   (+) = B.Dim_Group_Id
330         AND    B.Indicator          = l_Kpi_Id
331         AND    B.Dim_Set_Id         = l_Dim_set_Id;
332     -------------------------------------
333      CURSOR  c_KPI_Dim_obj IS
334      SELECT * FROM (
335       SELECT A.Name, A.Short_Name, A.Dim_Level_Id, A.Source, B.Level_Table_Name
336          ,B.LEVEL_VIEW_NAME, B.LEVEL_PK_COL, B.DIM_LEVEL_INDEX
337       FROM   BSC_SYS_DIM_LEVELS_VL  A
338          ,  BSC_KPI_DIM_LEVELS_VL  B
339          ,  BSC_SYS_DIM_LEVELS_BY_GROUP C
340       WHERE  A.Level_Table_Name (+) = B.Level_Table_Name
341       AND    C.dim_level_id = nvl(A.dim_level_id, C.dim_level_id)
342       AND    B.Indicator            = l_Kpi_Id
343       AND    B.Dim_Set_Id           = l_Dim_set_Id
344       AND    nvl(C.Dim_Group_Id, l_dim_id )  = l_dim_id
345      )
346      ORDER BY DIM_LEVEL_INDEX;
347     -------------------------------------
348      CURSOR  c_KPI_Analysis_Groups IS
349      SELECT ANALYSIS_GROUP_ID, DEPENDENCY_FLAG, CHANGE_DIM_SET
350      FROM BSC_KPI_ANALYSIS_GROUPS
351      WHERE INDICATOR = l_Kpi_Id;
352     -------------------------------------
353      CURSOR  c_KPI_Analysis_Options0 IS
354      SELECT A.ANALYSIS_GROUP_ID, A.OPTION_ID, A.NAME, A.DIM_SET_ID
355      FROM BSC_KPI_ANALYSIS_OPTIONS_VL A
356      WHERE A.INDICATOR            = l_Kpi_Id
357      AND A.ANALYSIS_GROUP_ID      = 0
358      AND A.PARENT_OPTION_ID       = 0
359      AND A.GRANDPARENT_OPTION_ID  = 0
360      ORDER BY OPTION_ID;
361 
362      CURSOR  c_KPI_Analysis_Options1 IS
363      SELECT A.ANALYSIS_GROUP_ID, A.OPTION_ID, A.NAME, A.DIM_SET_ID
364      FROM BSC_KPI_ANALYSIS_OPTIONS_VL A
365      WHERE A.INDICATOR            = l_Kpi_Id
366      AND A.ANALYSIS_GROUP_ID      = 1
367      AND A.PARENT_OPTION_ID       = l_Parent_Option_Id
368      AND A.GRANDPARENT_OPTION_ID  = 0
369      ORDER BY OPTION_ID;
370 
371      CURSOR  c_KPI_Analysis_Options2 IS
372      SELECT A.ANALYSIS_GROUP_ID, A.OPTION_ID, A.NAME, A.DIM_SET_ID
373      FROM BSC_KPI_ANALYSIS_OPTIONS_VL A
374      WHERE A.INDICATOR            = l_Kpi_Id
375      AND A.ANALYSIS_GROUP_ID      = 2
376      AND A.PARENT_OPTION_ID       = l_Parent_Option_Id
377      AND A.GRANDPARENT_OPTION_ID  = l_Grandparent_Option
378      ORDER BY OPTION_ID;
379     ------------------------------------
380 /*   data series, Data sets, Measures see procedure
381      Describe_kpi_Dataseries
382 */
383     -------------------------------------
384      CURSOR  c_KPI_Periodicities IS
385      SELECT PERIODICITY_ID, DISPLAY_ORDER, CURRENT_PERIOD, TARGET_LEVEL
386      FROM BSC_KPI_PERIODICITIES A
387      WHERE INDICATOR =  l_Kpi_Id;
388 
389      CURSOR  c_SYS_Periodicity IS
390      SELECT A.NAME, A.PERIODICITY_TYPE, A.PERIOD_TYPE_ID, A.RECORD_TYPE_ID
391       ,  A.CALENDAR_ID
392       ,  B.NAME CALENDAR_NAME , B.FISCAL_YEAR
393      FROM BSC_SYS_PERIODICITIES_VL  A
394         , BSC_SYS_CALENDARS_VL     B
395      WHERE  A.CALENDAR_ID (+)  = B.CALENDAR_ID
396        AND A.PERIODICITY_ID =  l_periodicity_id;
397 
398     -------------------------------------
399      CURSOR  c_KPI_Calculations IS
400      SELECT A.CALCULATION_ID, B.MEANING AS NAME
401             ,A.USER_LEVEL0, A.USER_LEVEL1, A.DEFAULT_VALUE
402      FROM BSC_LOOKUPS B
403          ,BSC_KPI_CALCULATIONS A
404      WHERE B.LOOKUP_TYPE = 'BSC_CALCULATION'
405        AND A.INDICATOR = l_Kpi_Id
406        AND NVL(TO_NUMBER(B.LOOKUP_CODE), A.CALCULATION_ID )  = A.CALCULATION_ID;
407     -------------------------------------
408      CURSOR  c_KPI_Properties IS
409      SELECT PROPERTY_CODE, PROPERTY_VALUE, SECONDARY_VALUE
410      FROM BSC_KPI_PROPERTIES
411      WHERE INDICATOR = l_Kpi_Id;
412     -------------------------------------
413      CURSOR  c_KPI_Data_Tables IS
414      SELECT PERIODICITY_ID, DIM_SET_ID, LEVEL_COMB
415       ,TABLE_NAME, FILTER_CONDITION, MV_NAME, PROJECTION_SOURCE
416       ,DATA_SOURCE, SQL_STMT,PROJECTION_DATA
417      FROM BSC_KPI_DATA_TABLES
418      WHERE INDICATOR =  l_Kpi_Id
419      ORDER BY PERIODICITY_ID, DIM_SET_ID, LEVEL_COMB ;
420     -------------------------------------
421 
422      -- invalide DIM Set ids in table BSC_KPI_DIM_GROUPS
423      CURSOR  c_invalide_dim_sets1 IS
424      SELECT DISTINCT K.DIM_SET_ID
425         FROM   BSC_KPI_DIM_GROUPS K
426         WHERE  K.Indicator          = l_Kpi_Id
427           AND  K.Dim_Set_Id         NOT IN (
428              SELECT  DIM_SET_ID
429              FROM BSC_KPI_DIM_SETS_VL
430              WHERE INDICATOR = l_Kpi_Id
431           );
432 
433 BEGIN
434     l_Kpi_Id  := p_kpi_id;
435     put_line('****  METADATA DESCRIPTION OBJECTIVE <'||l_Kpi_Id||'> BEGIN HERE  ****');
436     SELECT Name INTO l_database FROM V$DATABASE;
437     l_error_msg := '  Objective ID <'||l_Kpi_Id||'> does not exists in '||l_database||' envionment';
438     --PART 1 OF INFORMATION, get general information from BSC_KPIS_VL table
439     put_line('---------------------------------------------------------------------------');
440     put_line('General Objective Information from BSC_KPIS_VL table');
441     put_line('---------------------------------------------------------------------------');
442     FOR bsc_cd IN c_KPI_Info LOOP
443         l_error_msg := NULL;
444         put_line('-> INDICATOR (Objective Id) is   <'||bsc_cd.INDICATOR||'>');
445         put_line('.... NAME (Objective Name) is    <'||bsc_cd.NAME||'>');
446         put_line('.... IND_GROUP_ID is             <'||bsc_cd.IND_GROUP_ID||'>');
447         put_line('.... PROTOTYPE_FLAG is           <'||bsc_cd.PROTOTYPE_FLAG||'>');
448         put_line('.... INDICATOR_TYPE is           <'||bsc_cd.INDICATOR_TYPE||'>');
449         IF (bsc_cd.Share_Flag = 1) THEN
450          put_line('.... SHARE_FLAG is           <'||bsc_cd.SHARE_FLAG||'>' ||' <- (This is a Master KPI)' );
451         ELSE
452          put_line('.... SHARE_FLAG is           <'||bsc_cd.SHARE_FLAG||'>' ||' <- (This is a Shared KPI)' );
453          put_line('.... SOURCE_INDICATOR is     <'||bsc_cd.SOURCE_INDICATOR||'>'  );
454         END IF;
455         put_line('.... SHORT_NAME is           <'||bsc_cd.SHORT_NAME||'>');
456         l_kpi_group_id :=bsc_cd.Ind_Group_ID;
457     END LOOP;
458     IF (l_error_msg IS NOT NULL) THEN
459         RAISE l_KPI_Exception;
460     END IF;
461 
462     l_not_found_msg := '  There is not any Shared Objective';
463     put_line('---------------------------------------------------------------------------');
464     put_line('Shared Objectives Associated with Objective <'|| l_Kpi_Id||'> :');
465     put_line('---------------------------------------------------------------------------');
466     FOR bsc_cd1 IN c_Share_Kpi_Ids LOOP
467         l_not_found_msg := null;
468         put_line('-> INDICATOR <'||TO_CHAR(bsc_cd1.Indicator)||'>  NAME <'||bsc_cd1.Name||'>  Short Name <'||bsc_cd1.Short_Name||'>');
469     END LOOP;
470     IF (l_not_found_msg IS NOT NULL) THEN
471         put_line(l_not_found_msg);
472     END IF;
473 
474     l_not_found_msg := '   Objective <'||l_Kpi_Id||'>  is not associated to any Scorecard ';
475     put_line('---------------------------------------------------------------------------');
479         l_not_found_msg := NULL;
476     put_line('Scorecard Information from BSC_TAB_INDICATORS and BSC_TABS_VL table');
477     put_line('---------------------------------------------------------------------------');
478     FOR bsc_cd IN c_Tab_Ids LOOP
480         put_line('-> TAB_ID (Scorecard Id) is <'||bsc_cd.TAB_ID||'>');
481         put_line('.... NAME <'||bsc_cd.NAME||'>');
482         IF bsc_cd.NAME IS NULL THEN
483            put_line('.... ERROR. Objective assigned to a not existing Scorecard. TAB_ID <'||bsc_cd.TAB_ID||'> does not exist ' );
484         END IF;
485     END LOOP;
486     IF (l_not_found_msg IS NOT NULL) THEN
487         put_line(l_not_found_msg);
488     END IF;
489 
490     l_not_found_msg := 'ERROR. Objective Id <'||l_Kpi_Id||'> is assigned to a not existing Objective Group ID (IND_GROUP_ID)in table BSC_KPIS_B. Objective Group Id does not exist in BSC_TAB_IND_GROUPS_VL ';
491     put_line('---------------------------------------------------------------------------');
492     put_line('Objective Group Information from BSC_TAB_IND_GROUPS_VL table:');
493     put_line('---------------------------------------------------------------------------');
494     FOR bsc_cd IN c_KPI_Group LOOP
495         l_not_found_msg := NULL;
496         put_line('-> IND_GROUP_ID (Objective Group ID) is <'||bsc_cd.IND_GROUP_ID||'>');
497         put_line('.... NAME is                            <'||bsc_cd.NAME||'>');
498         put_line('.... TAB_ID (Scorecard ID) is            <'||bsc_cd.TAB_ID||'>');
499     END LOOP;
500     IF (l_not_found_msg IS NOT NULL) THEN
501         put_line(l_not_found_msg);
502     END IF;
503 
504     l_not_found_msg := '  ERROR. Objective ID <'||l_Kpi_Id||'> is not assigned to any Responsibility';
505     put_line('---------------------------------------------------------------------------');
506     put_line('Objective Responsibilities from BSC_USER_KPI_ACCESS table: ');
507     put_line('---------------------------------------------------------------------------');
508     FOR bsc_cd IN c_KPI_Responsibilities LOOP
509         l_not_found_msg := NULL;
510         put_line('-> RESPONSIBILITY_ID is <'||bsc_cd.RESPONSIBILITY_ID||'>');
511         IF bsc_cd.RESPONSIBILITY_NAME IS NOT NULL THEN
512            put_line('.... RESPONSIBILITY_NAME  <'||bsc_cd.RESPONSIBILITY_NAME||'>');
513         ELSE
514            put_line('.... ERROR. Objective Responsibility ID <'||bsc_cd.RESPONSIBILITY_ID||'> is invalide. Not found in BSC_RESPONSIBILITY_VL.' );
515         END IF;
516     END LOOP;
517     IF (l_not_found_msg IS NOT NULL) THEN
518         put_line(l_not_found_msg);
519     END IF;
520 
521     --PART 2 OF INFORMATION, get information about dimension sets from BSC_KPI_DIM_SETS_VL table
522     l_not_found_msg := ' There is not Dimension Sets defined in  BSC_KPI_DIM_SETS_VL table ';
523     put_line('---------------------------------------------------------------------------');
524     put_line('Objective Dimension Sets Information from BSC_KPI_DIM_SETS_VL table:');
525     put_line('---------------------------------------------------------------------------');
526     FOR bsc_cd IN c_KPI_Dim_sets LOOP
527       l_not_found_msg := NULL;
528       put_line('-> DIM_SET_ID (Dimension Set Id) is    <'||bsc_cd.DIM_SET_ID||'>');
529       put_line('.... NAME (Dimension Set Name) is      <'||bsc_cd.NAME||'>');
530       --PART 3 OF INFORMATION, get information about dimensions within KPI's Dimension Set in table BSC_KPI_DIM_GROUPS
531       l_dim_set_id := bsc_cd.DIM_SET_ID;
532       FOR bsc_dim_cd IN c_KPI_Dimensions LOOP
533         IF bsc_dim_cd.Name IS NOT NULL THEN
534           put_line('---> DIM_GROUP_ID (Dimension Id) is   <'||bsc_dim_cd.DIM_GROUP_ID||'> ');
535           put_line('...... NAME (Dimension Name) is       <'||bsc_dim_cd.NAME||'>');
536           put_line('...... SHORT_NAME           is        <'||bsc_dim_cd.SHORT_NAME||'>');
537           --PART 4 OF INFORMATION, get information about dimension objects within KPI's Dimension Set in table BSC_KPI_DIM_LEVELS_VL
538           l_dim_id := bsc_dim_cd.Dim_Group_Id;
539           FOR bsc_dim_obj_cd IN c_KPI_Dim_obj LOOP
540             IF bsc_dim_obj_cd.Dim_Level_Id IS NOT NULL THEN
541               put_line('-----> DIM_LEVEL_ID (Dim. Object Id)is  <'||bsc_dim_obj_cd.DIM_LEVEL_ID||'> ');
542               put_line('........ NAME (Dim. Object Name) is     <'||bsc_dim_obj_cd.NAME||'>');
543               put_line('........ SHORT_NAME is                  <'||bsc_dim_obj_cd.SHORT_NAME||'>');
544               put_line('........ LEVEL_TABLE_NAME is            <'||bsc_dim_obj_cd.LEVEL_TABLE_NAME||'>');
545               put_line('........ LEVEL_VIEW_NAME is             <'||bsc_dim_obj_cd.LEVEL_VIEW_NAME||'>');
546               put_line('........ LEVEL_PK_COL is                <'||bsc_dim_obj_cd.LEVEL_PK_COL||'>');
547               put_line('........ DIM_LEVEL_INDEX is             <'||bsc_dim_obj_cd.DIM_LEVEL_INDEX||'>');
548             ELSE
549               put_line('-----> DIM_LEVEL_INDEX is               <'||bsc_dim_obj_cd.DIM_LEVEL_INDEX||'>');
550               put_line('........ LEVEL_TABLE_NAME is            <'||bsc_dim_obj_cd.LEVEL_TABLE_NAME||'>');
551               put_line('........ Error. LEVEL_TABLE_NAME <'||bsc_dim_obj_cd.Level_Table_Name||'> is invalide in table BSC_KPI_DIM_LEVELS_VL'  );
552             END IF;
553           END LOOP;
554         ELSE
555           put_line('---> DIM_GROUP_ID (Dimension Id) is  <'||bsc_dim_cd.DIM_GROUP_ID||'> ');
556           put_line('....... Error: Invalid Dimension Id  <'||bsc_dim_cd.Dim_Group_Id||'> found in table BSC_KPI_DIM_GROUPS'  );
557         END IF;
558       END LOOP;
559     END LOOP;
560     IF (l_not_found_msg IS NOT NULL) THEN
561         put_line(l_not_found_msg);
562     END IF;
563     --PART 5 OF INFORMATION
564 
565     l_Analysis_Group_Rec_Type.DEPENDENCY_FLAG := 0;
566     l_Analysis_Group_Rec_Type.CHANGE_DIM_SET := NULL;
567     l_Analysis_Group_Rec_tbl(0) := l_Analysis_Group_Rec_Type;
568     l_Analysis_Group_Rec_tbl(1) := l_Analysis_Group_Rec_Type;
569     l_Analysis_Group_Rec_tbl(2) := l_Analysis_Group_Rec_Type;
570 
571     -------------- Analsysis Groups General Information.
572     l_not_found_msg := '  There is not any Analysis Group defined in table BSC_KPI_ANALYSIS_GROUPS';
573     put_line('---------------------------------------------------------------------------');
574     put_line('Objective Id <'||l_Kpi_Id||'> Analysis Groups (KPI Groups) Definition:');
575     put_line('---------------------------------------------------------------------------');
576     FOR bsc_AG_cd IN c_KPI_Analysis_Groups  LOOP
577       l_not_found_msg := NULL;
578       put_line('-> ANALYSIS_GROUP_ID is  <'||bsc_AG_cd.ANALYSIS_GROUP_ID ||'> ' );
579       put_line('... DEPENDENCY_FLAG is  <'||bsc_AG_cd.DEPENDENCY_FLAG ||'> ' );
580       put_line('... CHANGE_DIM_SET is   <'||bsc_AG_cd.CHANGE_DIM_SET ||'> ' );
581 
582       l_Analysis_Group_Rec_Type.DEPENDENCY_FLAG := bsc_AG_cd.DEPENDENCY_FLAG;
583       l_Analysis_Group_Rec_Type.CHANGE_DIM_SET := bsc_AG_cd.CHANGE_DIM_SET;
584        l_Analysis_Group_Rec_tbl(bsc_AG_cd.ANALYSIS_GROUP_ID) := l_Analysis_Group_Rec_Type;
585 
586     END LOOP;
587     IF (l_not_found_msg IS NOT NULL) THEN
588         put_line(l_not_found_msg);
589     END IF;
590 
591     -----------Analysis Options Structur
592     put_line('---------------------------------------------------------------------------');
593     put_line('Objective ID <'||l_Kpi_Id||'> Analysis Options (KPIs) - Datasets - Measures - Dim. Sets ');
594     put_line('---------------------------------------------------------------------------');
595     l_not_Analysis_Options0_msg := 'Objective Id <'||l_Kpi_Id||'> does not have any Analysis Option Defined for Group ID <0>  IN Table BSC_KPI_ANALYSIS_OPTIONS_VL';
596     FOR bsc_AO0_cd IN c_KPI_Analysis_Options0   LOOP
597       l_not_Analysis_Options0_msg := NULL;
601        put_line('.... DIM_SET_ID is   <'||bsc_AO0_cd.DIM_SET_ID ||'> ' );
598       put_line('-> ANALYSIS_GROUP_ID <'||bsc_AO0_cd.ANALYSIS_GROUP_ID ||'> - OPTION_ID <'||bsc_AO0_cd.OPTION_ID ||'> '  );
599       put_line('.... NAME is  <'||bsc_AO0_cd.NAME ||'> ' );
600       IF l_Analysis_Group_Rec_tbl(0).CHANGE_DIM_SET = 1 THEN
602       END IF;
603       -----------Analysis Options 1
604       l_not_Analysis_Options1_msg := 'Objective Id <'||l_Kpi_Id||'> does not have any Analysis Option Defined for Group ID <1>  IN Table BSC_KPI_ANALYSIS_OPTIONS_VL';
605       IF l_Analysis_Group_Rec_tbl(1).DEPENDENCY_FLAG = 1  THEN
606           l_Parent_Option_Id :=  bsc_AO0_cd.OPTION_ID;
607       ELSE
608           l_Parent_Option_Id :=  0;
609       END IF;
610       FOR bsc_AO1_cd IN c_KPI_Analysis_Options1   LOOP
611         l_not_Analysis_Options1_msg := NULL;
612         put_line('---> ANALYSIS_GROUP_ID <'||bsc_AO1_cd.ANALYSIS_GROUP_ID ||'> - OPTION_ID <'||bsc_AO1_cd.OPTION_ID ||'> '  );
613         put_line('...... NAME is  <'||bsc_AO1_cd.NAME ||'> ' );
614         IF l_Analysis_Group_Rec_tbl(1).CHANGE_DIM_SET = 1 THEN
615          put_line('..... DIM_SET_ID is   <'||bsc_AO1_cd.DIM_SET_ID ||'> ' );
616         END IF;
617         -----------Analysis Options 2
618         l_not_Analysis_Options2_msg := 'Objective Id <'||l_Kpi_Id||'> does not have any Analysis Option Defined for Group ID <2>  IN Table BSC_KPI_ANALYSIS_OPTIONS_VL';
619         IF l_Analysis_Group_Rec_tbl(2).DEPENDENCY_FLAG = 1  THEN
620            l_Parent_Option_Id :=  bsc_AO1_cd.OPTION_ID;
621         ELSE
622            l_Parent_Option_Id :=  0;
623         END IF;
624         IF l_Analysis_Group_Rec_tbl(1).DEPENDENCY_FLAG = 1  THEN
625            l_Grandparent_Option :=  bsc_AO0_cd.OPTION_ID;
626         ELSE
627            l_Grandparent_Option :=  0;
628         END IF;
629         FOR bsc_AO2_cd IN c_KPI_Analysis_Options2   LOOP
630           l_not_Analysis_Options2_msg := NULL;
631           put_line('-----> ANALYSIS_GROUP_ID <'||bsc_AO2_cd.ANALYSIS_GROUP_ID ||'> - OPTION_ID <'||bsc_AO2_cd.OPTION_ID ||'> '  );
632           put_line('........ NAME is  <'||bsc_AO2_cd.NAME ||'> ' );
633           IF l_Analysis_Group_Rec_tbl(2).CHANGE_DIM_SET = 1 THEN
634            put_line('........ DIM_SET_ID is   <'||bsc_AO2_cd.DIM_SET_ID ||'> ' );
635           END IF;
636           g_margin := 8;
637           Describe_kpi_DataSeries (
638                p_kpi_id               => l_kpi_id
639                ,p_Anaysis_option0     => bsc_AO0_cd.OPTION_ID
640                ,p_Anaysis_option1     => bsc_AO1_cd.OPTION_ID
641                ,p_Anaysis_option2     => bsc_AO2_cd.OPTION_ID
642           );
643         END LOOP;
644         IF (l_not_Analysis_Options2_msg IS NOT NULL) THEN
645            -- put_line(l_not_Analysis_Options1_msg);
646           g_margin := 6;
647           Describe_kpi_DataSeries (
648                p_kpi_id               => l_kpi_id
649                ,p_Anaysis_option0     => bsc_AO0_cd.OPTION_ID
650                ,p_Anaysis_option1     => bsc_AO1_cd.OPTION_ID
651                ,p_Anaysis_option2     => 0
652           );
653          END IF;
654       END LOOP;
655       IF (l_not_Analysis_Options1_msg IS NOT NULL) THEN
656         --put_line(l_not_Analysis_Options1_msg);
657         g_margin := 4;
658         Describe_kpi_DataSeries (
659              p_kpi_id               => l_kpi_id
660              ,p_Anaysis_option0     => bsc_AO0_cd.OPTION_ID
661              ,p_Anaysis_option1     => 0
662              ,p_Anaysis_option2     => 0
663         );
664      END IF;
665     END LOOP;
666     IF (l_not_Analysis_Options0_msg IS NOT NULL) THEN
667       put_line(l_not_Analysis_Options0_msg);
668     END IF;
669 
670     -------------- kpi Periodicites Information.
671     l_not_found_msg := '  There is not any Periodicity defined in table BSC_KPI_PERIODICITIES ';
672     put_line('---------------------------------------------------------------------------');
673     put_line('Objective ID <'||l_Kpi_Id||'> Periodicities: ');
674     put_line('---------------------------------------------------------------------------');
675     FOR bsc_cd IN c_KPI_Periodicities   LOOP
676       l_not_found_msg := NULL;
677       put_line('-> PERIODICITY_ID is  <'||bsc_cd.PERIODICITY_ID ||'> ' );
678     -------------- Sys Periodicites Information.
679       l_periodicity_id := bsc_cd.PERIODICITY_ID;
680       l_not_found_msg2 := '--> ERROR. Objective ID <' ||l_Kpi_Id || '> assigned to invalide periodicity in table BSC_KPI_PERIODICITIES.  Periodicity Id <' ||l_periodicity_id  || '> not exitst in table BSC_SYS_PERIODICITIES_VL' ;
681       FOR bsc_Per_cd IN c_SYS_Periodicity   LOOP
682         l_not_found_msg2 := NULL;
683         put_line('.... PERIODICITY_NAME is  <'||bsc_Per_cd.NAME ||'> ' );
684         put_line('.... PERIODICITY_TYPE is  <'||bsc_Per_cd.PERIODICITY_TYPE ||'> ' );
685         put_line('.... PERIOD_TYPE_ID is  <'||bsc_Per_cd.PERIOD_TYPE_ID  ||'> ' );
686         put_line('.... RECORD_TYPE_ID is  <'||bsc_Per_cd.RECORD_TYPE_ID ||'> ' );
687         put_line('.... CALENDAR_ID is  <'||bsc_Per_cd.CALENDAR_ID ||'> ' );
688         IF bsc_Per_cd.CALENDAR_NAME IS NOT NULL THEN
689            put_line('...... CALENDAR_NAME is  <'||bsc_Per_cd.CALENDAR_NAME  ||'> ' );
690            put_line('...... FISCAL_YEAR is  <'||bsc_Per_cd.FISCAL_YEAR  ||'> ' );
691         ELSE
692            put_line('...... ERROR. Periodicity Id <'||l_periodicity_id||'> assigned to a invalide Calendar Id in table BSC_SYS_PERIODICITIES_VL . Calendar Id <' ||  bsc_Per_cd.CALENDAR_ID || '> does not exists IN TABLE BSC_SYS_CALENDARS_VL. ' );
693         END IF;
694       END LOOP;
695       IF (l_not_found_msg2 IS NOT NULL) THEN
696           put_line(l_not_found_msg2);
697       END IF;
698       put_line('.. CURRENT_PERIOD,  is  <'||bsc_cd.CURRENT_PERIOD  ||'> ' );
699       put_line('.. TARGET_LEVEL is   <'||bsc_cd.TARGET_LEVEL ||'> ' );
700     END LOOP;
701     IF (l_not_found_msg IS NOT NULL) THEN
702         put_line(l_not_found_msg);
703     END IF;
707     put_line('---------------------------------------------------------------------------');
704 
705     --- kpi Calculations ------------------------------------------------------------
706     l_not_found_msg := '  There is not any Calculations Metadata defined in table BSC_KPI_CALCULATIONS';
708     put_line('Objective ID <'||l_Kpi_Id||'> Calculations Definition: ');
709     put_line('---------------------------------------------------------------------------');
710     FOR bsc_cd IN c_KPI_Calculations LOOP
711         l_not_found_msg := NULL;
712         put_line('-> CALCULATION_ID is      <'||bsc_cd.CALCULATION_ID||'>' );
713         put_line('.... NAME is              <'||bsc_cd.NAME|| '>' );
714         put_line('.... DEFAULT_VALUE is     <'||bsc_cd.DEFAULT_VALUE|| '>' );
715 
716     END LOOP;
717     IF (l_not_found_msg IS NOT NULL) THEN
718         put_line(l_not_found_msg);
719     END IF;
720 
721     --- kpi Properties -------------------------------------------------------
722     l_not_found_msg := '  There is not any KPI Properties defined in table BSC_KPI_PROPERTIES';
723     put_line('---------------------------------------------------------------------------');
724     put_line('Objective ID <'||l_Kpi_Id||'> Properties from table BSC_KPI_PROPERTIES ');
725     put_line('---------------------------------------------------------------------------');
726     FOR bsc_cd IN c_KPI_Properties LOOP
727         l_not_found_msg := NULL;
728         put_line('-> PROPERTY_CODE is       <'||bsc_cd.PROPERTY_CODE||'>' );
729         put_line('.... PROPERTY_VALUE is    <'||bsc_cd.PROPERTY_VALUE||'>' );
730         put_line('.... SECONDARY_VALUE is   <'||bsc_cd.SECONDARY_VALUE||'>' );
731     END LOOP;
732     IF (l_not_found_msg IS NOT NULL) THEN
733         put_line(l_not_found_msg);
734     END IF;
735 
736     --- kpi Data Tables Definition--------------------------------------------
737     l_not_found_msg := '  There is not any Data Table Defined in table c_KPI_Data_Tables';
738     put_line('---------------------------------------------------------------------------');
739     put_line('Objective ID <'||l_Kpi_Id||'>  Data Tables Definition: ');
740     put_line('---------------------------------------------------------------------------');
741 
742     l_periodicity_id := -999;
743     FOR bsc_cd IN c_KPI_Data_Tables LOOP
744         l_not_found_msg := NULL;
745         IF  bsc_cd.PERIODICITY_ID <> l_periodicity_id then
746          put_line('-> PERIODICITY_ID is       <'||bsc_cd.PERIODICITY_ID||'>' );
747          l_periodicity_id :=  bsc_cd.PERIODICITY_ID;
748          l_Dim_set_Id  := -999;
749         END IF;
750         IF bsc_cd.DIM_SET_ID <> l_Dim_set_Id then
751          put_line('--> DIM_SET_ID is          <'||bsc_cd.DIM_SET_ID||'>' );
752          l_Dim_set_Id := bsc_cd.DIM_SET_ID;
753          l_Dim_combination := '-999';
754         END IF;
755         IF  bsc_cd.LEVEL_COMB <> l_Dim_combination then
756          put_line('-----> LEVEL_COMB is       <'||bsc_cd.LEVEL_COMB||'>' );
757          l_Dim_combination := bsc_cd.LEVEL_COMB;
758         END IF;
759         put_line('........ TABLE_NAME is        <'||bsc_cd.TABLE_NAME||'>' );
760         put_line('........ MV_NAME is           <'||bsc_cd.MV_NAME||'>' );
761         put_line('........ FILTER_CONDITION is  <'||bsc_cd.FILTER_CONDITION||'>' );
762         put_line('........ PROJECTION_SOURCE is <'||bsc_cd.PROJECTION_SOURCE||'>' );
763         put_line('........ DATA_SOURCE is       <'||bsc_cd.DATA_SOURCE||'>' );
764         put_line('........ SQL_STMT is          <'||bsc_cd.SQL_STMT||'>' );
765         put_line('........ PROJECTION_DATA is   <'||bsc_cd.PROJECTION_DATA||'>' );
766     END LOOP;
767     IF (l_not_found_msg IS NOT NULL) THEN
768         put_line(l_not_found_msg);
769     END IF;
770 
771     --PART 6 OF INFORMATION INVALIDE METADATA
772     l_not_found_msg := '  Invalide Metadata not found.';
773     put_line('---------------------------------------------------------------------------');
774     put_line('Objective ID <'||l_Kpi_Id||'> Additional Invalide KPI Metadata: ');
775     put_line('---------------------------------------------------------------------------');
776     FOR bsc_cd IN c_invalide_dim_sets1 LOOP
777         l_not_found_msg := NULL;
778         put_line('  Invalide Dimension Set ID <'||bsc_cd.DIM_SET_ID||'> in BSC_KPI_DIM_GROUPS table ' );
779     END LOOP;
780     IF (l_not_found_msg IS NOT NULL) THEN
781         put_line(l_not_found_msg);
782     END IF;
783 
784     put_line('****  METADATA DESCRIPTION OBJECTIVE <'||l_Kpi_Id||'> END  HERE  ****');
785 
786 
787 EXCEPTION
788     WHEN l_KPI_Exception THEN
789         put_line('Error Running BSC_METADATA_DESC.Describe_kpi');
790         put_line(l_error_msg);
791         put_line('**** INDICATOR DETAILS ENDS HERE ****');
792     WHEN OTHERS THEN
793         put_line('Error Running BSC_METADATA_DESC.Describe_kpi');
794         put_line(SQLERRM||' <'||l_error_msg||'>');
795         put_line('**** INDICATOR DETAILS ENDS HERE ****');
796 --END;
797 --/
798 END Describe_kpi;
799 
800 /*===========================================================================+
801 | PROCEDURE Run_Concurrent_ARU_Files
802 +============================================================================*/
803 PROCEDURE Run_Concurrent_Describe_kpi (
804     ERRBUF     OUT NOCOPY VARCHAR2
805 	,RETCODE    OUT NOCOPY VARCHAR2
806     ,p_kpi_id   IN         NUMBER
807 ) IS
808 
809 BEGIN
810 
811   Describe_kpi(p_kpi_id);
812 
813 EXCEPTION
814     WHEN OTHERS THEN
815         put_line('Error at BSC_METADATA_DESC.Run_Concurrent_Describe_kpi');
816         put_line('ERRBUF: ' || SQLERRM);
817         ERRBUF := SQLERRM;
818         RETCODE := 2; -- Request completed with errors
819 
820 END Run_Concurrent_Describe_kpi;
821 
822 /*------------------------------------------------------------------------------------------
823 -- ClearMessages:  This procedure delete all row of metadata description from
824     the table BSC_MESSAGE_LOGS that had been created by the currrent session.
825     Additional delete all metadata description not created in the current day
826 -------------------------------------------------------------------------------------------*/
827 PROCEDURE ClearText IS
828   l_session_id  number;
829 BEGIN
830 
831    l_session_id := userenv('SESSIONID');
832 
833    DELETE FROM BSC_MESSAGE_LOGS
834    WHERE SOURCE = G_PKG_NAME
835    AND ( CREATED_BY  = l_session_id
836          OR CREATION_DATE <= (SYSDATE -1)
837         );
838 
839    g_row_num := 0;
840 
841 EXCEPTION
842   WHEN OTHERS THEN
843     raise;
844 END ClearText;
845 
846 /*------------------------------------------------------------------------------
847  getQuery:  This procedure store a row of metadata description the table
848             BSC_MESSAGE_LOGS
849 ------------------------------------------------------------------------------*/
850 FUNCTION getQuery RETURN varchar2 is
851   l_sql varchar2(500);
852   l_session_id  number;
853 BEGIN
854  l_session_id := userenv('SESSIONID');
855 
856 
857 l_sql := '
858    SELECT MESSAGE FROM BSC_MESSAGE_LOGS
859    WHERE SOURCE = ''' || G_PKG_NAME || '''
860       AND CREATED_BY = ' || l_session_id || '
861    ORDER BY LAST_UPDATE_LOGIN ';
862 
863 return l_sql;
864 
865 EXCEPTION
866   WHEN OTHERS THEN
867      raise;
868 
869 END getQuery;
870 /*-------------------------------------------------------------------------------
871   Describe_kpi
872        Get the KPI (objective) information from the me metadata tables and made
873        a description of the objective metadat which is stored temporaty in
874        the database.
875        It return the query needed to get the metadata description
876 -------------------------------------------------------------------------------*/
877 PROCEDURE Describe_kpi(
878   p_kpi_id              IN             NUMBER
879  ,x_query               OUT NOCOPY     varchar2
880  ,x_return_status       OUT NOCOPY     varchar2
881  ,x_msg_count           OUT NOCOPY     number
882  ,x_msg_data            OUT NOCOPY     varchar2
883 ) IS
884 BEGIN
885 
886  x_return_status := FND_API.G_RET_STS_SUCCESS;
887  g_desc_db_flag := true;
888  -- Clear Previous Metadata Description from the database
889  ClearText;
890  -- Process the Kpi Metadata
891  Describe_kpi( p_kpi_id => p_kpi_id);
892  -- Build the query to get the metadata description
893  x_query := getQuery;
894  g_desc_db_flag := false;
895 
896  EXCEPTION
897     WHEN OTHERS THEN
898         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
899         IF (x_msg_data IS NOT NULL) THEN
900             x_msg_data      :=  x_msg_data||' -> BSC_METADATA_DESC.Describe_kpi ';
901         ELSE
902             x_msg_data      :=  SQLERRM||' at BSC_METADATA_DESC.Describe_kpi ';
903         END IF;
904 
905 END Describe_kpi ;
906 
907 End BSC_METADATA_DESC;