DBA Data[Home] [Help]

PACKAGE BODY: APPS.BOMPBCMP

Source


4 |   Copyright (c) 1993 Oracle Corporation Belmont, California, USA          |
1 PACKAGE BODY BOMPBCMP AS
2 /* $Header: BOMBCMPB.pls 120.1.12010000.2 2008/10/28 09:14:29 gliang ship $ */
3 /*==========================================================================+
5 |                          All rights reserved.                             |
6 +===========================================================================+
7 |                                                                           |
8 | File Name    : BOMBCMPB.pls                                               |
9 | DESCRIPTION  :                                                            |
10 |                This file creates a packaged procedure that populates a    |
11 |                temporary table with the results of a bill of material     |
12 |                comparison.  It is called from both the bill of material   |
13 |                comparison inquiry and report.                             |
14 +==========================================================================*/
15 
16   PROCEDURE BOM_BILL_COMPARE
17    (SEQ_ID 			IN	NUMBER,
18     BILL_SEQ_ID1		IN	NUMBER,
19     BILL_SEQ_ID2		IN	NUMBER,
20     IMPLEMENTED_CODE1		IN	NUMBER,
21     IMPLEMENTED_CODE2  		IN      NUMBER,
22     DISPLAY_CODE1		IN	NUMBER,
23     DISPLAY_CODE2		IN	NUMBER,
24     CUTOFF_DATE1		IN	DATE,
25     CUTOFF_DATE2		IN	DATE,
26     ITEM_NUM_CODE		IN	NUMBER,
27     OP_SEQ_CODE			IN	NUMBER,
28     EFF_DATE_CODE		IN	NUMBER,
29     DIS_DATE_CODE 		IN	NUMBER,
30     IMPL_CODE			IN	NUMBER,
31     QUANTITY_CODE		IN	NUMBER,
32     OPTIONAL_CODE		IN	NUMBER,
33     PLAN_FACT_CODE		IN	NUMBER,
34     DIFF_CODE			IN      NUMBER,
35     RETURN_CODE		 IN OUT NOCOPY /* file.sql.39 change */ 	NUMBER)
36 IS
37 
38    COUNT_DUP 	NUMBER;
39 
40 BEGIN
41 
42 COUNT_DUP := 0;
43 RETURN_CODE := 0;
44 
45 /* First, insert all the appropriate rows from the first bill of material,
46 according to display code and implemented code:
47 	DISPLAY CODE  1 = All
48 		      2 = Current
49                       3 = Current and future
50 	IMPEMENTED CODE   1 = Implemented only
51 			  2 = Implemented and unimplemented
52 */
53 
54 INSERT INTO BOM_COMPARISON_TEMP
55         (SEQUENCE_ID,
56          ASSEMBLY_ID1,
57          ITEM_NUM,
58          COMPONENT_QUANTITY,
59          OPERATION_SEQ_NUM,
60          PLANNING_FACTOR,
61          EFFECTIVITY_DATE,
62          DISABLE_DATE,
63          IMPLEMENTATION_DATE,
64          OPTIONAL,
65          COMPONENT_SEQUENCE_ID1)
66 SELECT   SEQ_ID,
67          COMPONENT_ITEM_ID,
68          ITEM_NUM,
69          COMPONENT_QUANTITY,
70          OPERATION_SEQ_NUM,
71          PLANNING_FACTOR,
72          EFFECTIVITY_DATE,
73          DISABLE_DATE,
74          IMPLEMENTATION_DATE,
75          OPTIONAL,
76          COMPONENT_SEQUENCE_ID
77 FROM  BOM_INVENTORY_COMPONENTS C1
78 WHERE C1.BILL_SEQUENCE_ID = BILL_SEQ_ID1
79 AND   NVL(ECO_FOR_PRODUCTION,2) = 2
80 AND   ((IMPLEMENTED_CODE1 = 2)
81       OR
82       (IMPLEMENTED_CODE1 = 1
83        AND IMPLEMENTATION_DATE IS NOT NULL)
84       )
85 AND (DISPLAY_CODE1 = 1
86      OR (DISPLAY_CODE1 = 2
87      AND CUTOFF_DATE1 BETWEEN EFFECTIVITY_DATE AND
88           NVL((DISABLE_DATE-(1/86400)), CUTOFF_DATE1 + 1)) --Added for Bug 6689734
89      OR (DISPLAY_CODE1 = 3
90 	AND NVL(DISABLE_DATE, CUTOFF_DATE1 + 1) > CUTOFF_DATE1) --Changed from >= to > for Bug 6689734
91      )
92 AND ((IMPLEMENTED_CODE1 = 2
93      AND (DISPLAY_CODE1 = 1
94          OR
95           (DISPLAY_CODE1 = 2
96            AND EFFECTIVITY_DATE =
97            (SELECT MAX(EFFECTIVITY_DATE)
98            FROM BOM_INVENTORY_COMPONENTS MV2
99               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID1
100               AND   NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
101               AND MV2.COMPONENT_ITEM_ID = C1.COMPONENT_ITEM_ID
102               AND (DECODE(IMPLEMENTATION_DATE, NULL,
103 	      MV2.OLD_COMPONENT_SEQUENCE_ID,
104                   MV2.COMPONENT_SEQUENCE_ID) =
105                   DECODE(C1.IMPLEMENTATION_DATE, NULL,
106                   C1.OLD_COMPONENT_SEQUENCE_ID, C1.COMPONENT_SEQUENCE_ID)
107                 OR MV2.OPERATION_SEQ_NUM = C1.OPERATION_SEQ_NUM)
108               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE1
109               AND NVL(DISABLE_DATE, CUTOFF_DATE1+1) > CUTOFF_DATE1
110              AND NOT EXISTS (SELECT NULL
111                  FROM BOM_INVENTORY_COMPONENTS BICN
112           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID1
113           AND   NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
114          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C1.COMPONENT_SEQUENCE_ID
118      OR
115           AND BICN.ACD_TYPE = 3
116      	 AND BICN.DISABLE_DATE < CUTOFF_DATE1 ))  --Changed from <= to < for Bug 6689734
117        )
119      (DISPLAY_CODE1 = 3
120       AND EFFECTIVITY_DATE =
121       (SELECT MAX(EFFECTIVITY_DATE)
122            FROM BOM_INVENTORY_COMPONENTS MV2
123               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID1
124               AND NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
125               AND MV2.COMPONENT_ITEM_ID = C1.COMPONENT_ITEM_ID
126               AND (DECODE(IMPLEMENTATION_DATE, NULL,
127               MV2.OLD_COMPONENT_SEQUENCE_ID,
128                   MV2.COMPONENT_SEQUENCE_ID) =
129                   DECODE(C1.IMPLEMENTATION_DATE, NULL,
130                   C1.OLD_COMPONENT_SEQUENCE_ID, C1.COMPONENT_SEQUENCE_ID)
131                 OR MV2.OPERATION_SEQ_NUM = C1.OPERATION_SEQ_NUM)
132               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE1
133               AND NVL(DISABLE_DATE, CUTOFF_DATE1+1) > CUTOFF_DATE1
134              AND NOT EXISTS (SELECT NULL
135                  FROM BOM_INVENTORY_COMPONENTS BICN
136           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID1
137             AND NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
138          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C1.COMPONENT_SEQUENCE_ID
139           AND BICN.ACD_TYPE = 3
140         AND BICN.DISABLE_DATE < CUTOFF_DATE1 ))  --Changed from <= to < for Bug 6689734
141         OR EFFECTIVITY_DATE > CUTOFF_DATE1
142        )))
143     OR (IMPLEMENTED_CODE1 = 1
144         AND C1.IMPLEMENTATION_DATE IS NOT NULL));
145 
146 LOOP
147 
148 /* Now, update the rows in the temp table if there is a match with the
149 second bill of material */
150 
151 UPDATE BOM_COMPARISON_TEMP T
152 SET T.COMPONENT_SEQUENCE_ID2 =
153 (SELECT MIN(C.COMPONENT_SEQUENCE_ID)
154 FROM   BOM_INVENTORY_COMPONENTS C
155 WHERE  C.BILL_SEQUENCE_ID = BILL_SEQ_ID2
156 AND    NVL(C.ECO_FOR_PRODUCTION,2) = 2
157 AND    C.COMPONENT_ITEM_ID = T.ASSEMBLY_ID1
158 AND    NOT EXISTS (SELECT 'x'
159                    FROM BOM_COMPARISON_TEMP T3
163 AND    DECODE(ITEM_NUM_CODE, 1, C.ITEM_NUM, T.ITEM_NUM) = T.ITEM_NUM
160                    WHERE T3.COMPONENT_SEQUENCE_ID2 =
161                          C.COMPONENT_SEQUENCE_ID
162                   AND T3.SEQUENCE_ID = T.SEQUENCE_ID)
164 AND    DECODE(OP_SEQ_CODE, 1, C.OPERATION_SEQ_NUM,
165        T.OPERATION_SEQ_NUM) = T.OPERATION_SEQ_NUM
166 AND    DECODE(EFF_DATE_CODE, 1, C.EFFECTIVITY_DATE,
167        T.EFFECTIVITY_DATE) = T.EFFECTIVITY_DATE
168 AND    NVL(DECODE(DIS_DATE_CODE, 1, C.DISABLE_DATE, T.DISABLE_DATE),
169        SYSDATE) = NVL(T.DISABLE_DATE, SYSDATE)
170 AND    ((IMPL_CODE = 1
171          AND C.IMPLEMENTATION_DATE IS NOT NULL
172          AND T.IMPLEMENTATION_DATE IS NOT NULL)
173         OR
174          (IMPL_CODE = 1
175           AND C.IMPLEMENTATION_DATE IS NULL
176           AND T.IMPLEMENTATION_DATE IS NULL)
177         OR
181 AND    NVL(DECODE(PLAN_FACT_CODE, 1, C.PLANNING_FACTOR,
178          (IMPL_CODE = 2))
179 AND    DECODE(QUANTITY_CODE, 1, C.COMPONENT_QUANTITY,
180        T.COMPONENT_QUANTITY) = T.COMPONENT_QUANTITY
182        T.PLANNING_FACTOR), 1) = NVL(T.PLANNING_FACTOR, 1)
183 AND    NVL(DECODE(OPTIONAL_CODE, 1, C.OPTIONAL, T.OPTIONAL), 2) =
184        NVL(T.OPTIONAL, 2)
185 AND   ((IMPLEMENTED_CODE2 = 2)
186        OR
187        (IMPLEMENTED_CODE2 = 1
188         AND C.IMPLEMENTATION_DATE IS NOT NULL))
189 AND (DISPLAY_CODE2 = 1
190      OR (DISPLAY_CODE2 = 2
191      AND CUTOFF_DATE2 BETWEEN EFFECTIVITY_DATE AND
192             NVL((DISABLE_DATE-(1/86400)) , CUTOFF_DATE2 + 1)) --Added for Bug 6689734
193      OR (DISPLAY_CODE2 = 3
194         AND NVL(DISABLE_DATE, CUTOFF_DATE2 + 1) > CUTOFF_DATE2)
195      )
196 AND ((IMPLEMENTED_CODE2 = 2
197      AND (DISPLAY_CODE2 = 1
198          OR
199           (DISPLAY_CODE2 = 2
200            AND EFFECTIVITY_DATE =
201            (SELECT MAX(EFFECTIVITY_DATE)
202            FROM BOM_INVENTORY_COMPONENTS MV2
203               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID2
204 	      AND NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
205               AND MV2.COMPONENT_ITEM_ID = C.COMPONENT_ITEM_ID
206               AND (DECODE(IMPLEMENTATION_DATE, NULL,
207 	      MV2.OLD_COMPONENT_SEQUENCE_ID,
208                   MV2.COMPONENT_SEQUENCE_ID) =
209                   DECODE(C.IMPLEMENTATION_DATE, NULL,
210                   C.OLD_COMPONENT_SEQUENCE_ID, C.COMPONENT_SEQUENCE_ID)
211                 OR MV2.OPERATION_SEQ_NUM = C.OPERATION_SEQ_NUM)
212               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE2
213               AND NVL(DISABLE_DATE, CUTOFF_DATE2+1) > CUTOFF_DATE2
214              AND NOT EXISTS (SELECT NULL
215                  FROM BOM_INVENTORY_COMPONENTS BICN
216           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID2
217 	    AND NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
218          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C.COMPONENT_SEQUENCE_ID
219           AND BICN.ACD_TYPE = 3
220          AND BICN.DISABLE_DATE < CUTOFF_DATE2 )) --changed from <= to < for Bug 6689734
221        )
222      OR
223      (DISPLAY_CODE2 = 3
224       AND EFFECTIVITY_DATE =
225       (SELECT MAX(EFFECTIVITY_DATE)
226            FROM BOM_INVENTORY_COMPONENTS MV2
227               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID2
228 	      AND NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
229               AND MV2.COMPONENT_ITEM_ID = C.COMPONENT_ITEM_ID
230               AND (DECODE(IMPLEMENTATION_DATE, NULL,
231               MV2.OLD_COMPONENT_SEQUENCE_ID,
232                   MV2.COMPONENT_SEQUENCE_ID) =
233                   DECODE(C.IMPLEMENTATION_DATE, NULL,
234                   C.OLD_COMPONENT_SEQUENCE_ID, C.COMPONENT_SEQUENCE_ID)
235                 OR MV2.OPERATION_SEQ_NUM = C.OPERATION_SEQ_NUM)
236               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE2
237               AND NVL(DISABLE_DATE, CUTOFF_DATE2 + 1) > CUTOFF_DATE2
238              AND NOT EXISTS (SELECT NULL
239                  FROM BOM_INVENTORY_COMPONENTS BICN
240           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID2
241 	    AND NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
242          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C.COMPONENT_SEQUENCE_ID
243           AND BICN.ACD_TYPE = 3
244          AND BICN.DISABLE_DATE < CUTOFF_DATE2 ))--changed from <= to < for Bug 6689734
245         OR EFFECTIVITY_DATE > CUTOFF_DATE2
246        )))
247     OR (IMPLEMENTED_CODE2 = 1
248         AND C.IMPLEMENTATION_DATE IS NOT NULL))
249 )
250 WHERE T.SEQUENCE_ID = SEQ_ID
251 AND   T.COMPONENT_SEQUENCE_ID2 IS NULL;
252 
253 /* Make sure that no rows from the second bill of material are matched
254 to two rows in the first bill of material. */
255 
256 SELECT COUNT(*)
257 INTO   COUNT_DUP
258 FROM BOM_COMPARISON_TEMP T
259 WHERE EXISTS
260       (SELECT NULL FROM BOM_COMPARISON_TEMP T2
261        WHERE T.ROWID < T2.ROWID
262        AND   T.SEQUENCE_ID = T2.SEQUENCE_ID
263        AND   T.COMPONENT_SEQUENCE_ID2 = T2.COMPONENT_SEQUENCE_ID2)
264 AND  T.SEQUENCE_ID = SEQ_ID;
265 
266 EXIT WHEN COUNT_DUP = 0;
267 
268 /* If duplicate matches are found, null out one of them */
269 
270 UPDATE BOM_COMPARISON_TEMP T
271 SET COMPONENT_SEQUENCE_ID2 = ''
272 WHERE EXISTS
273       (SELECT NULL FROM BOM_COMPARISON_TEMP T2
274        WHERE T.ROWID < T2.ROWID
275        AND   T.SEQUENCE_ID = T2.SEQUENCE_ID
276        AND   T.COMPONENT_SEQUENCE_ID2 = T2.COMPONENT_SEQUENCE_ID2)
277 AND T.SEQUENCE_ID = SEQ_ID;
278 
279 END LOOP;
280 
281 /* Update the temp table to indicate whether columns that are not
282 comparison criteria are matches */
283 
284 UPDATE BOM_COMPARISON_TEMP T
285 SET (ITEM_NUM,
286      COMPONENT_QUANTITY,
287      OPERATION_SEQ_NUM,
288      EFFECTIVITY_DATE,
289      DISABLE_DATE,
290      IMPLEMENTATION_DATE,
291      PLANNING_FACTOR,
292      OPTIONAL) =
293      (SELECT DECODE(C.ITEM_NUM, T.ITEM_NUM, T.ITEM_NUM, NULL),
294              DECODE(C.COMPONENT_QUANTITY, T.COMPONENT_QUANTITY,
295                     T.COMPONENT_QUANTITY, NULL),
296              DECODE(C.OPERATION_SEQ_NUM, T.OPERATION_SEQ_NUM,
297                     T.OPERATION_SEQ_NUM, NULL),
298              DECODE(TRUNC(C.EFFECTIVITY_DATE), TRUNC(T.EFFECTIVITY_DATE),
299                     T.EFFECTIVITY_DATE, NULL),
300           DECODE(NVL(TRUNC(C.DISABLE_DATE),TO_DATE('01-01-1901','DD-MM-YYYY')),
301                  NVL(TRUNC(T.DISABLE_DATE),TO_DATE('01-01-1901','DD-MM-YYYY')),
302                     T.DISABLE_DATE, NULL),
303            DECODE(DECODE(C.IMPLEMENTATION_DATE, NULL,
304                     TO_DATE('01-01-1901','DD-MM-YYYY'),
308                     TO_DATE('02-01-1901','DD-MM-YYYY')),
305                     TO_DATE('02-01-1901','DD-MM-YYYY')),
306                     DECODE(T.IMPLEMENTATION_DATE,
307                     NULL, TO_DATE('01-01-1901','DD-MM-YYYY'),
309                     T.IMPLEMENTATION_DATE, TO_DATE('01-01-1901','DD-MM-YYYY')),
310              DECODE(NVL(C.PLANNING_FACTOR, -99999),
311                     NVL(T.PLANNING_FACTOR, -99999),
312                     T.PLANNING_FACTOR, NULL),
313              DECODE(NVL(C.OPTIONAL, -9), NVL(T.OPTIONAL, -9),
314                     T.OPTIONAL, NULL)
315       FROM BOM_INVENTORY_COMPONENTS C
316       WHERE C.COMPONENT_SEQUENCE_ID = T.COMPONENT_SEQUENCE_ID2)
317  WHERE COMPONENT_SEQUENCE_ID1 IS NOT NULL
318  AND   COMPONENT_SEQUENCE_ID2 IS NOT NULL
319  AND   SEQUENCE_ID = SEQ_ID;
320 
321 /* Insert rows from the second bill of material that did not match anything
322 in the first bill of material */
323 
324 INSERT INTO BOM_COMPARISON_TEMP
325 (SEQUENCE_ID,
326 ASSEMBLY_ID2,
327 ITEM_NUM,
328 COMPONENT_QUANTITY,
329 OPERATION_SEQ_NUM,
330 PLANNING_FACTOR,
331 EFFECTIVITY_DATE,
332 DISABLE_DATE,
333 IMPLEMENTATION_DATE,
334 OPTIONAL,
335 COMPONENT_SEQUENCE_ID2)
336 SELECT SEQ_ID,
337        COMPONENT_ITEM_ID,
338        ITEM_NUM,
339        COMPONENT_QUANTITY,
340        OPERATION_SEQ_NUM,
341        PLANNING_FACTOR,
342        EFFECTIVITY_DATE,
343        DISABLE_DATE,
344        IMPLEMENTATION_DATE,
345        OPTIONAL,
346        COMPONENT_SEQUENCE_ID
347 FROM BOM_INVENTORY_COMPONENTS C
348 WHERE BILL_SEQUENCE_ID = BILL_SEQ_ID2
349 AND NVL(C.ECO_FOR_PRODUCTION,2) = 2
350 AND   NOT EXISTS
351       (SELECT 'x'
352        FROM BOM_COMPARISON_TEMP T2
353        WHERE T2.SEQUENCE_ID = SEQ_ID
354        AND   T2.COMPONENT_SEQUENCE_ID2 = C.COMPONENT_SEQUENCE_ID)
355 AND   ((IMPLEMENTED_CODE2 = 2)
356        OR
357        (IMPLEMENTED_CODE2 = 1
358         AND C.IMPLEMENTATION_DATE IS NOT NULL)
359       )
360 AND (DISPLAY_CODE2 = 1
361      OR (DISPLAY_CODE2 = 2
362      AND CUTOFF_DATE2 BETWEEN EFFECTIVITY_DATE AND
363             NVL((DISABLE_DATE-(1/86400)), CUTOFF_DATE2 + 1)) --Added for Bug 6689734
364      OR (DISPLAY_CODE2 = 3
365         AND NVL(DISABLE_DATE, CUTOFF_DATE2 + 1) > CUTOFF_DATE2) --changed from >= to > for Bug 6689734
366      )
367 AND ((IMPLEMENTED_CODE2 = 2
368      AND (DISPLAY_CODE2 = 1
369          OR
370           (DISPLAY_CODE2 = 2
371            AND EFFECTIVITY_DATE =
372            (SELECT MAX(EFFECTIVITY_DATE)
373            FROM BOM_INVENTORY_COMPONENTS MV2
374               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID2
375 		AND NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
376               AND MV2.COMPONENT_ITEM_ID = C.COMPONENT_ITEM_ID
377               AND (DECODE(IMPLEMENTATION_DATE, NULL,
378 	      MV2.OLD_COMPONENT_SEQUENCE_ID,
379                   MV2.COMPONENT_SEQUENCE_ID) =
380                   DECODE(C.IMPLEMENTATION_DATE, NULL,
381                   C.OLD_COMPONENT_SEQUENCE_ID, C.COMPONENT_SEQUENCE_ID)
382                 OR MV2.OPERATION_SEQ_NUM = C.OPERATION_SEQ_NUM)
383               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE2
384               AND NVL(DISABLE_DATE, CUTOFF_DATE2+1) > CUTOFF_DATE2
385              AND NOT EXISTS (SELECT NULL
386                  FROM BOM_INVENTORY_COMPONENTS BICN
387           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID2
388 	    AND NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
389          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C.COMPONENT_SEQUENCE_ID
390           AND BICN.ACD_TYPE = 3
391          AND BICN.DISABLE_DATE < CUTOFF_DATE2 )) --changed from <= to < for Bug 6689734
392        )
393      OR
394      (DISPLAY_CODE2 = 3
395       AND EFFECTIVITY_DATE =
396       (SELECT MAX(EFFECTIVITY_DATE)
397            FROM BOM_INVENTORY_COMPONENTS MV2
398               WHERE MV2.BILL_SEQUENCE_ID = BILL_SEQ_ID2
399 	      AND NVL(MV2.ECO_FOR_PRODUCTION,2) = 2
400               AND MV2.COMPONENT_ITEM_ID = C.COMPONENT_ITEM_ID
401               AND (DECODE(IMPLEMENTATION_DATE, NULL,
402               MV2.OLD_COMPONENT_SEQUENCE_ID,
403                   MV2.COMPONENT_SEQUENCE_ID) =
407               AND MV2.EFFECTIVITY_DATE <= CUTOFF_DATE2
404                   DECODE(C.IMPLEMENTATION_DATE, NULL,
405                   C.OLD_COMPONENT_SEQUENCE_ID, C.COMPONENT_SEQUENCE_ID)
406                 OR MV2.OPERATION_SEQ_NUM = C.OPERATION_SEQ_NUM)
408               AND NVL(DISABLE_DATE, CUTOFF_DATE2 + 1) > CUTOFF_DATE2
409              AND NOT EXISTS (SELECT NULL
410                  FROM BOM_INVENTORY_COMPONENTS BICN
411           WHERE BICN.BILL_SEQUENCE_ID = BILL_SEQ_ID2
412 	    AND NVL(BICN.ECO_FOR_PRODUCTION,2) = 2
413          AND BICN.OLD_COMPONENT_SEQUENCE_ID = C.COMPONENT_SEQUENCE_ID
414           AND BICN.ACD_TYPE = 3
415          AND BICN.DISABLE_DATE < CUTOFF_DATE2 )) --changed from <= to < for Bug 6689734
416         OR EFFECTIVITY_DATE > CUTOFF_DATE2
417        )))
418     OR (IMPLEMENTED_CODE2 = 1
419         AND C.IMPLEMENTATION_DATE IS NOT NULL));
420 
421 /* Make sure that no rows from the second bill of material are matched
422 /* If we are only displaying differences, then delete all matches from
423 the temporary table */
424 
425 IF DIFF_CODE = 1 THEN
426   DELETE FROM BOM_COMPARISON_TEMP
427   WHERE  SEQUENCE_ID = SEQ_ID
428   AND    COMPONENT_SEQUENCE_ID1 IS NOT NULL
429   AND    COMPONENT_SEQUENCE_ID2 IS NOT NULL;
430 END IF;
431 
432 EXCEPTION
433   WHEN NO_DATA_FOUND THEN RETURN_CODE := SQLCODE;
434   WHEN OTHERS THEN RETURN_CODE := SQLCODE;
435 
436 END BOM_BILL_COMPARE;
437 
438 END BOMPBCMP;   /* End package */