DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_PB_USG

Source


1 PACKAGE BODY cz_pb_usg AS
2 /*	$Header: czpbusgb.pls 120.2 2006/04/25 03:45:18 kdande ship $	*/
3 
4 FUNCTION INVERT_MAP(usage_map IN VARCHAR2)
5 RETURN VARCHAR2
6 IS LANGUAGE JAVA
7 NAME 'oracle.apps.cz.utilities.EffectivityUtilities.invertMap (java.lang.String)
8 return java.lang.String';
9 
10 FUNCTION MAP_LESS_USAGE_ID(usage_id	IN NUMBER, usage_map IN VARCHAR2 )
11 RETURN VARCHAR2
12 AS LANGUAGE JAVA NAME 'oracle.apps.cz.utilities.EffectivityUtilities.mapLessUsageId(int, java.lang.String)
13 return java.lang.String';
14 
15 PROCEDURE REMOVE_USAGE_ID(usage_id IN NUMBER, usage_map IN OUT NOCOPY VARCHAR2) AS
16 BEGIN
17   usage_map := MAP_LESS_USAGE_ID(usage_id, usage_map);
18 END REMOVE_USAGE_ID;
19 
20 FUNCTION MAP_PLUS_USAGE_ID(usage_id IN NUMBER, usage_map IN	VARCHAR2 )
21 RETURN VARCHAR2
22 AS LANGUAGE JAVA NAME 'oracle.apps.cz.utilities.EffectivityUtilities.mapPlusUsageId(int, java.lang.String)
23 return java.lang.String';
24 
25 PROCEDURE ADD_USAGE_ID(usage_id IN	NUMBER, usage_map	IN OUT NOCOPY VARCHAR2)
26 AS
27 BEGIN
28   usage_map := MAP_PLUS_USAGE_ID(usage_id, usage_map);
29 END ADD_USAGE_ID;
30 
31 FUNCTION MAP_HAS_USAGE_ID(usage_id	IN	NUMBER, usage_map	IN	VARCHAR2)
32 RETURN NUMBER
33 AS LANGUAGE JAVA NAME 'oracle.apps.cz.utilities.EffectivityUtilities.mapHasUsageId(int, java.lang.String)
34 return int';
35 
36 FUNCTION MAP_HAS_USAGE_NAME(usage_name IN	VARCHAR2,usage_map IN VARCHAR2)
37 RETURN NUMBER
38 IS
39 usageId	NUMBER;
40 answer	NUMBER;
41 BEGIN
42   SELECT model_usage_id INTO usageId
43     FROM  cz_model_usages
44   WHERE name = usage_name;
45   answer := MAP_HAS_USAGE_ID(usageId, usage_map);
46   RETURN answer;
47 EXCEPTION
48 WHEN NO_DATA_FOUND THEN
49 	RETURN -1; -- The named usage dosen't exist
50 END MAP_HAS_USAGE_NAME;
51 
52 FUNCTION MAP_LESS_USAGE_NAME(usage_name IN VARCHAR2,usage_map IN VARCHAR2)
53 RETURN VARCHAR2
54 AS
55 usageId	NUMBER;
56 outMap	VARCHAR2(16);
57 BEGIN
58   SELECT model_usage_id INTO usageId
59     FROM  cz_model_usages
60   WHERE name = usage_name;
61   outMap := MAP_LESS_USAGE_ID(usageId, usage_map);
62   RETURN outMap;
63 EXCEPTION
64 -- Return '-1' if the named usage dosen't exist
65   WHEN NO_DATA_FOUND THEN RETURN '-1';
66 END MAP_LESS_USAGE_NAME;
67 
68 
69 PROCEDURE REMOVE_USAGE_NAME(usage_name	IN	VARCHAR2,usage_map IN OUT NOCOPY VARCHAR2)
70 AS
71 tmp_map VARCHAR2(16);
72 BEGIN
73   tmp_map := MAP_LESS_USAGE_NAME(usage_name, usage_map);
74   IF tmp_map <> '-1' THEN
75     usage_map := tmp_map;
76   ELSE
77     RAISE_APPLICATION_ERROR (-20001,
78       'Usage does not exist');
79   END IF;
80 END REMOVE_USAGE_NAME;
81 
82 
83 FUNCTION MAP_PLUS_USAGE_NAME(usage_name IN VARCHAR2,usage_map IN	VARCHAR2)
84 RETURN VARCHAR2
85 AS
86 usageId	NUMBER;
87 outMap	VARCHAR2(16);
88 BEGIN
89   SELECT model_usage_id INTO usageId
90     FROM  cz_model_usages
91   WHERE name = usage_name;
92   outMap := MAP_PLUS_USAGE_ID(usageId, usage_map);
93   RETURN outMap;
94 EXCEPTION
95 -- Return '-1' if the named usage dosen't exist
96   WHEN NO_DATA_FOUND THEN RETURN '-1';
97 END MAP_PLUS_USAGE_NAME;
98 
99 
100 PROCEDURE ADD_USAGE_BY_NAME(usage_name	IN	VARCHAR2,
101                             usage_map	IN   OUT NOCOPY VARCHAR2
102 	        	   ) AS
103 tmp_map VARCHAR2(16);
104 BEGIN
105   tmp_map := MAP_PLUS_USAGE_NAME(usage_name, usage_map);
106   IF tmp_map <> '-1' THEN
107     usage_map := tmp_map;
108   ELSE
109     RAISE_APPLICATION_ERROR (-20001,
110       'Usage does not exist');
111   END IF;
112 END ADD_USAGE_BY_NAME;
113 
114 
115 FUNCTION LIST_USAGES_IN_MAP_STRING(usage_map	IN	VARCHAR2)
116 RETURN VARCHAR2
117 AS LANGUAGE JAVA
118 NAME 'oracle.apps.cz.utilities.EffectivityUtilities.listUsagesInMap (java.lang.String)
119 return java.lang.String';
120 
121 
122 FUNCTION LIST_USAGES_IN_MAP(usage_map IN	VARCHAR2)
123 RETURN USAGE_NAME_LIST
124 AS
125 usages_list USAGE_NAME_LIST;
126 usages_string VARCHAR2(16400);
127 v_index NUMBER :=1;
128 BEGIN
129   usages_string := LIST_USAGES_IN_MAP_STRING(usage_map);
130   WHILE length(usages_string) >0 LOOP
131     usages_list(v_index) := SUBSTR(usages_string, 1, INSTR(usages_string, '|') - 1);
132     usages_string := SUBSTR(usages_string, INSTR(usages_string, '|') + 1);
133     v_index := v_index+1;
134   END LOOP;
135   RETURN usages_list;
136 END LIST_USAGES_IN_MAP;
137 -----------
138 PROCEDURE DELETE_USAGE(usageId		IN	NUMBER,
139 		       	delete_status    IN OUT NOCOPY  VARCHAR2)
140 AS
141 
142 
143 TYPE t_indexes IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
144 TYPE t_mask	IS TABLE OF cz_ps_nodes.effective_usage_mask%TYPE INDEX BY BINARY_INTEGER;
145 
146 v_nodes		t_indexes;
147 v_rules		t_indexes;
148 v_masks_nodes	t_mask;
149 v_masks_rules	t_mask;
150 
151 
152 v_new_mask	VARCHAR2(16);
153 v_last_old_mask	VARCHAR2(16);
154 v_first_index BINARY_INTEGER;
155 
156 BEGIN
157 	v_nodes.DELETE;
158 	v_rules.DELETE;
159 	v_masks_nodes.DELETE;
160 	v_masks_rules.DELETE;
161 
162 
163 	BEGIN
164 		SELECT ps_node_id,
165 		       effective_usage_mask
166 		BULK
167 		COLLECT
168 		INTO	v_nodes,
169 			v_masks_nodes
170 		FROM cz_ps_nodes
171 		WHERE   effective_usage_mask NOT IN ('0', '0000000000000000')
172 		ORDER BY effective_usage_mask;
173 	EXCEPTION
174 	WHEN OTHERS THEN
175 	 NULL;
176 	END;
177 
178 	BEGIN
179 		SELECT rule_id,
180 		       effective_usage_mask
181 		BULK
182 		COLLECT
183 		INTO	v_rules,
184 			v_masks_rules
185 		FROM cz_rules
186 		WHERE   effective_usage_mask NOT IN ('0', '0000000000000000')
187 		ORDER BY effective_usage_mask;
188 	EXCEPTION
189 	WHEN OTHERS THEN
190 	 NULL;
191 	END;
192 
193 
194 	BEGIN
195 		UPDATE cz_model_usages
196 		SET     in_use = 'X'
197 		WHERE model_usage_id = usageId;
198 
199   		DELETE FROM cz_publication_usages
200     		WHERE usage_id = usageId;
201 
202 		DELETE FROM cz_rp_entries
203 		WHERE object_type ='USG' and object_id = usageId;
204 
205 		IF (v_nodes.COUNT > 0) THEN
206 			v_first_index := v_masks_nodes.FIRST;
207 			v_last_old_mask := v_masks_nodes(v_first_index);
208 			v_new_mask := MAP_LESS_USAGE_ID(usageId, v_masks_nodes(v_first_index));
209 			v_masks_nodes(v_first_index) := v_new_mask;
210 
211 			FOR i IN v_masks_nodes.NEXT(v_first_index)..v_masks_nodes.LAST
212 			LOOP
213 			   IF v_masks_nodes(i) = v_last_old_mask THEN
214 				v_masks_nodes(i) := v_masks_nodes(i-1);
215 			   ELSE
216 				v_last_old_mask := v_masks_nodes(i);
217 
218 			  	v_new_mask := MAP_LESS_USAGE_ID(usageId, v_masks_nodes(i));
219 			  	v_masks_nodes(i) := v_new_mask;
220 			   END IF;
221 			END LOOP;
222 
223 			FORALL i IN v_nodes.FIRST..v_nodes.LAST
224 	 		 UPDATE cz_ps_nodes
225 	 		    SET effective_usage_mask = v_masks_nodes(i)
226 	 		 WHERE  ps_node_id = v_nodes(i);
227 
228 		END IF;
229 
230 		IF (v_rules.COUNT > 0) THEN
231 			v_first_index := v_masks_rules.FIRST;
232 			v_last_old_mask := v_masks_rules(v_first_index);
233 			v_new_mask := MAP_LESS_USAGE_ID(usageId, v_masks_rules(v_first_index));
234 			v_masks_rules(v_first_index) := v_new_mask;
235 
236 			FOR i IN v_masks_rules.NEXT(v_first_index)..v_masks_rules.LAST
237 			LOOP
238 			   IF v_masks_rules(i) = v_last_old_mask THEN
239 				v_masks_rules(i) := v_masks_rules(i-1);
240 			   ELSE
241 				v_last_old_mask := v_masks_rules(i);
242 
243 			  	v_new_mask := MAP_LESS_USAGE_ID(usageId, v_masks_rules(i));
244 			  	v_masks_rules(i) := v_new_mask;
245 			   END IF;
246 			END LOOP;
247 
248 			FORALL i IN v_rules.FIRST..v_rules.LAST
249 	  		UPDATE cz_rules
250 	     		SET    effective_usage_mask = v_masks_rules(i)
251 	  		WHERE  rule_id = v_rules(i);
252 		END IF;
253 	EXCEPTION
254 	WHEN OTHERS THEN
255 	delete_status := '-1';
256 	END;
257 
258 	IF SQLCODE = 0 THEN
259   		delete_status := '0';
260 	END IF;
261 
262 
263 END DELETE_USAGE;
264 
265 END;