With respect to the above query: use the WITH-statement, that way you do not have to execute the UNION twice.

Secondly, a few questions pop up:
1. Do you need to use Union? Would simply replacing the GType and the ELEM_INFO be enough (with maybe a validation on duplicate points)? So something like this (not tested...):

2. If all your elements have to be 2002, you can specify in your index that only that GType is allowed. That way you would not need to fix your data afterwards. But I don't know if that is a feasible construction to use (if your data is coming from MicroStation for example it would be difficult to enforce this...)

And lastly, to check if Union is inconsistent, instead of updating the current geometry insert the ID in a new table. A second run of the same query should give exactly the same results as already stored in the table, but if it doesn't then this sounds like something Oracle should look into.

1) Yes, there are different ways to reduce a geometry to it's simplest form without losing data. sdo_union with itself is just a quick and easy way to do it.

2) No, the geometries do not HAVE to be 2006, we just prefer 2002 if possible. This is input data for building a (esri) geometric network and this fails on lines with gtype = 2006. Reducing the number of 2006 gtypes improves the quality of the geometric network.

I have done several tests and can conclude that in some case, sdo_union is giving different results on the same input. Time to migrate to 11g :)