DBA Data[Home] [Help]

PACKAGE BODY: APPS.QLTSTORB

Source


1 PACKAGE BODY QLTSTORB as
2 /* $Header: qltstorb.plb 115.2 2002/11/27 19:34:44 jezheng ship $ */
3 
4 -- 3/8/95 - CREATED
5 -- Kevin Wiggen
6 
7 --  This is a storage unit used for creating the FK Lookups in the
8 --  Selection Criteria Engine, and in the Dynamic View Creation
9 --
10   -- Well actually this is the server and we don't have record groups,
11   -- so I'm am going to fake it with PLSQL tables
12   -- In this way the procedures can be the same for the client and server
13 
14   TYPE numtable IS TABLE OF NUMBER
15         INDEX BY BINARY_INTEGER;
16   TYPE char30table IS TABLE OF VARCHAR2(30)
17         INDEX BY BINARY_INTEGER;
18   TYPE char15table IS TABLE OF VARCHAR2(15)
19         INDEX BY BINARY_INTEGER;
20   TYPE char80table IS TABLE OF VARCHAR2(80)
21         INDEX BY BINARY_INTEGER;
22   TYPE char5table IS TABLE OF VARCHAR2(5)
23         INDEX BY BINARY_INTEGER;
24   TYPE char2000table IS TABLE OF VARCHAR2(2000)
25         INDEX BY BINARY_INTEGER;
26 
27  -- The following are used to reset the tables
28 
29   empty_numtable numtable;
30   empty_char30table char30table;
31   empty_char15table char15table;
32   empty_char80table char80table;
33   empty_char5table char5table;
34   empty_char2000table char2000table;
35 
36  -- The following mimic the kevin record group on the client
37 
38   char_num numtable;
39   hardcoded_column char30table;
40   result_column_name char30table;
41   datatype numtable;
42   op char15table;
43   low char80table;
44   high char80table;
45   sel numtable;
46   disp_len numtable;
47   promptt char80table;
48   orderr numtable;
49   totall numtable;
50   functionn numtable;
51   fxn_promptt char30table;
52   precisionn numtable;
53   fk_lookup_typee numtable;
54   fk_table_namee char30table;
55   fk_table_short_namee char5table;
56   pk_idd char30table;
57   pk_idd2 char30table;
58   pk_idd3 char30table;
59   fk_idd char30table;
60   fk_idd2 char30table;
61   fk_idd3 char30table;
62   fk_meaningg char30table;
63   fk_descc char30table;
64   fk_add_wheree char2000table;
65   table_namee char80table;
66   parent_block_namee char30table;
67   list_idd numtable;
68   TOTAL_ROWS BINARY_INTEGER := 0;
69 
70  -- The following mimic the daedsiluap record group on the client
71 
72   from_partial char2000table;
73   ROWS_FROM BINARY_INTEGER := 0;
74 
75  -- The following mimic the maggard record group on the client
76 
77   where_partial char2000table;
78   ROWS_WHERE BINARY_INTEGER := 0;
79 
80 
81    PROCEDURE MAKE_REC_GROUP IS
82 
83 
84   BEGIN
85     char_num := empty_numtable;
86     hardcoded_column := empty_char30table;
87     result_column_name := empty_char30table;
88     datatype := empty_numtable;
89     op := empty_char15table;
90     low := empty_char80table;
91     high := empty_char80table;
92     sel := empty_numtable;
93     disp_len := empty_numtable;
94     promptt := empty_char80table;
95     orderr := empty_numtable;
96     totall := empty_numtable;
97     functionn := empty_numtable;
98     fxn_promptt := empty_char30table;
99     precisionn := empty_numtable;
100     fk_table_namee := empty_char30table;
101     fk_table_short_namee := empty_char5table;
102     pk_idd := empty_char30table;
103     pk_idd2 := empty_char30table;
104     pk_idd3 := empty_char30table;
105     fk_idd := empty_char30table;
106     fk_idd2 := empty_char30table;
107     fk_idd3 := empty_char30table;
108     fk_meaningg := empty_char30table;
109     fk_descc := empty_char30table;
110     fk_add_wheree := empty_char2000table;
111     table_namee := empty_char80table;
112     parent_block_namee := empty_char30table;
113     list_idd := empty_numtable;
114     TOTAL_ROWS := 0;
115   END MAKE_REC_GROUP;
116 
117 
118    PROCEDURE ADD_ROW_TO_REC_GROUP (NUM NUMBER,
119 				   HARD_COLUMN VARCHAR2,
120 				   RES_COL_NAME VARCHAR2,
121  			  	   DATA NUMBER,
122 				   OPER VARCHAR2,
123 				   LOW_VAL VARCHAR2,
124 				   HIGH_VAL VARCHAR2,
125                                    SELE NUMBER,
126 				   DISP_LENGTH NUMBER,
127 				   PROMPT VARCHAR2,
128 				   ORDER_SEQ NUMBER,
129 				   TOTAL NUMBER,
130 				   FUNCTION NUMBER,
131 				   FXN_PROMPT VARCHAR2,
132 				   PRECISION NUMBER,
133 				   FK_LOOK_TYPE NUMBER,
134 				   FK_TABL_NAME VARCHAR2,
135 				   FK_TABL_SH_NAME VARCHAR2,
136 				   PK_ID VARCHAR2,
137 			           PK_ID2 VARCHAR2,
138   				   PK_ID3 VARCHAR2,
139 				   FK_ID VARCHAR2,
140 				   FK_ID2 VARCHAR2,
141 				   FK_ID3 VARCHAR2,
142 				   FK_MEANING VARCHAR2,
143 				   FK_DESC VARCHAR2,
144 				   FK_ADD_WHERE VARCHAR2,
145 				   TABLE_NAME VARCHAR2,
146 				   PARENT_BLOCK_NAME VARCHAR2,
147 				   LIST_ID NUMBER) IS
148 
149   BEGIN
150 
151     TOTAL_ROWS := TOTAL_ROWS + 1;
152     char_num(TOTAL_ROWS) := NUM;
153     hardcoded_column(TOTAL_ROWS) := HARD_COLUMN;
154     result_column_name(TOTAL_ROWS) := RES_COL_NAME;
155     datatype(TOTAL_ROWS) := DATA;
156     op(TOTAL_ROWS) := OPER;
157     low(TOTAL_ROWS) := LOW_VAL;
158     high(TOTAL_ROWS) := HIGH_VAL;
159     sel(TOTAL_ROWS) := SELE;
160     disp_len(TOTAL_ROWS) := DISP_LENGTH;
161     promptt(TOTAL_ROWS) := PROMPT;
162     orderr(TOTAL_ROWS) := ORDER_SEQ;
163     totall(TOTAL_ROWS) := TOTAL;
164     functionn(TOTAL_ROWS) := FUNCTION;
165     fxn_promptt(TOTAL_ROWS) := FXN_PROMPT;
166     precisionn(TOTAL_ROWS) := PRECISION;
167     fk_lookup_typee(TOTAL_ROWS) := FK_LOOK_TYPE;
168     fk_table_namee(TOTAL_ROWS) := FK_TABL_NAME;
169     fk_table_short_namee(TOTAL_ROWS) := FK_TABL_SH_NAME;
170     pk_idd(TOTAL_ROWS) := PK_ID;
171     pk_idd2(TOTAL_ROWS) := PK_ID2;
172     pk_idd3(TOTAL_ROWS) := PK_ID3;
173     fk_idd(TOTAL_ROWS) := FK_ID;
174     fk_idd2(TOTAL_ROWS) := FK_ID2;
175     fk_idd3(TOTAL_ROWS) := FK_ID3;
176     fk_meaningg(TOTAL_ROWS) := FK_MEANING;
177     fk_descc(TOTAL_ROWS) := FK_DESC;
178     fk_add_wheree(TOTAL_ROWS) := FK_ADD_WHERE;
179     table_namee(TOTAL_ROWS) := TABLE_NAME;
180     parent_block_namee(TOTAL_ROWS) := PARENT_BLOCK_NAME;
181     list_idd(TOTAL_ROWS) := LIST_ID;
182  END ADD_ROW_TO_REC_GROUP;
183 
184 
185   FUNCTION ROWS_IN_REC_GROUP
186 	RETURN NUMBER IS
187 
188   BEGIN
189     RETURN(TOTAL_ROWS);
190   END ROWS_IN_REC_GROUP;
191 
192   FUNCTION GET_NUMBER(X_COLUMN VARCHAR2, X_ROW NUMBER)
193 	RETURN NUMBER  IS
194 
195   i BINARY_INTEGER;  -- Just to be safe
196 
197   BEGIN
198     i := X_ROW;
199 
200     -- Yes this method is not the best but its the best we can do
201 
202     if X_COLUMN = 'char_num' then
203 	RETURN(char_num(i));
204     elsif X_COLUMN = 'datatype' then
205 	RETURN(datatype(i));
206     elsif X_COLUMN = 'sel' then
207       	RETURN(sel(i));
208     elsif X_COLUMN = 'disp_length' then
209 	RETURN(disp_len(i));
210     end if;
211 
212     if X_COLUMN = 'order' then
213 	RETURN(orderr(i));
214     elsif X_COLUMN = 'total' then
215  	RETURN(totall(i));
216     elsif X_COLUMN = 'function' then
217   	RETURN(functionn(i));
218     elsif X_COLUMN = 'fk_lookup_type' then
219  	RETURN(fk_lookup_typee(i));
220     elsif X_COLUMN = 'precision' then
221 	RETURN(precisionn(i));
222     elsif X_COLUMN = 'list_id' then
223         RETURN(list_idd(i));
224     end if;
225 
226   END GET_NUMBER;
227 
228 
229   FUNCTION GET_CHAR(X_COLUMN VARCHAR2, X_ROW NUMBER)
230 	RETURN VARCHAR2 IS
231 
232    i BINARY_INTEGER;
233 
234   BEGIN
235    i := X_ROW;
236 
237    if X_COLUMN = 'hardcoded_column' then
238 	RETURN(hardcoded_column(i));
239    elsif X_COLUMN = 'result_column_name' then
240 	RETURN(result_column_name(i));
241    elsif X_COLUMN = 'op' then
242 	RETURN(op(i));
243    elsif X_COLUMN = 'low' then
244 	RETURN(low(i));
245    elsif X_COLUMN = 'high' then
246  	RETURN(high(i));
247    elsif X_COLUMN = 'prompt' then
248  	RETURN(promptt(i));
249    end if;
250 
251    if X_COLUMN = 'fxn_prompt' then
252 	RETURN(fxn_promptt(i));
253    elsif X_COLUMN = 'fk_table_name' then
254  	RETURN(fk_table_namee(i));
255    elsif X_COLUMN = 'fk_table_short_name' then
256 	RETURN(fk_table_short_namee(i));
257    elsif X_COLUMN = 'pk_id' then
258 	RETURN(pk_idd(i));
259    elsif X_COLUMN = 'pk_id2' then
260 	RETURN(pk_idd2(i));
261    elsif X_COLUMN = 'pk_id3' then
262 	RETURN(pk_idd3(i));
263    end if;
264 
265    if X_COLUMN = 'fk_id' then
266 	RETURN(fk_idd(i));
267    elsif X_COLUMN = 'fk_id2' then
268 	RETURN(fk_idd2(i));
269    elsif X_COLUMN = 'fk_id3' then
270 	RETURN(fk_idd3(i));
271    elsif X_COLUMN = 'fk_meaning' then
272 	RETURN(fk_meaningg(i));
273    elsif X_COLUMN = 'fk_desc' then
274  	RETURN(fk_descc(i));
275    elsif X_COLUMN = 'fk_add_where' then
276  	RETURN(fk_add_wheree(i));
277    end if;
278 
279    if X_COLUMN = 'table_name' then
280         RETURN(table_namee(i));
281    elsif X_COLUMN = 'parent_block_name' then
282         RETURN(parent_block_namee(i));
283    end if;
284 
285   end GET_CHAR;
286 
287   PROCEDURE KILL_REC_GROUP IS
288 
289   BEGIN
290     char_num := empty_numtable;
291     hardcoded_column := empty_char30table;
292     result_column_name := empty_char30table;
293     datatype := empty_numtable;
294     op := empty_char15table;
295     low := empty_char80table;
296     high := empty_char80table;
297     sel := empty_numtable;
298     disp_len := empty_numtable;
299     promptt := empty_char80table;
300     orderr := empty_numtable;
301     totall := empty_numtable;
302     functionn := empty_numtable;
303     fxn_promptt := empty_char30table;
304     precisionn := empty_numtable;
305     fk_table_namee := empty_char30table;
306     fk_table_short_namee := empty_char5table;
307     pk_idd := empty_char30table;
308     pk_idd2 := empty_char30table;
309     pk_idd3 := empty_char30table;
310     fk_idd := empty_char30table;
311     fk_idd2 := empty_char30table;
312     fk_idd3 := empty_char30table;
313     fk_meaningg := empty_char30table;
314     fk_descc := empty_char30table;
315     fk_add_wheree := empty_char2000table;
316     table_namee := empty_char80table;
317     parent_block_namee := empty_char30table;
318     list_idd := empty_numtable;
319     TOTAL_ROWS := 0;
320   END KILL_REC_GROUP;
321 
322 
323   PROCEDURE Make_FROM_Rec_grp IS
324 
325   BEGIN
326     from_partial := empty_char2000table;
327     ROWS_FROM := 0;
328   END Make_FROM_Rec_grp;
329 
330   PROCEDURE Kill_FROM_Rec_grp IS
331 
332   BEGIN
333     from_partial := empty_char2000table;
334     ROWS_FROM := 0;
335   END Kill_FROM_Rec_grp;
336 
337 
338   Procedure ADD_ROW_TO_FROM_REC_GROUP(table_name VARCHAR2) IS
339     i BINARY_INTEGER := 1;
340     PRESENT  BOOLEAN := FALSE;
341 
342   BEGIN
343     WHILE (i <= ROWS_FROM) and (not PRESENT) LOOP
344           if table_name = from_partial(i) then
345 	     PRESENT := TRUE;
346           else
347  	     i := i + 1;
348 	  end if;
349     end LOOP;
350     if (not PRESENT) then
351         ROWS_FROM := ROWS_FROM + 1;
352         from_partial(ROWS_FROM) := table_name;
353     end if;
354   END ADD_ROW_TO_FROM_REC_GROUP;
355 
356 
357   Function Create_From_Clause
358  	Return VARCHAR2 IS
359 
360     i BINARY_INTEGER := 1;
361     V_FROM VARCHAR2(32767) := null;
362 
363   BEGIN
364     while i <= ROWS_FROM LOOP
365 	V_FROM := ', ' || from_partial(i) || V_FROM;
366         i := i + 1;
367     end LOOP;
368     V_FROM := 'FROM ' || SUBSTR(V_FROM,3);
369     from_partial := empty_char2000table;
370     ROWS_FROM := 0;
371     RETURN(V_FROM);
372   END Create_From_Clause;
373 
374   PROCEDURE Make_WHERE_Rec_grp IS
375 
376   BEGIN
377     where_partial := empty_char2000table;
378     ROWS_WHERE := 0;
379   END Make_WHERE_Rec_grp;
380 
381   PROCEDURE Kill_WHERE_Rec_grp IS
382 
383   BEGIN
384     where_partial := empty_char2000table;
385     ROWS_WHERE := 0;
386   END Kill_WHERE_Rec_grp;
387 
388   Procedure ADD_ROW_TO_WHERE_REC_GROUP (X_WHERE_PORTION VARCHAR2) IS
389     i BINARY_INTEGER := 1;
390     PRESENT  BOOLEAN := FALSE;
391 
392   BEGIN
393     WHILE (i <= ROWS_WHERE) and (not PRESENT) LOOP
394           if X_WHERE_PORTION = where_partial(i) then
395 	     PRESENT := TRUE;
396           else
397  	     i := i + 1;
398 	  end if;
399     end LOOP;
400     if (not PRESENT) then
401         ROWS_WHERE := ROWS_WHERE + 1;
402         where_partial(ROWS_WHERE) := X_WHERE_PORTION;
403     end if;
404   END ADD_ROW_TO_WHERE_REC_GROUP;
405 
406 
407   Function Create_WHERE_Clause
408  	Return VARCHAR2 IS
409 
410    i BINARY_INTEGER := 1;
411    V_WHERE VARCHAR2(32767) := null;
412 
413   BEGIN
414    while i <= ROWS_WHERE LOOP
415          V_WHERE := V_WHERE || ' AND ' || where_partial(i);
416  	 i := i + 1;
417    end LOOP;
418    if V_WHERE IS NOT NULL THEN
419       V_WHERE := 'WHERE ' || SUBSTR(V_WHERE,5);
420    end if;
421    where_partial := empty_char2000table;
422    ROWS_WHERE := 0;
423    RETURN(V_WHERE);
424   END Create_WHERE_Clause;
425 
426 END QLTSTORB;
427