[Home] [Help]
PACKAGE BODY: APPS.BIS_RKPI
Source
1 PACKAGE BODY BIS_RKPI as
2 /*$Header: BISRKPIB.pls 120.2 2006/01/03 22:34:52 akoduri noship $*/
3
4
5 FUNCTION GET_PMF_DIM_L_SN(
6 p_ak_region_code IN VARCHAR2,
7 p_filter_time_dl IN VARCHAR2 := 'T'
8 ) RETURN VARCHAR2
9 IS
10 TYPE t_cursor IS REF CURSOR;
11 h_cursor t_cursor;
12 h_name AK_REGION_ITEMS.region_code%TYPE;
13 h_group AK_REGION_ITEMS.region_code%TYPE;
14 h_sql VARCHAR2(32700);
15 h_sn_comb VARCHAR2(32700);
16 BEGIN
17
18 -- avoid using OR
19 h_sql := 'SELECT DISTINCT sn, gr FROM '||
20 -- non nested items
21 '((SELECT SUBSTR(A.attribute2,'||
22 ' INSTR(A.attribute2, ''+'') + 1,'||
23 ' LENGTH(A.attribute2)-INSTR(A.attribute2, ''+''))'||
24 ' AS sn,'||
25 ' SUBSTR(A.attribute2,'||
26 ' 1,'||
27 ' INSTR(A.attribute2, ''+'') - 1)'||
28 ' AS gr'||
29 ' FROM AK_REGION_ITEMS A'||
30 ' WHERE A.region_code = :1'||
31 ' AND A.item_style <> ''NESTED_REGION'''||
32 ' AND A.attribute1 IN (''DIM LEVEL SINGLE VALUE'', '||
33 '''DIMENSION LEVEL'', ''HIDE DIMENSION LEVEL'', '||
34 '''HIDE PARAMETER'', ''HIDE VIEW BY DIMENSION'', '||
35 '''HIDE_VIEW_BY_DIM_SINGLE'', ''COMPARE TO DIMENSION LEVEL'', '||
36 '''VIEWBY PARAMETER'')'||
37 ' AND A.attribute2 IS NOT NULL)'||
38 ' UNION '||
39 -- nested items
40 '(SELECT SUBSTR(A.attribute2,'||
41 ' INSTR(A.attribute2, ''+'') + 1,'||
42 ' LENGTH(A.attribute2)-INSTR(A.attribute2, ''+''))'||
43 ' AS sn,'||
44 ' SUBSTR(A.attribute2,'||
45 ' 1,'||
46 ' INSTR(A.attribute2, ''+'') - 1)'||
47 ' AS gr'||
48 ' FROM AK_REGION_ITEMS A'||
49 ' WHERE A.region_code IN '||
50 '(SELECT B.nested_region_code '||
51 'FROM AK_REGION_ITEMS B '||
52 'WHERE B.region_code = :2 '||
53 'AND B.ITEM_STYLE = ''NESTED_REGION'')'||
54 ' AND A.attribute1 IN (''DIM LEVEL SINGLE VALUE'', '||
55 '''DIMENSION LEVEL'', ''HIDE DIMENSION LEVEL'', '||
56 '''HIDE PARAMETER'', ''HIDE VIEW BY DIMENSION'', '||
57 '''HIDE_VIEW_BY_DIM_SINGLE'', ''COMPARE TO DIMENSION LEVEL'', '||
58 '''VIEWBY PARAMETER'')'||
59 ' AND A.attribute2 IS NOT NULL))'||
60 ' ORDER BY sn';
61
62 OPEN h_cursor FOR h_sql USING p_ak_region_code, p_ak_region_code;
63 LOOP
64 FETCH h_cursor INTO h_name, h_group;
65 EXIT WHEN h_cursor%NOTFOUND;
66
67 -- exclude time dimension
68 IF ((p_filter_time_dl IS NULL) OR (p_filter_time_dl <> 'T') OR
69 (p_filter_time_dl = 'T' AND h_group <> 'TIME' AND h_group <> 'EDW_TIME_M' AND h_group <> 'TIME_COMPARISON_TYPE')) THEN
70 IF (h_sn_comb IS NULL) THEN
71 h_sn_comb := ','||h_name||',';
72 ELSE
73 h_sn_comb := h_sn_comb||','||h_name||',';
74 END IF;
75 END IF;
76 END LOOP;
77 CLOSE h_cursor;
78
79 IF h_sn_comb IS NULL THEN
80 RETURN ' ';
81 END IF;
82
83 RETURN h_sn_comb;
84 EXCEPTION
85 WHEN OTHERS THEN
86 IF (h_cursor%ISOPEN) THEN
87 CLOSE h_cursor;
88 END IF;
89 RETURN NULL;
90 END GET_PMF_DIM_L_SN;
91
92
93
94 FUNCTION GET_PMF_DIM_L_COMB(
95 p_dim_level_list IN VARCHAR2,
96 p_lang IN VARCHAR2
97 ) RETURN VARCHAR2
98 IS
99 TYPE t_cursor IS REF CURSOR;
100 h_cursor t_cursor;
101 h_sql VARCHAR2(32700);
102 -- current shortname position in the list
103 h_start_pos NUMBER;
104 h_end_pos NUMBER;
105 h_strlen NUMBER;
106 h_sn AK_REGION_ITEMS.attribute2%TYPE;
107 h_name BIS_LEVELS_VL.name%TYPE;
108 h_name_comb VARCHAR2(32767);
109
110 BEGIN
111
112 h_strlen := LENGTH(p_dim_level_list);
113
114 IF (h_strlen <= 1) THEN
115 RETURN ' ';
116 END IF;
117
118 -- start position of the input list
119 h_start_pos := 2;
120
121 h_sql := 'SELECT b2.name'||
122 ' FROM BIS_LEVELS_TL b2, BIS_LEVELS b1'||
123 ' WHERE b1.SHORT_NAME = :1'||
124 ' AND b1.LEVEL_ID = b2.LEVEL_ID'||
125 ' AND b2.language = :2';
126
127 LOOP
128 EXIT WHEN h_start_pos >= h_strlen;
129
130 h_end_pos := INSTR(p_dim_level_list, ',' , h_start_pos, 1);
131 h_sn := SUBSTR(p_dim_level_list, h_start_pos, h_end_pos-h_start_pos);
132 OPEN h_cursor FOR h_sql USING h_sn, p_lang;
133 FETCH h_cursor INTO h_name;
134 CLOSE h_cursor;
135
136 IF (h_name_comb IS NULL) THEN
137 h_name_comb := h_name;
138 ELSE
139 h_name_comb := h_name_comb||', '||h_name;
140 END IF;
141
142 h_start_pos := h_end_pos + 2;
143
144 END LOOP;
145
146 RETURN h_name_comb;
147 EXCEPTION
148 WHEN OTHERS THEN
149 IF (h_cursor%ISOPEN) THEN
150 CLOSE h_cursor;
151 END IF;
152 RETURN NULL;
153 END GET_PMF_DIM_L_COMB;
154
155
156 FUNCTION REMOVE_COMMON_PARAMS(
157 p_dim_level_list IN VARCHAR2,
158 p_common_params IN VARCHAR2
159 ) RETURN VARCHAR2
160 IS
161 TYPE t_cursor IS REF CURSOR;
162
163 -- current shortname position in the list
164 h_start_pos NUMBER;
165 h_end_pos NUMBER;
166 h_strlen NUMBER;
167
168 h_com_start_pos NUMBER;
169 h_com_end_pos NUMBER;
170 h_com_strlen NUMBER;
171
172 h_sn AK_REGION_ITEMS.attribute2%TYPE;
173 h_com_sn AK_REGION_ITEMS.attribute2%TYPE;
174
175 h_sn_comb VARCHAR2(32767);
176
177 BEGIN
178 -- loop until p_dim_level_list or p_common_params reaches the end
179
180 h_strlen := LENGTH(p_dim_level_list);
181 IF (h_strlen <= 1) THEN
182 RETURN ' ';
183 END IF;
184 -- start position of the input list
185 h_start_pos := 2;
186
187 h_com_strlen := LENGTH(p_common_params);
188 IF (h_com_strlen <= 1) THEN
189 RETURN p_dim_level_list;
190 END IF;
191 -- start position of the input list
192 h_com_start_pos := 2;
193
194 LOOP
195 EXIT WHEN ((h_start_pos >= h_strlen) OR (h_com_start_pos >= h_com_strlen));
196
197 h_end_pos := INSTR(p_dim_level_list, ',' , h_start_pos, 1);
198 h_sn := SUBSTR(p_dim_level_list, h_start_pos, h_end_pos-h_start_pos);
199
200 h_com_end_pos := INSTR(p_common_params, ',' , h_com_start_pos, 1);
201 h_com_sn := SUBSTR(p_common_params, h_com_start_pos, h_com_end_pos-h_com_start_pos);
202
203
204 IF (h_sn < h_com_sn) THEN
205 h_start_pos := h_end_pos + 2;
206 IF (h_sn_comb IS NULL) THEN
207 h_sn_comb := ','||h_sn||',';
208 ELSE
209 h_sn_comb := h_sn_comb||','||h_sn||',';
210 END IF;
211 ELSIF (h_sn > h_com_sn) THEN
212 h_com_start_pos := h_com_end_pos + 2;
213 ELSE
214 -- they are equal
215 h_start_pos := h_end_pos + 2;
216 h_com_start_pos := h_com_end_pos + 2;
217 END IF;
218 END LOOP;
219
220 -- if p_dim_level_list has not reach the end
221 -- copy the rest
222 IF (h_start_pos < h_strlen) THEN
223 h_sn := SUBSTR(p_dim_level_list, h_start_pos, h_strlen-h_start_pos+1);
224 IF (h_sn_comb IS NULL) THEN
225 h_sn_comb := ','||h_sn;
226 ELSE
227 h_sn_comb := h_sn_comb||','||h_sn;
228 END IF;
229 END IF;
230
231 IF (h_sn_comb IS NULL) THEN
232 h_sn_comb := ' ';
233 END IF;
234
235 RETURN h_sn_comb;
236
237 EXCEPTION
238 WHEN OTHERS THEN
239 RETURN NULL;
240 END REMOVE_COMMON_PARAMS;
241
242 END BIS_RKPI;