[Home] [Help]
PACKAGE BODY: APPS.BSC_BIS_PMDLDR_DELDATA
Source
1 PACKAGE BODY BSC_BIS_PMDLDR_DELDATA AS
2 /* $Header: BSCPMDDB.pls 120.0 2005/06/01 14:57:20 appldev noship $ */
3
4 TYPE T_KPI_REC_TYPE IS RECORD(
5 indicator BSC_KPIS_B.INDICATOR%TYPE
6 );
7 TYPE G_KPI_TAB_TYPE is table of T_KPI_REC_TYPE index by binary_integer;
8 TYPE curType IS REF CURSOR ;
9
10 TYPE T_TABLE_REC_TYPE IS RECORD(
11 NAME VARCHAR2(100)
12 );
13
14 TYPE G_TABLE_TAB_TYPE is table of T_TABLE_REC_TYPE index by binary_integer;
15
16 G_KPI_TABLE G_KPI_TAB_TYPE ;
17 G_KPI_TABLE_SIZE binary_integer := 0;
18
19 G_TABNAME_TABLE G_TABLE_TAB_TYPE ;
20 G_TABNAME_TABLE_SIZE binary_integer := 0;
21
22 G_REC_LEVEL number := 32767000;
23
24 PROCEDURE SET_RECURSIVE_LEVEL( P_lvl number)
25 IS
26 BEGIN
27 G_REC_LEVEL := P_lvl;
28 END;
29
30 PROCEDURE ADD_TABLE(name varchar2)
31 IS
32 BEGIN
33 BSC_APPS.Add_Value_Big_In_Cond( 3, name );
34 G_TABNAME_TABLE_SIZE := G_TABNAME_TABLE_SIZE + 1;
35 G_TABNAME_TABLE(G_TABNAME_TABLE_SIZE).name := name;
36
37 END;
38
39 PROCEDURE REFRESH_BSC_TMP_BIG_IN_COND
40 IS
41 l_dummy varchar2(2000);
42 BEGIN
43 l_dummy := BSC_APPS.Get_New_Big_In_Cond_Varchar2( 4, 'TABLE_NAME');
44
45 For i in 1..G_TABNAME_TABLE_SIZE
46 loop
47 BSC_APPS.Add_Value_Big_In_Cond( 4, G_TABNAME_TABLE(i).name );
48 end loop;
49 --debug('Refreshed ' || G_TABNAME_TABLE_SIZE || ' to temp' );
50 G_TABNAME_TABLE.delete;
51 G_TABNAME_TABLE_SIZE := 0;
52 END;
53
54 FUNCTION get_indicatorstr
55 RETURN varchar2
56 IS
57 l_string varchar2(3000) := '';
58 BEGIN
59
60 For i in 1..G_KPI_TABLE_SIZE
61 loop
62 if (i = 1) then
63 l_string := l_string || G_KPI_TABLE(i).indicator ;
64 else
65 l_string := l_string || ', ' || G_KPI_TABLE(i).indicator ;
66 end if;
67 end loop;
68
69 return l_string;
70 End;
71
72
73
74 PROCEDURE DEBUG(txt varchar2)
75 IS
76 BEGIN
77 --Cond added for bug 3964235
78 IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
79 FND_LOG.string(FND_LOG.LEVEL_UNEXPECTED, 'bis.plsql.BSC_BIS_PMDLDR_DELDATA.DEBUG', txt);
80 END IF;
81 END;
82
83
84 PROCEDURE INITIALIZE
85 IS
86 BEGIN
87 G_KPI_TABLE_SIZE := 0;
88 G_KPI_TABLE.delete;
89
90 BSC_APPS.Init_Bsc_Apps;
91 BSC_APPS.Init_Big_In_Cond_Table;
92
93 G_TABNAME_TABLE_SIZE := 0;
94 G_TABNAME_TABLE.delete;
95
96
97 END;
98
99 PROCEDURE SELECT_INDICATOR(p_ind number) IS
100 BEGIN
101 G_KPI_TABLE_SIZE := G_KPI_TABLE_SIZE + 1;
102 G_KPI_TABLE(G_KPI_TABLE_SIZE).INDICATOR := p_ind;
103 END;
104
105 FUNCTION INIT_RELATED_TABLES(
106 p_stmtWhereInIndics varchar2)
107 RETURN NUMBER
108 IS
109 l_stmt varchar2(2000);
110 cur_init_tbl curType;
111 l_tbl_name varchar2(1000);
112 l_rownum number := 0;
113 BEGIN
114
115 l_stmt :=
116 ' SELECT DISTINCT TABLE_NAME ' ||
117 ' FROM BSC_KPI_DATA_TABLES_V ' ||
118 ' WHERE (' || p_stmtWhereInIndics || ' ) ';
119 -- || ' AND TABLE_NAME IS NOT NULL ';
120 debug('Executing ' || l_stmt);
121 open cur_init_tbl for l_stmt;
122 loop
123 FETCH cur_init_tbl INTO l_tbl_name;
124 exit when cur_init_tbl%NOTFOUND;
125 if ( l_tbl_name is not null ) then
126 ADD_TABLE(l_tbl_name);
127 l_rownum := l_rownum + 1;
128 end if;
129 --debug('Fetched ' || l_tbl_name || ' to BSC_TMP_BIG_IN_COND' );
130 end loop;
131 debug(l_rownum || ' rows fetched in INIT_RELATED_TABLES');
132 return l_rownum;
133 close cur_init_tbl;
134 EXCEPTION
135 WHEN OTHERS THEN
136 close cur_init_tbl;
137 raise;
138 END;
139
140 FUNCTION MARK_TABLES_BY_INDICATORS( p_stmtWhereInTables varchar2, p_stmtTempWhereInTables varchar2)
141 RETURN NUMBER
142 IS
143 l_stmt varchar2(2000);
144 cur_tbl_mark_by_ind curType;
145 l_tbl_name varchar2(1000);
146 l_stmtWhereNotInTables varchar2(1000);
147 l_rownum number :=0;
148 BEGIN
149 l_stmtWhereNotInTables := p_stmtWhereInTables ;
150 l_stmt :=
151 ' SELECT TABLE_NAME ' ||
152 ' FROM BSC_KPI_DATA_TABLES_V ' ||
153 ' WHERE INDICATOR IN ( ' ||
154 ' SELECT INDICATOR ' ||
155 ' FROM BSC_KPI_DATA_TABLES_V ' ||
156 ' WHERE ' || p_stmtTempWhereInTables ||
157 ' ) ' ||
158 ' AND TABLE_NAME IS NOT NULL' ||
159 ' MINUS ' || l_stmtWhereNotInTables;
160
161 debug('Executing '|| l_stmt);
162
163 open cur_tbl_mark_by_ind for l_stmt;
164 loop
165 FETCH cur_tbl_mark_by_ind INTO l_tbl_name;
166 exit when cur_tbl_mark_by_ind%NOTFOUND;
167 ADD_TABLE(l_tbl_name);
168 l_rownum := l_rownum+1;
169 -- debug('Fetched ' || l_tbl_name || ' to BSC_TMP_BIG_IN_COND' );
170 end loop;
171 close cur_tbl_mark_by_ind;
172 debug(l_rownum || ' rows fetched in MARK_TABLES_BY_INDICATORS ');
173
174 return l_rownum;
175 EXCEPTION
176 WHEN OTHERS THEN
177 close cur_tbl_mark_by_ind;
178 raise;
179 END;
180
181 FUNCTION MARK_TABLES( p_stmtWhereInTables varchar2, p_stmtTempWhereInSrcTables varchar2,
182 p_stmtTempWhereInTables varchar2 )
183 RETURN NUMBER
184 IS
185 l_stmt varchar2(2000);
186 cur_tbl_mark curType;
187 l_tbl_name varchar2(1000);
188 l_stmtWhereNotInTables varchar2(1000);
189 l_rownum number := 0;
190 BEGIN
191 REFRESH_BSC_TMP_BIG_IN_COND;
192
193 --l_stmtWhereNotInTables := ' NOT ( ' || p_stmtWhereInTables || ' ) ' ;
194 l_stmtWhereNotInTables := p_stmtWhereInTables ;
195
196 l_stmt :=
197 ' SELECT * from ( SELECT TABLE_NAME ' ||
198 ' FROM BSC_DB_TABLES_RELS WHERE ' || p_stmtTempWhereInSrcTables ||
199 ' UNION ' ||
200 ' SELECT SOURCE_TABLE_NAME ' ||
201 ' FROM BSC_DB_TABLES_RELS WHERE ' || p_stmtTempWhereInTables || ' ) ' ||
202 ' MINUS ' || l_stmtWhereNotInTables;
203
204 debug('Executing '|| l_stmt);
205
206 open cur_tbl_mark for l_stmt;
207 loop
208 FETCH cur_tbl_mark INTO l_tbl_name;
209 exit when cur_tbl_mark%NOTFOUND;
210 ADD_TABLE(l_tbl_name);
211 l_rownum := l_rownum+1;
212 -- debug('Fetched ' || l_tbl_name || ' to BSC_TMP_BIG_IN_COND' );
213 end loop;
214 l_rownum:= l_rownum + MARK_TABLES_BY_INDICATORS( p_stmtWhereInTables, p_stmtTempWhereInTables);
215 close cur_tbl_mark;
216 debug(l_rownum || ' rows fetched in MARK_TABLES ');
217 return l_rownum;
218 EXCEPTION
219 WHEN OTHERS THEN
220 close cur_tbl_mark;
221 raise;
222 END;
223
224 PROCEDURE MARK_INDICATORS(
225 p_stmtWhereInTables varchar2,
226 p_stmtWhereInIndics varchar2
227 )
228 IS
229 l_stmt varchar2(2000);
230 l_kpi number;
231 l_stmtNotWhereInIndics varchar2(2000);
232 l_stmtWhereInIndics varchar2(2000);
233
234 cur_kpi_mark curType;
235 l_rownum number := 0;
236 BEGIN
237 --l_stmtWhereInTables := substr(l_stmtWhereInTables, instr(l_stmtWhereInTables, 'IN') + 2 );
238 l_stmtWhereInIndics:= BSC_APPS.Get_New_Big_In_Cond_Number( 5, 'INDICATOR');
239
240 l_stmtNotWhereInIndics := substr(p_stmtWhereInIndics, instr(p_stmtWhereInIndics, ' IN') + 3 );
241 l_stmt :=
242 'SELECT DISTINCT INDICATOR ' ||
243 ' FROM BSC_KPI_DATA_TABLES_V ' ||
244 ' WHERE TABLE_NAME IN ( ' || p_stmtWhereInTables || ' ) ' ||
245 --' WHERE ( ' || p_stmtWhereInTables || ' ) ' ||
246 ' MINUS ' || l_stmtNotWhereInIndics ;
247 debug('executing ' || l_stmt);
248 open cur_kpi_mark for l_stmt;
249 loop
250 FETCH cur_kpi_mark INTO l_kpi;
251 exit when cur_kpi_mark%NOTFOUND;
252 BSC_APPS.Add_Value_Big_In_Cond( 5, l_kpi );
253
254 end loop;
255 close cur_kpi_mark;
256 END;
257
258 PROCEDURE GET_RELATED_INDICATORS
259 IS
260 l_stmtWhereInIndics varchar2(2000);
261 l_stmtWhereInTables varchar2(2000);
262 l_stmtTempWhereInSrcTables varchar2(2000);
263 l_stmtTempWhereInSTables varchar2(2000);
264 l_rownum number :=0;
265 l_rowmarked number;
266 l_rec_level number := 0 ;
267 BEGIN
268 l_stmtWhereInIndics:= BSC_APPS.Get_New_Big_In_Cond_Number( 1, 'INDICATOR');
269 l_stmtWhereInTables := BSC_APPS.Get_New_Big_In_Cond_Varchar2( 3, 'TABLE_NAME');
270 l_stmtTempWhereInSrcTables := BSC_APPS.Get_New_Big_In_Cond_Varchar2( 4, 'SOURCE_TABLE_NAME');
271 l_stmtTempWhereInSTables := BSC_APPS.Get_New_Big_In_Cond_Varchar2( 4, 'TABLE_NAME');
272 l_stmtWhereInTables := substr(l_stmtWhereInTables, instr(l_stmtWhereInTables, 'IN') + 2 );
273
274
275 debug('l_stmtWhereInIndics '||l_stmtWhereInIndics);
276 debug('l_stmtWhereInTables ' || l_stmtWhereInTables);
277 debug('l_stmtTempWhereInSrcTables ' || l_stmtTempWhereInSrcTables);
278 debug('l_stmtTempWhereInSTables ' || l_stmtTempWhereInSTables);
279
280 For i in 1..G_KPI_TABLE_SIZE
281 loop
282 BSC_APPS.Add_Value_Big_In_Cond(1, G_KPI_TABLE(i).indicator);
283 -- debug('Fetched ' || G_KPI_TABLE(i).indicator || ' to BSC_TMP_BIG_IN_COND' );
284 end loop;
285 l_rownum := INIT_RELATED_TABLES( l_stmtWhereInIndics);
286
287 while (l_rec_level < G_REC_LEVEL)
288 loop
289 debug('Recursive ' || l_rec_level );
290 l_rowmarked := MARK_TABLES( l_stmtWhereInTables, l_stmtTempWhereInSrcTables, l_stmtTempWhereInSTables);
291 l_rownum := l_rownum + l_rowmarked;
292 l_rec_level := l_rec_level + 1;
293
294 exit when (l_rowmarked = 0);
295 end loop;
296 debug('Toatl ' || l_rownum || ' rows fetched ');
297 MARK_INDICATORS( l_stmtWhereInTables ,l_stmtWhereInIndics );
298
299 END;
300
301 END BSC_BIS_PMDLDR_DELDATA;