DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_DIM_TPLATE

Source


1 PACKAGE BODY BSC_DIM_TPLATE AS
2 /* $Header: BSCUDIMB.pls 120.0 2005/06/01 16:56:48 appldev noship $ */
3 
4 G_Pro_Tbl       BSC_TEMPLATE.Project_Tbl_Type;
5 G_DF_Tbl        BSC_TEMPLATE.Dfamily_Tbl_Type;
6 G_DC_Tbl        BSC_TEMPLATE.Proj_Dim_Cols_Tbl_Type;
7 
8 
9 l_num_acct_type         number := 3;
10 l_num_account           number := 6;
11 l_num_project           number := 12;
12 
13 /*===========================================================================+
14 |
15 |   Name:          Create_Dimensions
16 |
17 |   Description:   To create Accout dimension for P/L KPI
18 |
19 |   History:
20 |       02-APR-1999   Alex Yang             Created.
21 |    12/22/1999   Henry Camacho Modified to Model 4.0
22 +============================================================================*/
23 
24 Function Create_Dimensions
25 Return Boolean
26 Is
27     l_acct_type     BSC_DIM_TPLATE.Acct_Type_Tbl_Type;
28     l_account       BSC_DIM_TPLATE.Acct_Tbl_Type;
29 
30     l_system_type       varchar2(60);
31     is_cross_template   boolean;
32 
33     l_code          number;
34     l_code_name     varchar2(30); -- ADRAO Changed to VARCHAR2(30)
35     l_project_count     number(3);
36 
37     l_count         number;
38     l_cursor        number;
39         l_ignore        number;
40     l_sql_stmt      varchar2(2000);
41     l_debug_stmt        varchar2(2000);
42 
43     l_num_of_levels number;
44     l_num_of_family number;
45     l_object_type      varchar2(30);
46 Begin
47   l_project_count:=0;
48   l_count:=0;
49   l_debug_stmt:='DEBUG: ';
50   l_object_type:= 'BSC_D_TYPE_OF_ACCOUNT';
51   is_cross_template:=FALSE;
52   l_acct_type(0).code  := 0;    l_acct_type(0).name := 'ALL';
53   l_acct_type(1).code  := 1;    l_acct_type(1).name := 'Incomes';
54   l_acct_type(2).code  := 2;    l_acct_type(2).name := 'Expenses';
55   l_acct_type(3).code  := 3;    l_acct_type(3).name := 'Profit';
56 
57   l_account(0).code       := 0;
58   l_account(0).name      := 'ALL';
59   l_account(0).acct_type := 0;
60   l_account(0).position  := 0;
61 
62   l_account(1).code       := 1;
63   l_account(1).name      := 'Sales';
64   l_account(1).acct_type := 1;
65   l_account(1).position  := 1;
66 
67   l_account(2).code       := 2;
68   l_account(2).name      := 'Cost of Sales';
69   l_account(2).acct_type := 2;
70   l_account(2).position  := 2;
71 
72   l_account(3).code       := 3;
73   l_account(3).name      := 'Other Incomes';
74   l_account(3).acct_type := 1;
75   l_account(3).position  := 3;
76 
77   l_account(4).code       := 4;
78   l_account(4).name      := 'Payroll Exp.';
79   l_account(4).acct_type := 2;
80   l_account(4).position  := 4;
81 
82   l_account(5).code       := 5;
83   l_account(5).name      := 'Other Expenses';
84   l_account(5).acct_type := 2;
85   l_account(5).position  := 5;
86 
87   l_account(6).code       := 6;
88   l_account(6).name      := 'Net Profit';
89   l_account(6).acct_type := 3;
90   l_account(6).position  := 6;
91 
92 
93   -- check template type (Tab or Cross)
94   Select PROPERTY_VALUE
95   Into   l_system_type
96   From   BSC_SYS_INIT
97   Where  PROPERTY_CODE = 'MODEL_TYPE';
98 
99   if (l_system_type = '1') then
100      Is_cross_template := TRUE;
101   end if;
102 
103   -- create Account Type dimension table
104   l_object_type := 'BSC_D_TYPE_OF_ACCOUNT';
105   Select count(*)
106   Into   l_count
107   From   USER_OBJECTS
108   Where  OBJECT_NAME = l_object_type;
109 
110   if (l_count <> 0) then
111       l_sql_stmt := 'Drop Table BSC_D_TYPE_OF_ACCOUNT';
112       l_debug_stmt := l_sql_stmt;
113 
114      BSC_APPS.DO_DDL(l_sql_stmt,
115                 ad_ddl.drop_table,
116                 'BSC_D_TYPE_OF_ACCOUNT');
117   end if;
118 
119   l_sql_stmt := 'Create Table BSC_D_TYPE_OF_ACCOUNT ('  ||
120                    'CODE           Number   NOT NULL,'||
121                    'LANGUAGE       Varchar2(4)   NOT NULL,'||
122                    'SOURCE_LANG    Varchar2(4)   NOT NULL,'||
123                    'USER_CODE      Varchar2(5), ' ||
124                    'NAME       Varchar2(20))'||
125                    ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_table_tbs_type)||
126                    ' '||BSC_APPS.bsc_storage_clause;
127 
128   l_debug_stmt := l_sql_stmt;
129 
130   BSC_APPS.DO_DDL(l_sql_stmt,
131                 ad_ddl.create_table,
132                 'BSC_D_TYPE_OF_ACCOUNT');
133 
134 
135   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_D_TYPE_OF_ACCOUNT_U1 ON BSC_D_TYPE_OF_ACCOUNT (CODE,LANGUAGE)'||
136                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_index_tbs_type)||
137                 ' '||BSC_APPS.bsc_storage_clause;
138   l_debug_stmt := l_sql_stmt;
139  BSC_APPS.DO_DDL(l_sql_stmt,
140                 ad_ddl.create_index,
141                 'BSC_D_TYPE_OF_ACCOUNT_U1');
142 
143  --  Create View
144   l_sql_stmt := 'Create or replace view BSC_D_2_VL AS ('  ||
145         ' SELECT CODE,'||
146         ' USER_CODE,'||
147         ' NAME'||
148         ' FROM BSC_D_TYPE_OF_ACCOUNT '||
149         ' WHERE LANGUAGE = userenv(''LANG''))';
150 
151   l_debug_stmt := l_sql_stmt;
152   BSC_APPS.DO_DDL(l_sql_stmt,
153                 ad_ddl.create_view,
154                 'BSC_D_2_VL');
155 
156  --  Create Input table
157   l_object_type := 'BSC_DI_2';
158   Select count(*)
159   Into   l_count
160   From   USER_OBJECTS
161   Where  OBJECT_NAME = l_object_type;
162 
163   if (l_count <> 0) then
164       l_sql_stmt := 'Drop Table BSC_DI_2';
165       l_debug_stmt := l_sql_stmt;
166 
167      BSC_APPS.DO_DDL(l_sql_stmt,
168                 ad_ddl.drop_table,
169                 'BSC_DI_2');
170   end if;
171 
172   l_sql_stmt := 'Create Table BSC_DI_2 ('  ||
173                    'USER_CODE      Varchar2(5), ' ||
174                    'NAME       Varchar2(20))'||
175                    ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_table_tbs_type)||
176                    ' '||BSC_APPS.bsc_storage_clause;
177   l_debug_stmt := l_sql_stmt;
178 
179   BSC_APPS.DO_DDL(l_sql_stmt,
180                 ad_ddl.create_table,
181                 'BSC_DI_2');
182 
183   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_DI_2_U1 ON BSC_DI_2 (USER_CODE)'||
184                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_index_tbs_type)||
185                 ' '||BSC_APPS.bsc_storage_clause;
186   l_debug_stmt := l_sql_stmt;
187   BSC_APPS.DO_DDL(l_sql_stmt,
188                 ad_ddl.create_index,
189                 'BSC_DI_2_U1');
190 
191 
192   -- create Account dimension table
193 
194   l_object_type := 'BSC_D_ACCOUNT';
195   Select count(*)
196   Into   l_count
197   From   USER_OBJECTS
198   Where  OBJECT_NAME = l_object_type;
199 
200   if (l_count <> 0) then
201       l_sql_stmt := 'Drop Table BSC_D_ACCOUNT';
202       l_debug_stmt := l_sql_stmt;
203 
204      BSC_APPS.DO_DDL(l_sql_stmt,
205                 ad_ddl.drop_table,
206                 'BSC_D_ACCOUNT');
207   end if;
208 
209   l_sql_stmt := 'Create Table BSC_D_ACCOUNT ( ' ||
210                     'CODE  Number NOT NULL,' ||
211                     'LANGUAGE       Varchar2(4)   NOT NULL,'||
212                     'SOURCE_LANG    Varchar2(4)   NOT NULL,'||
213                     'USER_CODE Varchar2(5), '  ||
214                     'NAME   Varchar2(20), ' ||
215                     'Typ_of_Acc_Code Number, '    ||
216                     'Typ_of_Acc_Code_Usr Varchar2(5), '  ||
217                     'Position Number(2))'||
218                     ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_table_tbs_type)||
219                     ' '||BSC_APPS.bsc_storage_clause;
220   l_debug_stmt := l_sql_stmt;
221 
222   BSC_APPS.DO_DDL(l_sql_stmt,
223                 ad_ddl.create_table,
224                 'BSC_D_ACCOUNT');
225 
226   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_D_ACCOUNT_U1 ON BSC_D_ACCOUNT (CODE,LANGUAGE)'||
227                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_index_tbs_type)||
228                 ' '||BSC_APPS.bsc_storage_clause;
229   l_debug_stmt := l_sql_stmt;
230  BSC_APPS.DO_DDL(l_sql_stmt,
231                 ad_ddl.create_index,
232                 'BSC_D_ACCOUNT_U1');
233  --  Create View
234   l_sql_stmt := 'Create or replace view BSC_D_0_VL AS ('  ||
235         ' SELECT CODE,'||
236         ' USER_CODE,'||
237         ' NAME,'||
238         ' Typ_of_Acc_Code,'||
239         ' Typ_of_Acc_Code_Usr,'||
240         ' Position'||
241         ' FROM BSC_D_ACCOUNT '||
242         ' WHERE LANGUAGE = userenv(''LANG''))';
243 
244   l_debug_stmt := l_sql_stmt;
245   BSC_APPS.DO_DDL(l_sql_stmt,
246                 ad_ddl.create_view,
247                 'BSC_D_0_VL');
248 
249  --  Create Input table
250   l_object_type := 'BSC_DI_0' ;
251   Select count(*)
252   Into   l_count
253   From   USER_OBJECTS
254   Where  OBJECT_NAME = l_object_type ;
255 
256   if (l_count <> 0) then
257       l_sql_stmt := 'Drop Table BSC_DI_0';
258       l_debug_stmt := l_sql_stmt;
259 
260      BSC_APPS.DO_DDL(l_sql_stmt,
261                 ad_ddl.drop_table,
262                 'BSC_DI_0');
263   end if;
264 
265   l_sql_stmt := 'Create Table BSC_DI_0 ('  ||
266                    'USER_CODE      Varchar2(5), ' ||
267                    'NAME       Varchar2(20), '||
268                    'Typ_of_Acc_Code_Usr Varchar2(5),'||
269                    'Position Number(2))'||
270                    ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_table_tbs_type)||
271                    ' '||BSC_APPS.bsc_storage_clause;
272   l_debug_stmt := l_sql_stmt;
273 
274   BSC_APPS.DO_DDL(l_sql_stmt,
275                 ad_ddl.create_table,
276                 'BSC_DI_0');
277 
278   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_DI_0_U1 ON BSC_DI_0 (USER_CODE)'||
279                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_index_tbs_type)||
280                 ' '||BSC_APPS.bsc_storage_clause;
281   l_debug_stmt := l_sql_stmt;
282   BSC_APPS.DO_DDL(l_sql_stmt,
283                 ad_ddl.create_index,
284                 'BSC_DI_0_U1');
285 
286 
287   -- create Subaccount Type dimension table
288 
289   l_object_type := 'BSC_D_SUBACCOUNT' ;
290   Select count(*)
291   Into   l_count
292   From   USER_OBJECTS
293   Where  OBJECT_NAME = l_object_type ;
294 
295   if (l_count <> 0) then
296       l_sql_stmt := 'Drop Table BSC_D_SUBACCOUNT';
297       l_debug_stmt := l_sql_stmt;
298 
299       BSC_APPS.DO_DDL(l_sql_stmt,
300                 ad_ddl.drop_table,
301                 'BSC_D_SUBACCOUNT');
302   end if;
303 
304   l_sql_stmt := 'Create Table BSC_D_SUBACCOUNT ( ' ||
305                    'CODE    Number NOT NULL,' ||
306                    'LANGUAGE       Varchar2(4)   NOT NULL,'||
307                    'SOURCE_LANG    Varchar2(4)   NOT NULL,'||
308                    'USER_CODE Varchar2(5), '  ||
309                    'NAME Varchar2(20), ' ||
310                    'Account_Code Number, '    ||
311                    'Account_Code_Usr Varchar2(5))'||
312                    ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_table_tbs_type)||
313                    ' '||BSC_APPS.bsc_storage_clause;
314 
315   l_debug_stmt := l_sql_stmt;
316   BSC_APPS.DO_DDL(l_sql_stmt,
317                 ad_ddl.create_table,
318                 'BSC_D_SUBACCOUNT');
319 
320   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_D_SUBACCOUNT_U1 ON BSC_D_SUBACCOUNT (CODE,LANGUAGE)'||
321                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_index_tbs_type)||
322                 ' '||BSC_APPS.bsc_storage_clause;
323   l_debug_stmt := l_sql_stmt;
324 
325   BSC_APPS.DO_DDL(l_sql_stmt,
326         ad_ddl.create_index,
327                 'BSC_D_SUBACCOUNT_U1');
328 
329  --  Create View
330   l_sql_stmt := 'Create or replace view BSC_D_1_VL AS ('  ||
331         ' SELECT CODE,'||
332         ' USER_CODE,'||
333         ' NAME,'||
334         ' Account_Code ,'||
335         ' Account_Code_Usr'||
336         ' FROM BSC_D_SUBACCOUNT '||
337         ' WHERE LANGUAGE = userenv(''LANG''))';
338 
339   l_debug_stmt := l_sql_stmt;
340   BSC_APPS.DO_DDL(l_sql_stmt,
341                 ad_ddl.create_view,
342                 'BSC_D_1_VL');
343 
344  --  Create Input table
345 
346   l_object_type := 'BSC_DI_1' ;
347   Select count(*)
348   Into   l_count
349   From   USER_OBJECTS
350   Where  OBJECT_NAME = l_object_type;
351 
352   if (l_count <> 0) then
353       l_sql_stmt := 'Drop Table BSC_DI_1';
354       l_debug_stmt := l_sql_stmt;
355 
356      BSC_APPS.DO_DDL(l_sql_stmt,
357                 ad_ddl.drop_table,
358                 'BSC_DI_1');
359   end if;
360 
361   l_sql_stmt := 'Create Table BSC_DI_1 ('  ||
362                    'USER_CODE      Varchar2(5), ' ||
363                    'NAME       Varchar2(20), '||
364                    'Account_Code_Usr Varchar2(5))'||
365                    ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_table_tbs_type)||
366                    ' '||BSC_APPS.bsc_storage_clause;
367   l_debug_stmt := l_sql_stmt;
368 
369   BSC_APPS.DO_DDL(l_sql_stmt,
370                 ad_ddl.create_table,
371                 'BSC_DI_1');
372 
373   l_sql_stmt := 'CREATE UNIQUE INDEX BSC_DI_1_U1 ON BSC_DI_1 (USER_CODE)'||
374                 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_index_tbs_type)||
378                 ad_ddl.create_index,
375                 ' '||BSC_APPS.bsc_storage_clause;
376   l_debug_stmt := l_sql_stmt;
377   BSC_APPS.DO_DDL(l_sql_stmt,
379                 'BSC_DI_1_U1');
380 
381   if (is_cross_template) then
382 
383       l_object_type := 'BSC_D_PROJECT' ;
384       Select count(*)
385       Into   l_project_count
386       From   USER_OBJECTS
387       Where  OBJECT_NAME = l_object_type;
388 
389       if (l_project_count <> 0) then
390           l_sql_stmt := 'Drop Table BSC_D_PROJECT';
391           l_debug_stmt := l_sql_stmt;
392        BSC_APPS.DO_DDL(l_sql_stmt,
393                 ad_ddl.drop_table,
394                 'BSC_D_PROJECT');
395 
396       end if;
397 
398       -- create Project dimension table
399 
400       l_sql_stmt := 'Create Table BSC_D_PROJECT (' ||
401             'CODE      NUMBER   NOT NULL,'     ||
402                     'LANGUAGE       Varchar2(4)   NOT NULL,'||
403                     'SOURCE_LANG    Varchar2(4)   NOT NULL,'||
404             'USER_CODE  VARCHAR2(5),'   ||
405             'NAME     VARCHAR2(20))'||
406             ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_table_tbs_type)||
407             ' '||BSC_APPS.bsc_storage_clause;
408 
409       l_debug_stmt := l_sql_stmt;
410       BSC_APPS.DO_DDL(l_sql_stmt,
411                 ad_ddl.create_table,
412                 'BSC_D_PROJECT');
413 
414       l_sql_stmt := 'CREATE UNIQUE INDEX BSC_D_PROJECT_U1 ON BSC_D_PROJECT (CODE,LANGUAGE)'||
415                     ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.dimension_index_tbs_type)||
416                     ' '||BSC_APPS.bsc_storage_clause;
417       l_debug_stmt := l_sql_stmt;
418       BSC_APPS.DO_DDL(l_sql_stmt,
419                 ad_ddl.create_index,
420                 'BSC_D_PROJECT_U1');
421      --  Create View
422       l_sql_stmt := 'Create or replace view BSC_D_3_VL AS ('  ||
423         ' SELECT CODE,'||
424         ' USER_CODE,'||
425         ' NAME'||
426         ' FROM BSC_D_PROJECT '||
427         ' WHERE LANGUAGE = userenv(''LANG''))';
428 
429       l_debug_stmt := l_sql_stmt;
430       BSC_APPS.DO_DDL(l_sql_stmt,
431                 ad_ddl.create_view,
432                 'BSC_D_3_VL');
433      --  Create Input table
434       l_object_type := 'BSC_DI_3' ;
435       Select count(*)
436       Into   l_count
437       From   USER_OBJECTS
438       Where  OBJECT_NAME = l_object_type;
439 
440       if (l_count <> 0) then
441           l_sql_stmt := 'Drop Table BSC_DI_3';
442           l_debug_stmt := l_sql_stmt;
443 
444          BSC_APPS.DO_DDL(l_sql_stmt,
445                     ad_ddl.drop_table,
446                     'BSC_DI_1');
447       end if;
448 
449       l_sql_stmt := 'Create Table BSC_DI_3 ('  ||
450                        'USER_CODE      Varchar2(5), ' ||
451                        'NAME       Varchar2(20))'||
452                         ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_table_tbs_type)||
453                         ' '||BSC_APPS.bsc_storage_clause;
454 
455       l_debug_stmt := l_sql_stmt;
456 
457       BSC_APPS.DO_DDL(l_sql_stmt,
458                     ad_ddl.create_table,
459                     'BSC_DI_1');
460 
461       l_sql_stmt := 'CREATE UNIQUE INDEX BSC_DI_3_U1 ON BSC_DI_3 (USER_CODE)'||
462                     ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.input_index_tbs_type)||
463                     ' '||BSC_APPS.bsc_storage_clause;
464       l_debug_stmt := l_sql_stmt;
465       BSC_APPS.DO_DDL(l_sql_stmt,
466                     ad_ddl.create_index,
467                     'BSC_DI_3_U1');
468 
469 
470       -- populating Project dimension value
471 
472      For i_project In 0 .. (l_num_project)
473      Loop
474        l_code := i_project;
475 
476        if l_code = 0 then
477          l_code_name := 'ALL';
478        else
479          l_code_name := 'Project ' || to_char(l_code);
480        end if;
481 
482 --       l_sql_stmt := 'Insert Into BSC_D_PROJECT (CODE, USER_CODE, NAME) Values ( ' ||
483 --         to_char(l_code) || ',  ' || to_char(l_code) || ', '
484 --         || '''' || l_code_name  || ''')';
485 
486        l_sql_stmt := 'Insert Into BSC_D_PROJECT  (CODE, USER_CODE, NAME,LANGUAGE,SOURCE_LANG) Values ( '||
487                    ' SELECT '||to_char(l_code) ||' AS CODE,' ||
488                     'to_char('||to_char(l_code)||') AS USER_CODE, ' ||
489                     ' ' || l_code_name|| ' AS NAME, ' ||
490             ' LNG.LANGUAGE_CODE AS LANGUAGE,USERENV(''LANG'') AS SOURCE_LANG '||
491             ' FROM DUAL , ' ||
492             ' FND_LANGUAGES LNG ';
493     l_sql_stmt := l_sql_stmt || ' AND LNG.INSTALLED_FLAG IN (''I'',''B'')';
494 
495 
496        l_debug_stmt := l_sql_stmt;
497        l_cursor := DBMS_SQL.Open_Cursor;
498        DBMS_SQL.Parse(l_cursor, l_sql_stmt, DBMS_SQL.native);
499        l_ignore := DBMS_SQL.Execute(l_cursor);
500        DBMS_SQL.Close_Cursor(l_cursor);
501     End Loop;
502 
503   end if;  -- is_cross_template
504 
505 
506   -- Insert records into BSC_D_TYPE_OF_ACCOUNT
507 
508   For i_acct_type In 0 .. (l_num_acct_type)
509   Loop
510     -- FEM_ALIAS translation
511     l_sql_stmt := 'INSERT INTO  BSC_D_TYPE_OF_ACCOUNT ' ||
515                     'to_char('||l_acct_type(i_acct_type).code||') AS USER_CODE, ' ||
512                ' (CODE,LANGUAGE,SOURCE_LANG,USER_CODE,NAME) ' ||
513                    ' SELECT '||l_acct_type(i_acct_type).code||' AS CODE,' ||
514             ' LNG.LANGUAGE_CODE AS LANGUAGE,USERENV(''LANG'') AS SOURCE_LANG,'||
516                     ' SUBSTRB(FEM_ALIAS.MEANING,1,20) AS NAME ' ||
517             ' FROM '||BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_ALIAS, ' ||
518             '      FND_LANGUAGES LNG ';
519     -- To get ALL from commun
520         if l_acct_type(i_acct_type).code = 0 then
521         l_sql_stmt := l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_UI_COMMON'' AND FEM_ALIAS.LOOKUP_CODE = ''ALL''';
522     else
523         l_sql_stmt := l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_TPLATE_TAB_ACC_TYPE_ITEMS'' AND FEM_ALIAS.LOOKUP_CODE = '''||l_acct_type(i_acct_type).code||'''';
524     end if;
525     -- Only for current language
526 
527         l_sql_stmt := l_sql_stmt || ' AND FEM_ALIAS.LANGUAGE =userenv(''LANG'')';
528     l_sql_stmt := l_sql_stmt || ' AND LNG.INSTALLED_FLAG IN (''I'',''B'')';
529 
530     l_debug_stmt := l_sql_stmt;
531     l_cursor := DBMS_SQL.Open_Cursor;
532     DBMS_SQL.Parse(l_cursor, l_sql_stmt, DBMS_SQL.native);
533     l_ignore := DBMS_SQL.Execute(l_cursor);
534     DBMS_SQL.Close_Cursor(l_cursor);
535 
536   End Loop;
537 
538   -- Insert records into BSC_D_ACCOUNT and BSC_D_SUBACCOUNT
539 
540   For i_acct_ind In 0 .. (l_num_account)
541   Loop
542 
543     -- FEM_ALIAS translation
544     l_sql_stmt := 'INSERT INTO  BSC_D_ACCOUNT ' ||
545                '(CODE,LANGUAGE,SOURCE_LANG,USER_CODE,NAME,TYP_OF_ACC_CODE,TYP_OF_ACC_CODE_USR,POSITION) ' ||
546                    ' SELECT '||l_account(i_acct_ind).code||' AS CODE, '||
547             ' LNG.LANGUAGE_CODE AS LANGUAGE,USERENV(''LANG'') AS SOURCE_LANG,'||
548                     'to_char('||l_account(i_acct_ind).code||') AS USER_CODE, '||
549                     'SUBSTRB(FEM_ALIAS.MEANING,1,20) AS NAME,'||
550             l_account(i_acct_ind).acct_type||' AS TYP_OF_ACC_CODE, '||
551             l_account(i_acct_ind).acct_type||' AS TYP_OF_ACC_CODE_USR, '||
552             l_account(i_acct_ind).position ||' AS POSITION '||
553             'FROM '||BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_ALIAS,'||
554             '      FND_LANGUAGES LNG ';
555     -- To get ALL from commun
556         if l_account(i_acct_ind).code = 0 then
557         l_sql_stmt :=l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_UI_COMMON'' AND
558                   FEM_ALIAS.LOOKUP_CODE = ''ALL''';
559     else
560         l_sql_stmt :=l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_TPLATE_TAB_ACC_ITEMS'' AND
561                   FEM_ALIAS.LOOKUP_CODE = '''||l_account(i_acct_ind).code||'''';
562     end if;
563     -- Only for current language
564         l_sql_stmt := l_sql_stmt || ' AND FEM_ALIAS.LANGUAGE =userenv(''LANG'')';
565     l_sql_stmt := l_sql_stmt || ' AND LNG.INSTALLED_FLAG IN (''I'',''B'')';
566 
567     l_debug_stmt := l_sql_stmt;
568     l_cursor := DBMS_SQL.Open_Cursor;
569     DBMS_SQL.Parse(l_cursor, l_sql_stmt, DBMS_SQL.native);
570     l_ignore := DBMS_SQL.Execute(l_cursor);
571     DBMS_SQL.Close_Cursor(l_cursor);
572 
573     -- FEM_ALIAS translation -Same itemns from maccount
574     l_sql_stmt := 'INSERT INTO  BSC_D_SUBACCOUNT ' ||
575                ' (CODE,LANGUAGE,SOURCE_LANG,USER_CODE,NAME,ACCOUNT_CODE,ACCOUNT_CODE_USR) ' ||
576                    ' SELECT '||l_account(i_acct_ind).code||' AS CODE, ' ||
577             ' LNG.LANGUAGE_CODE AS LANGUAGE,USERENV(''LANG'') AS SOURCE_LANG,'||
578                        ' to_char('||l_account(i_acct_ind).code||') AS USER_CODE,' ||
579                     ' SUBSTRB(FEM_ALIAS.MEANING,1,20) AS NAME, '||
580             l_account(i_acct_ind).code||' AS ACCOUNT_CODE, '||
581             l_account(i_acct_ind).code||' AS ACCOUNT_CODE_USR'||
582             ' FROM '||BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_ALIAS, ' ||
583             '      FND_LANGUAGES LNG ';
584     -- To get ALL from commun
585         if l_account(i_acct_ind).code = 0 then
586         l_sql_stmt :=l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_UI_COMMON'' AND
587                   FEM_ALIAS.LOOKUP_CODE = ''ALL''';
588     else
589         l_sql_stmt :=l_sql_stmt || ' WHERE FEM_ALIAS.LOOKUP_TYPE =''BSC_TPLATE_TAB_ACC_ITEMS'' AND
590                   FEM_ALIAS.LOOKUP_CODE = '''||l_account(i_acct_ind).code||'''';
591     end if;
592     -- Only for current language
593         l_sql_stmt := l_sql_stmt || ' AND FEM_ALIAS.LANGUAGE =userenv(''LANG'')';
594     l_sql_stmt := l_sql_stmt || ' AND LNG.INSTALLED_FLAG IN (''I'',''B'')';
595 
596 
597     l_debug_stmt := l_sql_stmt;
598     l_cursor := DBMS_SQL.Open_Cursor;
599     DBMS_SQL.Parse(l_cursor, l_sql_stmt, DBMS_SQL.native);
600     l_ignore := DBMS_SQL.Execute(l_cursor);
601     DBMS_SQL.Close_Cursor(l_cursor);
602 
603   End Loop;  -- i_acct_ind
604 
605   --
606   -- Configure Dimensions
607   --
608 
609   G_Pro_Tbl.Delete;
610   G_DF_Tbl.Delete;
611   G_DC_Tbl.Delete;
612 
613   -- define Account dimension levels
614 --2828685
615   G_Pro_Tbl(0).Dim_level_id   := 2;
616   G_Pro_Tbl(0).Table_name  := 'BSC_D_TYPE_OF_ACCOUNT';
617   G_Pro_Tbl(0).Table_Type    := 1;
618   G_Pro_Tbl(0).Level_pk_col  := 'TYP_OF_ACC_CODE';
619   G_Pro_Tbl(0).Abbreviation  := 'TyOfAc';
620   G_Pro_Tbl(0).Value_Order   := 2;
621   G_Pro_Tbl(0).Comp_Order    := 0;
625   G_Pro_Tbl(0).Caption_Tot   := 'ALL';
622   G_Pro_Tbl(0).Custom_Group  := 0;
623   G_Pro_Tbl(0).Name      := 'Account Type';
624   G_Pro_Tbl(0).Help      := 'Account Types';
626   G_Pro_Tbl(0).Caption_Com   := 'COMPARISON';
627   G_Pro_Tbl(0).parent_level  := NULL;
628   G_Pro_Tbl(0).fk_field      := NULL;
629   G_Pro_Tbl(0).rel_type      := NULL;
630   G_Pro_Tbl(0).direct_rel    := NULL;
631   G_Pro_Tbl(0).Level_View_Name := 'BSC_D_2_VL';
632 
633   G_Pro_Tbl(1).Dim_level_id   := 0;
634   G_Pro_Tbl(1).Table_name  := 'BSC_D_ACCOUNT';
635   G_Pro_Tbl(1).Table_Type    := 1;
636   G_Pro_Tbl(1).Level_pk_col  := 'ACCOUNT_CODE';
637   G_Pro_Tbl(1).Abbreviation  := 'Accnt';
638   G_Pro_Tbl(1).Value_Order   := 1;
639   G_Pro_Tbl(1).Comp_Order    := 0;
640   G_Pro_Tbl(1).Custom_Group  := 0;
641   G_Pro_Tbl(1).Name      := 'Account';
642   G_Pro_Tbl(1).Help      := 'Accounts';
643   G_Pro_Tbl(1).Caption_Tot   := 'ALL';
644   G_Pro_Tbl(1).Caption_Com   := 'COMPARISON';
645   G_Pro_Tbl(1).parent_level  := 2;
646   G_Pro_Tbl(1).fk_field      := 'TYP_OF_ACC_CODE';
647   G_Pro_Tbl(1).rel_type      := 1;
648   G_Pro_Tbl(1).direct_rel    := 1;
649   G_Pro_Tbl(1).Level_View_Name := 'BSC_D_0_VL';
650 
651   G_Pro_Tbl(2).Dim_level_id   := 1;
652   G_Pro_Tbl(2).Table_name  := 'BSC_D_SUBACCOUNT';
653   G_Pro_Tbl(2).Table_Type    := 1;
654   G_Pro_Tbl(2).Level_pk_col  := 'SUBACCOUNT_CODE';
655   G_Pro_Tbl(2).Abbreviation  := 'Sbccn';
656   G_Pro_Tbl(2).Value_Order   := 0;
657   G_Pro_Tbl(2).Comp_Order    := 0;
658   G_Pro_Tbl(2).Custom_Group  := 0;
659   G_Pro_Tbl(2).Name      := 'Sub-Account';
660   G_Pro_Tbl(2).Help      := 'Sub-Accounts';
661   G_Pro_Tbl(2).Caption_Tot   := 'ALL';
662   G_Pro_Tbl(2).Caption_Com   := 'COMPARISON';
663   G_Pro_Tbl(2).parent_level  := 0;
664   G_Pro_Tbl(2).fk_field      := 'ACCOUNT_CODE';
665   G_Pro_Tbl(2).rel_type      := 1;
666   G_Pro_Tbl(2).direct_rel    := 1;
667   G_Pro_Tbl(2).Level_View_Name := 'BSC_D_1_VL';
668 
669   G_Pro_Tbl(3).Dim_level_id   := 3;
670   G_Pro_Tbl(3).Table_name  := 'BSC_D_PROJECT';
671   G_Pro_Tbl(3).Table_Type    := 1;
672   G_Pro_Tbl(3).Level_pk_col  := 'PROJECT_CODE';
673   G_Pro_Tbl(3).Abbreviation  := 'Prjct';
674   G_Pro_Tbl(3).Value_Order   := 0;
675   G_Pro_Tbl(3).Comp_Order    := 0;
676   G_Pro_Tbl(3).Custom_Group  := 0;
677   G_Pro_Tbl(3).Name      := 'Project';
678   G_Pro_Tbl(3).Help      := 'Strategic Projects';
679   G_Pro_Tbl(3).Caption_Tot   := 'ALL';
680   G_Pro_Tbl(3).Caption_Com   := 'COMPARISON';
681   G_Pro_Tbl(3).parent_level  := NULL;
682   G_Pro_Tbl(3).fk_field      := NULL;
683   G_Pro_Tbl(3).rel_type      := NULL;
684   G_Pro_Tbl(3).direct_rel    := NULL;
685   G_Pro_Tbl(3).Level_View_Name := 'BSC_D_3_VL';
686 
687 -- 2828685 Synch the BSC_SYS_DIM_LEVELS_B
688 
689 
690   ----Define Dimension Columns
691   G_DC_Tbl(0).Dim_level_id  := -1;
692   G_DC_Tbl(0).Column_Name   := 'CODE';
693   G_DC_Tbl(0).Column_Type   := 'P';
694 
695   G_DC_Tbl(1).Dim_level_id  := -1;
696   G_DC_Tbl(1).Column_Name   := 'USER_CODE';
697   G_DC_Tbl(1).Column_Type   := 'U';
698 
699   G_DC_Tbl(2).Dim_level_id  := -1;
700   G_DC_Tbl(2).Column_Name   := 'NAME';
701   G_DC_Tbl(2).Column_Type   := 'D';
702 
703   G_DC_Tbl(3).Dim_level_id  := 0;
704   G_DC_Tbl(3).Column_Name   := 'TYP_OF_ACC_CODE';
705   G_DC_Tbl(3).Column_Type   := 'F';
706 
707   G_DC_Tbl(4).Dim_level_id  := 0;
708   G_DC_Tbl(4).Column_Name   := 'TYP_OF_ACC_CODE_USR';
709   G_DC_Tbl(4).Column_Type   := 'F';
710 
711   G_DC_Tbl(5).Dim_level_id  := 0;
712   G_DC_Tbl(5).Column_Name   := 'POSITION';
713   G_DC_Tbl(5).Column_Type   := 'A';
714 
715   G_DC_Tbl(6).Dim_level_id  := 1;
716   G_DC_Tbl(6).Column_Name   := 'ACCOUNT_CODE';
717   G_DC_Tbl(6).Column_Type   := 'F';
718 
719   G_DC_Tbl(7).Dim_level_id  := 1;
720   G_DC_Tbl(7).Column_Name   := 'ACCOUNT_CODE_USR';
721   G_DC_Tbl(7).Column_Type   := 'F';
722 
723 
724 
725   -- define dimension family
726 
727   G_DF_Tbl(0).Dim_group_id   := 1;
728   G_DF_Tbl(0).Name       := 'Dgrp Account';
729   G_DF_Tbl(0).Dim_level_id   := 0;
730   G_DF_Tbl(0).Dim_level_idx  := 1;
731   G_DF_Tbl(0).Total          := -1;
732   G_DF_Tbl(0).Comparison     := -1;
733   G_DF_Tbl(0).filter_col     := NULL;
734   G_DF_Tbl(0).filter_val     := 0;
735   G_DF_Tbl(0).default_val    := 'C';
736   G_DF_Tbl(0).default_type   := 0;
737   G_DF_Tbl(0).Parent_Total   := 2;
738   G_DF_Tbl(0).No_items       := 0;
739 
740   G_DF_Tbl(1).Dim_group_id   := 2;
741   G_DF_Tbl(1).Name       := 'Dgrp SubAcct';
742   G_DF_Tbl(1).Dim_level_id   := 1;
743   G_DF_Tbl(1).Dim_level_idx  := 1;
744   G_DF_Tbl(1).Total          := -1;
745   G_DF_Tbl(1).Comparison     := -1;
746   G_DF_Tbl(1).filter_col     := NULL;
747   G_DF_Tbl(1).filter_val     := 0;
748   G_DF_Tbl(1).default_val    := 'T';
749   G_DF_Tbl(1).default_type   := 0;
750   G_DF_Tbl(1).Parent_Total   := 2;
751   G_DF_Tbl(1).No_items       := 0;
752 
753   G_DF_Tbl(2).Dim_group_id   := 3;
754   G_DF_Tbl(2).Name       := 'Dgrp Acct Type';
755   G_DF_Tbl(2).Dim_level_id   := 2;
756   G_DF_Tbl(2).Dim_level_idx  := 1;
757   G_DF_Tbl(2).Total          := -1;
758   G_DF_Tbl(2).Comparison     := -1;
759   G_DF_Tbl(2).filter_col     := NULL;
763   G_DF_Tbl(2).Parent_Total   := 2;
760   G_DF_Tbl(2).filter_val     := 0;
761   G_DF_Tbl(2).default_val    := 'T';
762   G_DF_Tbl(2).default_type   := 0;
764   G_DF_Tbl(2).No_items       := 0;
765 
766   -- Project dimension family
767 
768   G_DF_Tbl(3).Dim_group_id   := 4;
769   G_DF_Tbl(3).Name       := 'Dgrp Project';
770   G_DF_Tbl(3).Dim_level_id   := 3;
771   G_DF_Tbl(3).Dim_level_idx  := 1;
772   G_DF_Tbl(3).Total          := -1;
773   G_DF_Tbl(3).Comparison     := -1;
774   G_DF_Tbl(3).filter_col     := NULL;
775   G_DF_Tbl(3).filter_val     := 0;
776   G_DF_Tbl(3).default_val    := 'C';
777   G_DF_Tbl(3).default_type   := 0;
778   G_DF_Tbl(3).Parent_Total   := 2;
779   G_DF_Tbl(3).No_items       := 0;
780 
781 
782 
783 
784   if (is_cross_template) then
785     l_num_of_levels := 4;
786     l_num_of_family := 4;
787   else
788     l_num_of_levels := 3;
789     l_num_of_family := 3;
790   end if;
791 
792   if (NOT define_dim_relations(l_num_of_levels, l_num_of_family)) then
793     l_debug_stmt := bsc_apps.get_message('BSC_ERROR_CONFIG_DIM');
794     Raise BSC_DIM_ERROR;
795   end if;
796 
797   Return(TRUE);
798 
799 EXCEPTION
800     WHEN BSC_DIM_ERROR THEN
801     BSC_MESSAGE.Add(
802         X_Message => l_debug_stmt,
803         X_Source  => 'bsc_dim_tplate.create_dimensions',
804         X_Mode    => 'I');
805 
806     Return(FALSE);
807 
808     WHEN OTHERS THEN
809     BSC_MESSAGE.Add(
810         X_Message => SQLERRM,
811         X_Source => 'bsc_dim_tplate.create_dimensions',
812         X_Mode => 'I');
813 
814     BSC_MESSAGE.Add(
815         X_Message => l_debug_stmt,
816         X_Source  => 'bsc_dim_tplate.create_dimensions',
817         x_type    => 3,
818         X_Mode    => 'I');
819 
820     Return(FALSE);
821 
822 End Create_Dimensions;
823 
824 
825 /*===========================================================================+
826 |
827 |   Name:          Define_Dim_Relations
828 |
829 |   Description:   To configue dimension family and relation
830 |
831 |   Parameters:
832 |   x_num_of_levels     number of dimension levels
833 |   x_num_of_family     number of dimension families
834 |
835 |   History:
836 |       02-APR-1999   Alex Yang             Created.
837 |    12/22/1999   Henry Camacho Modified to Model 4.0
838 +============================================================================*/
839 Function Define_Dim_Relations(
840         x_num_of_levels     IN  Number,
841         x_num_of_family     IN  Number
842 ) Return Boolean
843 Is
844     l_debug_stmt        varchar2(2000);
845     x_num_of_columns    Number;
846     i_dimension_col     Number;
847     l_sql           varchar2(32700);
848 Begin
849 
850   x_num_of_columns := 8;
851 
852   For i_dimension In 0 .. (x_num_of_levels -1)
853   Loop
854 
855     l_debug_stmt := 'Insert Into BSC_SYS_DIM_LEVELS_B, Dim_level_id=' ||
856             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
857 --2828685 ADD WHO COLUMNS
858     Insert Into BSC_SYS_DIM_LEVELS_B (
859     DIM_LEVEL_ID,
860     LEVEL_TABLE_NAME,
861     TABLE_TYPE,
862     LEVEL_PK_COL,
863     ABBREVIATION,
864     VALUE_ORDER_BY,
865     COMP_ORDER_BY,
866     CUSTOM_GROUP,
867     USER_KEY_SIZE,
868     DISP_KEY_SIZE,
869         EDW_FLAG,
870     LEVEL_VIEW_NAME,
871     CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE
872 )
873     Values (
874     G_Pro_Tbl(i_dimension).Dim_level_id,
875     G_Pro_Tbl(i_dimension).Table_name,
876     G_Pro_Tbl(i_dimension).Table_Type,
877     G_Pro_Tbl(i_dimension).Level_pk_col,
878     G_Pro_Tbl(i_dimension).abbreviation,
879     G_Pro_Tbl(i_dimension).Value_Order,
880     G_Pro_Tbl(i_dimension).Comp_Order,
881     G_Pro_Tbl(i_dimension).Custom_Group,
882     5, 20, 0,
883     G_Pro_Tbl(i_dimension).Level_View_Name,
884 1,SYSDATE,1,SYSDATE
885     );
886 
887     l_debug_stmt := 'Insert Into BSC_SYS_DIM_LEVELS_TL, Dim_level_id=' ||
888             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
889     --FEM translation
890     l_sql := 'INSERT INTO BSC_SYS_DIM_LEVELS_TL '||
891         ' (DIM_LEVEL_ID,LANGUAGE,SOURCE_LANG,NAME,HELP,TOTAL_DISP_NAME,COMP_DISP_NAME) '||
892             'SELECT '||
893                 G_Pro_Tbl(i_dimension).Dim_level_id||' AS DIM_LEVEL_ID, '||
894             'FEM_DIM.LANGUAGE AS LANGUAGE, '||
895             'FEM_DIM.SOURCE_LANG AS SOURCE_LANG, '||
896             'SUBSTR(FEM_DIM.MEANING,1,30) AS NAME, '||
897             'SUBSTR(FEM_DIM.MEANING,1,80) AS HELP, '||
898             'SUBSTR(FEM_ALL.MEANING,1,15) AS TOTAL_DISP_NAME, '||
899             'SUBSTR(FEM_COMP.MEANING,1,15) AS COMP_DISP_NAME '||
900         'FROM '||
901                         BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_DIM, '||
902             BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_ALL, '||
903             BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_COMP '||
904         'WHERE '||
905             'FEM_DIM.LOOKUP_TYPE =''BSC_TPLATE_TAB_DIM_LEVEL_NAME'' AND '||
906                 'FEM_DIM.LOOKUP_CODE = '''||G_Pro_Tbl(i_dimension).Dim_level_id||''' AND '||
910                 'FEM_COMP.LOOKUP_CODE = ''COMPARISON'' AND '||
907                 'FEM_ALL.LOOKUP_TYPE =''BSC_UI_COMMON'' AND '||
908                 'FEM_ALL.LOOKUP_CODE = ''ALL'' AND '||
909                 'FEM_COMP.LOOKUP_TYPE =''BSC_UI_COMMON'' AND '||
911                 'FEM_DIM.LANGUAGE = FEM_ALL.LANGUAGE AND '||
912                 'FEM_COMP.LANGUAGE = FEM_ALL.LANGUAGE';
913     BSC_APPS.Execute_Immediate(l_sql);
914 
915     l_debug_stmt := 'Insert Into BSC_SYS_DIM_LEVEL_COLS, Dim_level_id=' ||
916             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
917 
918 
919     For i_dimension_col In 0 .. (x_num_of_columns -1) LOOP
920        IF G_DC_Tbl(i_dimension_col).Dim_level_id = -1 THEN
921             Insert Into BSC_SYS_DIM_LEVEL_COLS (
922             DIM_LEVEL_ID,
923             COLUMN_NAME,
924             COLUMN_TYPE)
925             Values (
926             G_Pro_Tbl(i_dimension).Dim_level_id,
927             G_DC_Tbl(i_dimension_col).Column_Name,
928             G_DC_Tbl(i_dimension_col).Column_Type
929             );
930        ELSE
931            IF G_DC_Tbl(i_dimension_col).Dim_level_id = G_Pro_Tbl(i_dimension).Dim_level_id THEN
932             Insert Into BSC_SYS_DIM_LEVEL_COLS (
933             DIM_LEVEL_ID,
934             COLUMN_NAME,
935             COLUMN_TYPE)
936             Values (
937             G_Pro_Tbl(i_dimension).Dim_level_id,
938             G_DC_Tbl(i_dimension_col).Column_Name,
939             G_DC_Tbl(i_dimension_col).Column_Type
940             );
941         END IF;
942      END IF;
943 
944     End loop;
945 
946 
947 
948     if (G_Pro_Tbl(i_dimension).parent_level is NOT NULL) then
949 
950         l_debug_stmt := 'Insert Into BSC_SYS_DIM_LEVEL_RELS, Dim_level_id=' ||
951             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
952 
953         Insert Into BSC_SYS_DIM_LEVEL_RELS (
954         DIM_LEVEL_ID,
955         RELATION_COL,
956         PARENT_DIM_LEVEL_ID,
957         RELATION_TYPE,
958         DIRECT_RELATION )
959     Values (
960         G_Pro_Tbl(i_dimension).Dim_level_id,
961         G_Pro_Tbl(i_dimension).fk_field,     -- relation_field
962         G_Pro_Tbl(i_dimension).parent_level, -- parent_entity_code
963         G_Pro_Tbl(i_dimension).rel_type,     -- relation_type
964         G_Pro_Tbl(i_dimension).direct_rel    -- direct_relation
965     );
966 
967     end if;
968 
969     l_debug_stmt := 'Insert Into BSC_DB_TABLES_RELS, Dim_level_id=' ||
970             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
971     Insert Into BSC_DB_TABLES_RELS (
972     TABLE_NAME,
973     SOURCE_TABLE_NAME)
974     Values (
975     G_Pro_Tbl(i_dimension).Table_name,
976     'BSC_DI_' || G_Pro_Tbl(i_dimension).Dim_level_id
977     );
978 
979     l_debug_stmt := 'Insert Into BSC_DB_TABLES, Dim_level_id=' ||
980             to_char(G_Pro_Tbl(i_dimension).Dim_level_id);
981     Insert Into BSC_DB_TABLES (
982     TABLE_NAME,
983     TABLE_TYPE,
984     PERIODICITY_ID,
985     SOURCE_DATA_TYPE,
986     SOURCE_FILE_NAME)
987     Values (
988     'BSC_DI_' || G_Pro_Tbl(i_dimension).Dim_level_id,
989     2,
990     0,
991     0,
992     NULL
993     );
994 
995 
996   End Loop; -- dimension level loop
997 
998 
999   For i_dem_family In 0 .. (x_num_of_family -1)
1000   Loop
1001 
1002     l_debug_stmt := 'Insert Into MPROJ_DRILLS_FAMILIES,Dim_group_id=' ||
1003             to_char(G_DF_Tbl(i_dem_family).Dim_group_id);
1004 
1005     -- FEM translation
1006 --2828685 ADD WHO COLUMNS
1007     l_sql := 'INSERT INTO BSC_SYS_DIM_GROUPS_TL '||
1008         ' (DIM_GROUP_ID,LANGUAGE,SOURCE_LANG,NAME,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE) ' ||
1009         'SELECT '||
1010             G_DF_Tbl(i_dem_family).Dim_group_id||' AS DIM_GROUP_ID, '||
1011             'FEM_ALIAS.LANGUAGE AS LANGUAGE, '||
1012             'FEM_ALIAS.SOURCE_LANG AS SOURCE_LANG, '||
1013             'SUBSTR(FEM_ALIAS.MEANING,1,15) AS NAME '||
1014             ',1,SYSDATE,1,SYSDATE '||
1015         'FROM '||
1016             BSC_TEMPLATE.LOOKUP_VALUES_TABLE||' FEM_ALIAS '||
1017         'WHERE '||
1018             'FEM_ALIAS.LOOKUP_TYPE = ''BSC_TPLATE_TAB_DIM_GROUP_NAME'' AND '||
1019                 'FEM_ALIAS.LOOKUP_CODE = '''||G_DF_Tbl(i_dem_family).Dim_group_id||'''';
1020     BSC_APPS.Execute_Immediate(l_sql);
1021 
1022     l_debug_stmt := 'Insert Into BSC_SYS_DIM_LEVELS_BY_GROUP, ' ||
1023     ' Dim_group_id=' || to_char(G_DF_Tbl(i_dem_family).Dim_group_id) ||
1024         ', Dim_level_id=' || to_char(G_DF_Tbl(i_dem_family).Dim_level_id);
1025 
1026     Insert Into BSC_SYS_DIM_LEVELS_BY_GROUP (
1027     DIM_GROUP_ID,
1028     DIM_LEVEL_ID,
1029     DIM_LEVEL_INDEX,
1030     TOTAL_FLAG,
1031     COMPARISON_FLAG,
1032     FILTER_COLUMN,
1033     FILTER_VALUE,
1034     DEFAULT_VALUE,
1035     DEFAULT_TYPE,
1036     PARENT_IN_TOTAL,
1037     NO_ITEMS )
1038     Values (
1039     G_DF_Tbl(i_dem_family).Dim_group_id,     -- family_code
1040     G_DF_Tbl(i_dem_family).Dim_level_id,    -- entity_code
1041     G_DF_Tbl(i_dem_family).Dim_level_idx,       -- order_r
1042     G_DF_Tbl(i_dem_family).Total,       -- total
1043     G_DF_Tbl(i_dem_family).Comparison,  -- comparison
1044     G_DF_Tbl(i_dem_family).Filter_col,  -- condition_field
1045     G_DF_Tbl(i_dem_family).Filter_val,  -- condition_value
1046     G_DF_Tbl(i_dem_family).Default_val,     -- init
1047     G_DF_Tbl(i_dem_family).Default_type,    -- init_type
1048     G_DF_Tbl(i_dem_family).Parent_Total,    -- status_whn_parnt_is_total
1049     G_DF_Tbl(i_dem_family).No_items     -- hide_if_no_items
1050     );
1051 
1052   End Loop; -- dimension family loop
1053 
1054   Return(TRUE);
1055 
1056 EXCEPTION
1057 
1058     WHEN OTHERS THEN
1059     BSC_MESSAGE.Add(
1060         X_Message => SQLERRM,
1061         X_Source => 'bsc_dim_tplate.define_dim_relations',
1062         X_Mode => 'I');
1063 
1064     BSC_MESSAGE.Add(
1065         X_Message => l_debug_stmt,
1066         X_Source  => 'bsc_template.create_crx_template',
1067         x_type    => 3,
1068         X_Mode    => 'I');
1069 
1070     Return(FALSE);
1071 
1072 End Define_Dim_Relations;
1073 
1074 
1075 END BSC_DIM_TPLATE;