Hi *
i have some trouble using spatial aggregate functions in Oracle Spatial within PL/SQL. The purpose of the function is to grab all geometries of a 3D object, make them 2D and aggregate them to one 2D footprint. Strangly my function is working for the first time being executed (after compiling) but following attemps lead to the this error: ORA-30625: method dispatch on NULL SELF argument is disallowed
From what I've read it appears to be a null-pointer exception, but I cannot see where it might happen. Even when I leave out the nested calls of sdo_aggr_union the error still occurs. Do I have to instantiate the my sdo_geometry variable? Thx in advance for any help.
PS: I'm using Oracle 12c.
Here's the code:
CREATE FUNCTION get_2d_footprint(object_id NUMBER) RETURN SDO_GEOMETRY
IS
footprint SDO_GEOMETRY;
BEGIN
-- other method I tried, but gets very very slow with complex 3D objects
/*EXECUTE IMMEDIATE 'SELECT sdo_aggr_set_union(CAST(COLLECT(sdo_cs.make_2d(g.geometry)) AS MDSYS.SDO_GEOMETRY_ARRAY),0.001) AS aggr_geom
FROM geom g, feature f
WHERE g.root_id = f.geom_id
AND g.geometry IS NOT NULL
AND sdo_geom.validate_geometry(sdo_cs.make_2d(g.geometry), 0.001) = ''TRUE''
AND f.id = :1' INTO footprint USING object_id;*/
EXECUTE IMMEDIATE 'SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(aggr_geom, 0.001)) FROM
(SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(aggr_geom, 0.001)) aggr_geom FROM
(SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(aggr_geom, 0.001)) aggr_geom FROM
(SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(sdo_cs.make_2d(g.geometry), 0.001)) AS aggr_geom
FROM geometry g, feature f
WHERE g.root_id = f.geometry_id
AND g.geometry IS NOT NULL
AND sdo_geom.validate_geometry(sdo_cs.make_2d(g.geometry), 0.001) = ''TRUE''
AND f.id = :1
GROUP BY mod(rownum, 1000)
)
GROUP BY mod(rownum, 100)
)
GROUP BY mod(rownum, 10)
)' INTO footprint USING object_id;
RETURN footprint;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('An error occured: ' || SQLERRM);
RETURN NULL;
END;