MINI MINI MANI MO

Path : /proc/self/root/opt/oracle/product/18c/dbhomeXE/md/admin/
File Upload :
Current File : //proc/self/root/opt/oracle/product/18c/dbhomeXE/md/admin/sdogeom.sql

Rem Copyright (c) 1998, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      sdogeom.sql - Spatial Data Option geometry operation commands
Rem    DESCRIPTION
Rem      Routines to manage geometry tables and views.
Rem    PROCEDURES
Rem      add_nodes
Rem    FUNCTIONS
Rem      init_element
Rem      validate_geometry
Rem      interact
Rem    NOTES
Rem      The procedural option is needed to use this facility.
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: sdo/admin/sdogeom.sql
Rem    SQL_SHIPPED_FILE: md/admin/sdogeom.sql
Rem    SQL_PHASE: SDOGEOM
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    SQL_CALLING_FILE: sdo/admin/catmdlocp2.sql
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED  (MM/DD/YY)
Rem    rjanders   10/08/17 - Add MDSYS to spatial type
Rem    yhu        09/20/17 - enh 26821561: accept an array of geometry
Rem    pcolley    05/23/17 - Added some debugging code (commented out)
Rem    rjanders   05/10/17 - #26037683: Raise 'when other' exceptions
Rem    rjanders   03/23/17 - #25437999: Remove 'when others then NULL' handlers
Rem    rjanders   03/09/17 - Add missing SQL_FILE_METADATA information
Rem    bkazar     11/08/16 - Bug 25058516- checking if geometry ordinates are in radians
Rem    rjanders   05/01/16 - #3039795: Allow tolerance to be NULL by default
Rem    yhu        03/25/16 - bug 20437887: support ellipsoidal distance
Rem    yhu        09/25/13 - two extreme points for diameter and others
Rem    yhu        09/24/13 - work on minimum boudning circle
Rem    rjanders   09/16/13 - OCCS: Remove hardtabs
Rem    yhu        09/05/13 - add sdo_width
Rem    yhu        08/06/13 - change geom1 to geom in sdo_diameter
Rem    yhu        07/24/13 - work on maximal distance
Rem    rjanders   03/20/13 - Productize validate_geometry_with_srid()
Rem    rjanders   03/15/13 - #16473696: Start/End _ORACLE_SCRIPT initialization
Rem    rjanders   03/20/13 - Add validate_geom_with_srid() API
Rem    rjanders   02/01/13 - #16072546: validate_layer_with_context() schema
Rem    yhu        10/07/12 - add sdo_self_union
Rem    bbamba     02/08/12 - Add sdo_geom.sdo_is_nurbscurve
Rem    bbamba     01/08/12 - Some documentation for NURB curve support
Rem    bkazar     09/23/11 - Bug 12537683 and 12536474
Rem    bkazar     11/01/10 - add g3d_parameters procedure
Rem    yhu        04/13/10 - bug 9526679: add PARALLEL_ENABLE
Rem    bkazar     11/01/09 - Bug 8993910
Rem    yhu        07/13/09 - parallel enable for relate and others
Rem    yhu        10/08/08 - add concavehull
Rem    yhu        09/20/08 - add concavehull_b, alpha_shape
Rem    yhu        09/17/08 - add sdo_insert_log_filter
Rem    wexu       07/23/08 - bug 7197832 - revoke exec priv during upgrade
Rem    sravada    03/24/08 - add triangulate geometry
Rem    bkazar     01/10/08 - bug6489440 (g3dconv)
Rem    bkazar     01/25/08 - Bug-6751739
Rem    bkazar     06/06/07 - validate_geometry_, validate_layer_ needed 
Rem                          conditional input
Rem    bkazar     04/17/07 - length3D
Rem    sravada    06/07/06 - add 3D functions 
Rem    sravada    05/23/06 - bug 5175219 
Rem    bkazar     08/19/05 - closest points added wrapper2 
Rem    bkazar     08/10/05 - closest_points procedure added 
Rem    sravada    02/18/05 - bug 4148518 
Rem    sravada    02/03/05 - bug 4148515 
Rem    rkothuri   05/19/03 - make get_dim_array public
Rem    sravada    05/22/01 - add new validate_geometry interface
Rem    qxie       04/17/01 - change arc_tolerance to params in arc_densify
Rem    qxie       04/17/01 - change unit to params in sdo_buffer
Rem    qxie       02/12/01 - Add sdo_arc_densify()
Rem    sravada    10/06/00 - add within_distance with units
Rem    qxie       09/20/00 - Add unit specs to area/length with tols
Rem    jcwang     09/12/00 - modify sdo_min(max)_mbr_ordinate signature
Rem    jcwang     07/03/00 - Add external mdmbr function
Rem    sravada    06/29/00 - add SDO_MBR
Rem    qxie       06/27/00 - Add unit support to sdo_distance
Rem    qxie       06/13/00 - Add unit support to SDO_BUFFER
Rem    qxie       05/09/00 - Add unit & Spherical CS Computation support
Rem                          for Length and Area.
Rem    sravada    05/22/00 - commit status for validate layer
Rem    sravada    08/30/99 - deterministic functions
Rem    lqian      08/13/99 - add polygon centroid op
Rem    ranwei     07/30/99 - Geometry operation
Rem    lqian      07/30/99 - check ogc compliance
Rem    lqian      07/21/99 - add sdo distance function
Rem    ranwei     07/19/99 - Add tolerance interfaces
Rem    pfwang     11/20/98 - Add relational relate interface with tolerance
Rem    ranwei     08/31/98 - Add length and area functions
Rem    ranwei     07/08/98 - VG cleanup
Rem    ranwei     06/24/98 - Add polygon XOR interface
Rem    sravada    06/22/98 - remove operator functional stuff from here.
Rem    ranwei     06/16/98 - Change relate and within_distance interface
Rem                          and add sdo_buffer and polygon operations
Rem    sravada    05/18/98 - add functions for query rewrite operator's 
Rem                          functions (for sdo_int_filter and sdo_int_relate)
Rem    jsharma    05/11/98 -
Rem    sravada    05/11/98 - Change signature for operator's functions
Rem    sravada    04/28/98 - Fix functional relate for sdo_relate
Rem    jsharma    04/20/98 - New validate geometry functionality
Rem    sravada    04/08/98 - Add functional implementation of relate operator
Rem    pfwang     04/01/98 - Invoker rights header change (current_user)
Rem    pfwang     03/18/98 - Object relate function
Rem    pfwang     03/09/98 - Add invokers rights
Rem    ranwei     11/11/97 - Add wrapper for Validate_Geometry
Rem    jkeavene   01/01/97 - Adding documentation for relate.
Rem    jkeavene   11/05/96 - Restore relate wrappers and remove logic param.
Rem    NRaabe     09/23/96 - Pull wrappers for relate().
Rem    NRaabe     09/22/96 - Increase ord params from 64 to 250 in add_nodes().
Rem    JKeavene   09/20/96 - Updating relate and commented out old relate 
Rem                          wrappers e.g. equal, overlap etc
Rem    NRaabe     09/19/96 - Support n-wide GEOM table in add_nodes().
Rem    NRaabe     09/13/96 - Geometry element type constants reference the
Rem                          ones defined in the md2 package.
Rem    NRaabe     09/06/96 - Schema design changes to-date (except for n-wide
Rem                          GEOM table) in init_element() and add_nodes().
Rem    NRaabe     08/23/96 - Remove duplicate spec for validate_geometry().
Rem    NRaabe     08/07/96 - Add restrict_references pragmas to functions.
Rem    NRaabe     07/29/96 - Remove build(), build_one().  Add init_element(),
Rem                          add_nodes(), add_two().  Move update_index() to 
Rem                          the sdo_admin package.
Rem    NRaabe     07/24/96 - Add inside(), equal(), overlap(), boundary(),
Rem                          outside(), encloses(), touch() functions.
Rem    NRaabe     07/23/96 - Add comments.
Rem    NRaabe     06/09/96 - Creation
 

Rem ********************************************************************
Rem This package must not be modified by the customer.  Doing so
Rem could cause internal errors.
Rem ********************************************************************

Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@@?/rdbms/admin/sqlsessstart.sql
Rem ********************************************************************

-- bug 7197832: revoke public execute privilege with grant option
-- this is necessary for upgrade cases
DECLARE
  already_revoked exception;
  pragma exception_init(already_revoked, -01927);
  package_not_found exception;
  pragma exception_init(package_not_found, -04042);
  looping_chain exception;
  pragma exception_init(looping_chain, -01775);
BEGIN
  BEGIN
    EXECUTE IMMEDIATE 'REVOKE EXECUTE ON MDSYS.SDO_GEOM FROM PUBLIC';
    EXCEPTION
      WHEN looping_chain THEN NULL;
      WHEN already_revoked THEN NULL;
      WHEN package_not_found THEN NULL;
      WHEN OTHERS THEN
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                               'EXCEPTION[sdogeom.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
  END;
END;
/

create or replace package MDSYS.SDO_GEOM authid current_user as

------------------------------------------------------------------------------
-- PART I. Functions and procedures for non-object model                    --
------------------------------------------------------------------------------

/* 
-- Package constants which represent geometry element types for calling 
-- the init_element() function. 
*/

POINT_TYPE       CONSTANT INTEGER := MDSYS.MD2.POINT_TYPE;
LINESTRING_TYPE  CONSTANT INTEGER := MDSYS.MD2.LINESTRING_TYPE;
POLYGON_TYPE     CONSTANT INTEGER := MDSYS.MD2.POLYGON_TYPE;

/* 
-- Storage type
-- SDO_NORMALIZED_STORAGE indicates pre-8.1.3 schema
-- SDO_OBJECT_STORAGE indicates 8.1.3 schema
*/ 

SDO_NORMALIZED_STORAGE  CONSTANT INTEGER := 805;
SDO_OBJECT_STORAGE      CONSTANT INTEGER := 813;

/* 
-- This pacakge constant represents the maximum number of ordinate values
-- in the parameter lists for add_nodes() and interact().
*/

MAX_ORD_PARAMS CONSTANT INTEGER := 250;

--
--  NAME:
--     init_element - INITialize an ELEMENT of a geometric object
--  DESCRIPTION:
--     This function generates a unique sequence number for each element of a
--     geometric object.  The user must ensure that each GID is unique in a
--     data set layer.
--  ARGUMENTS:
--     layer  - SDO geometry table name (LAYER_sdogeom) input argument
--     gid    - Geometry IDentifier input argument
--  RETURNS:
--     a unique sequence number for each element of a geometric object
 
function init_element (layer IN VARCHAR2, gid IN NUMBER)
return INTEGER;
 
 
--
--  NAME:
--     add_nodes - ADD the NODES of the element components of geometric objects
--                 to the SDO geometry table
--  DESCRIPTION:
--     This procedure adds vertex coordinates representing the linestring
--     segments of the element components of geometric objects to the geometry
--     table.  A unique sequence number is generated for each row of linestring
--     segments represented by the vertex coordinates in the parameter list.
--     Iterative calls to this function with the same GID and ESEQ are used to
--     add linestring segments represented by the vertex coordinates to an
--     element of a geometric object.
--  ARGUMENTS:
--     layer  - geometry table name (LAYER_sdogeom) input argument
--     gid    - Geometry IDentifier input argument
--     eseq   - Element SEQuence number input argument
--     etype  - Element TYPE input argument (see types defined above)
--     ordn   - ORDinate Nth input argument (up to 250 per call, 2 required)
/* 
procedure add_nodes (layer  IN VARCHAR2, gid IN NUMBER, eseq IN INTEGER,
                     etype  IN INTEGER, ord1 IN NUMBER, ord2 IN  NUMBER,
                     ord3   IN NUMBER:=NULL, ord4   IN NUMBER:=NULL,
                     ord5   IN NUMBER:=NULL, ord6   IN NUMBER:=NULL,
                     ord7   IN NUMBER:=NULL, ord8   IN NUMBER:=NULL,
                     ord9   IN NUMBER:=NULL, ord10  IN NUMBER:=NULL,
                     ord11  IN NUMBER:=NULL, ord12  IN NUMBER:=NULL,
                     ord13  IN NUMBER:=NULL, ord14  IN NUMBER:=NULL,
                     ord15  IN NUMBER:=NULL, ord16  IN NUMBER:=NULL,
                     ord17  IN NUMBER:=NULL, ord18  IN NUMBER:=NULL,
                     ord19  IN NUMBER:=NULL, ord20  IN NUMBER:=NULL,
                     ord21  IN NUMBER:=NULL, ord22  IN NUMBER:=NULL,
                     ord23  IN NUMBER:=NULL, ord24  IN NUMBER:=NULL,
                     ord25  IN NUMBER:=NULL, ord26  IN NUMBER:=NULL,
                     ord27  IN NUMBER:=NULL, ord28  IN NUMBER:=NULL,
                     ord29  IN NUMBER:=NULL, ord30  IN NUMBER:=NULL,
                     ord31  IN NUMBER:=NULL, ord32  IN NUMBER:=NULL,
                     ord33  IN NUMBER:=NULL, ord34  IN NUMBER:=NULL,
                     ord35  IN NUMBER:=NULL, ord36  IN NUMBER:=NULL,
                     ord37  IN NUMBER:=NULL, ord38  IN NUMBER:=NULL,
                     ord39  IN NUMBER:=NULL, ord40  IN NUMBER:=NULL,
                     ord41  IN NUMBER:=NULL, ord42  IN NUMBER:=NULL,
                     ord43  IN NUMBER:=NULL, ord44  IN NUMBER:=NULL,
                     ord45  IN NUMBER:=NULL, ord46  IN NUMBER:=NULL,
                     ord47  IN NUMBER:=NULL, ord48  IN NUMBER:=NULL,
                     ord49  IN NUMBER:=NULL, ord50  IN NUMBER:=NULL,
                     ord51  IN NUMBER:=NULL, ord52  IN NUMBER:=NULL,
                     ord53  IN NUMBER:=NULL, ord54  IN NUMBER:=NULL,
                     ord55  IN NUMBER:=NULL, ord56  IN NUMBER:=NULL,
                     ord57  IN NUMBER:=NULL, ord58  IN NUMBER:=NULL,
                     ord59  IN NUMBER:=NULL, ord60  IN NUMBER:=NULL,
                     ord61  IN NUMBER:=NULL, ord62  IN NUMBER:=NULL,
                     ord63  IN NUMBER:=NULL, ord64  IN NUMBER:=NULL,
                     ord65  IN NUMBER:=NULL, ord66  IN NUMBER:=NULL,
                     ord67  IN NUMBER:=NULL, ord68  IN NUMBER:=NULL,
                     ord69  IN NUMBER:=NULL, ord70  IN NUMBER:=NULL,
                     ord71  IN NUMBER:=NULL, ord72  IN NUMBER:=NULL,
                     ord73  IN NUMBER:=NULL, ord74  IN NUMBER:=NULL,
                     ord75  IN NUMBER:=NULL, ord76  IN NUMBER:=NULL,
                     ord77  IN NUMBER:=NULL, ord78  IN NUMBER:=NULL,
                     ord79  IN NUMBER:=NULL, ord80  IN NUMBER:=NULL,
                     ord81  IN NUMBER:=NULL, ord82  IN NUMBER:=NULL,
                     ord83  IN NUMBER:=NULL, ord84  IN NUMBER:=NULL,
                     ord85  IN NUMBER:=NULL, ord86  IN NUMBER:=NULL,
                     ord87  IN NUMBER:=NULL, ord88  IN NUMBER:=NULL,
                     ord89  IN NUMBER:=NULL, ord90  IN NUMBER:=NULL,
                     ord91  IN NUMBER:=NULL, ord92  IN NUMBER:=NULL,
                     ord93  IN NUMBER:=NULL, ord94  IN NUMBER:=NULL,
                     ord95  IN NUMBER:=NULL, ord96  IN NUMBER:=NULL,
                     ord97  IN NUMBER:=NULL, ord98  IN NUMBER:=NULL,
                     ord99  IN NUMBER:=NULL, ord100 IN NUMBER:=NULL,
                     ord101 IN NUMBER:=NULL, ord102 IN NUMBER:=NULL,
                     ord103 IN NUMBER:=NULL, ord104 IN NUMBER:=NULL,
                     ord105 IN NUMBER:=NULL, ord106 IN NUMBER:=NULL,
                     ord107 IN NUMBER:=NULL, ord108 IN NUMBER:=NULL,
                     ord109 IN NUMBER:=NULL, ord110 IN NUMBER:=NULL,
                     ord111 IN NUMBER:=NULL, ord112 IN NUMBER:=NULL,
                     ord113 IN NUMBER:=NULL, ord114 IN NUMBER:=NULL,
                     ord115 IN NUMBER:=NULL, ord116 IN NUMBER:=NULL,
                     ord117 IN NUMBER:=NULL, ord118 IN NUMBER:=NULL,
                     ord119 IN NUMBER:=NULL, ord120 IN NUMBER:=NULL,
                     ord121 IN NUMBER:=NULL, ord122 IN NUMBER:=NULL,
                     ord123 IN NUMBER:=NULL, ord124 IN NUMBER:=NULL,
                     ord125 IN NUMBER:=NULL, ord126 IN NUMBER:=NULL,
                     ord127 IN NUMBER:=NULL, ord128 IN NUMBER:=NULL,
                     ord129 IN NUMBER:=NULL, ord130 IN NUMBER:=NULL,
                     ord131 IN NUMBER:=NULL, ord132 IN NUMBER:=NULL,
                     ord133 IN NUMBER:=NULL, ord134 IN NUMBER:=NULL,
                     ord135 IN NUMBER:=NULL, ord136 IN NUMBER:=NULL,
                     ord137 IN NUMBER:=NULL, ord138 IN NUMBER:=NULL,
                     ord139 IN NUMBER:=NULL, ord140 IN NUMBER:=NULL,
                     ord141 IN NUMBER:=NULL, ord142 IN NUMBER:=NULL,
                     ord143 IN NUMBER:=NULL, ord144 IN NUMBER:=NULL,
                     ord145 IN NUMBER:=NULL, ord146 IN NUMBER:=NULL,
                     ord147 IN NUMBER:=NULL, ord148 IN NUMBER:=NULL,
                     ord149 IN NUMBER:=NULL, ord150 IN NUMBER:=NULL,
                     ord151 IN NUMBER:=NULL, ord152 IN NUMBER:=NULL,
                     ord153 IN NUMBER:=NULL, ord154 IN NUMBER:=NULL,
                     ord155 IN NUMBER:=NULL, ord156 IN NUMBER:=NULL,
                     ord157 IN NUMBER:=NULL, ord158 IN NUMBER:=NULL,
                     ord159 IN NUMBER:=NULL, ord160 IN NUMBER:=NULL,
                     ord161 IN NUMBER:=NULL, ord162 IN NUMBER:=NULL,
                     ord163 IN NUMBER:=NULL, ord164 IN NUMBER:=NULL,
                     ord165 IN NUMBER:=NULL, ord166 IN NUMBER:=NULL,
                     ord167 IN NUMBER:=NULL, ord168 IN NUMBER:=NULL,
                     ord169 IN NUMBER:=NULL, ord170 IN NUMBER:=NULL,
                     ord171 IN NUMBER:=NULL, ord172 IN NUMBER:=NULL,
                     ord173 IN NUMBER:=NULL, ord174 IN NUMBER:=NULL,
                     ord175 IN NUMBER:=NULL, ord176 IN NUMBER:=NULL,
                     ord177 IN NUMBER:=NULL, ord178 IN NUMBER:=NULL,
                     ord179 IN NUMBER:=NULL, ord180 IN NUMBER:=NULL,
                     ord181 IN NUMBER:=NULL, ord182 IN NUMBER:=NULL,
                     ord183 IN NUMBER:=NULL, ord184 IN NUMBER:=NULL,
                     ord185 IN NUMBER:=NULL, ord186 IN NUMBER:=NULL,
                     ord187 IN NUMBER:=NULL, ord188 IN NUMBER:=NULL,
                     ord189 IN NUMBER:=NULL, ord190 IN NUMBER:=NULL,
                     ord191 IN NUMBER:=NULL, ord192 IN NUMBER:=NULL,
                     ord193 IN NUMBER:=NULL, ord194 IN NUMBER:=NULL,
                     ord195 IN NUMBER:=NULL, ord196 IN NUMBER:=NULL,
                     ord197 IN NUMBER:=NULL, ord198 IN NUMBER:=NULL,
                     ord199 IN NUMBER:=NULL, ord200 IN NUMBER:=NULL,
                     ord201 IN NUMBER:=NULL, ord202 IN NUMBER:=NULL,
                     ord203 IN NUMBER:=NULL, ord204 IN NUMBER:=NULL,
                     ord205 IN NUMBER:=NULL, ord206 IN NUMBER:=NULL,
                     ord207 IN NUMBER:=NULL, ord208 IN NUMBER:=NULL,
                     ord209 IN NUMBER:=NULL, ord210 IN NUMBER:=NULL,
                     ord211 IN NUMBER:=NULL, ord212 IN NUMBER:=NULL,
                     ord213 IN NUMBER:=NULL, ord214 IN NUMBER:=NULL,
                     ord215 IN NUMBER:=NULL, ord216 IN NUMBER:=NULL,
                     ord217 IN NUMBER:=NULL, ord218 IN NUMBER:=NULL,
                     ord219 IN NUMBER:=NULL, ord220 IN NUMBER:=NULL,
                     ord221 IN NUMBER:=NULL, ord222 IN NUMBER:=NULL,
                     ord223 IN NUMBER:=NULL, ord224 IN NUMBER:=NULL,
                     ord225 IN NUMBER:=NULL, ord226 IN NUMBER:=NULL,
                     ord227 IN NUMBER:=NULL, ord228 IN NUMBER:=NULL,
                     ord229 IN NUMBER:=NULL, ord230 IN NUMBER:=NULL,
                     ord231 IN NUMBER:=NULL, ord232 IN NUMBER:=NULL,
                     ord233 IN NUMBER:=NULL, ord234 IN NUMBER:=NULL,
                     ord235 IN NUMBER:=NULL, ord236 IN NUMBER:=NULL,
                     ord237 IN NUMBER:=NULL, ord238 IN NUMBER:=NULL,
                     ord239 IN NUMBER:=NULL, ord240 IN NUMBER:=NULL,
                     ord241 IN NUMBER:=NULL, ord242 IN NUMBER:=NULL,
                     ord243 IN NUMBER:=NULL, ord244 IN NUMBER:=NULL,
                     ord245 IN NUMBER:=NULL, ord246 IN NUMBER:=NULL,
                     ord247 IN NUMBER:=NULL, ord248 IN NUMBER:=NULL,
                     ord249 IN NUMBER:=NULL, ord250 IN NUMBER:=NULL);
 
*/
 
--
--  NAME:
--     validate_geometry - VALIDATE a GEOMETRY in SDO geometry table
--     validate_layer    - VALIDATE all geometries in the specified LAYER
--  DESCRIPTION:
--     validate_geometry function examines the properties of elements of a
--     geometry. Coordinates must be within the bounds designated in the 
--     SDODIM table. Point elements must have exactly one (only one) 
--     coordinate per row. Linestring elements must have at least two 
--     coordinates (representing one segment). Polygon elements must have 
--     at least four coordinates (representing three segments). The very 
--     first coordinate must be repeated as the last coordinate to close
--     the polygon. The first coordinate of a continuation row for both 
--     linestring and polygon elements must be equal to the last coordinate 
--     of the previous row.  
--     
--     Now we support NURB elements or parametric curves too. A number of 
--     validation rules are required for validating NURB elements.
--     
--
--
--  ARGUMENTS:
--     layer         - geometry table name (LAYER_sdogeom) input argument
--     gid           - Geometry IDentifier input argument
--     result_table  - the result table where validation result is stored
--
--  RETURNS:
--     'TRUE' if the geometry is valid. Otherwise it returns Oracle 
--     standard error code for known error or 'FALSE' for unknown error.
--     validate_layer procedure populates the given result_table with
--     validation results
--

function validate_geometry(layer IN VARCHAR2, gid IN NUMBER)
return VARCHAR2; 
-- pragma restrict_references(validate_geometry, WNDS, WNPS, RNPS );

procedure validate_layer(layer IN VARCHAR2, result_table IN VARCHAR2);

function check_bounds(TableName IN VARCHAR2, gid IN NUMBER, Eseq IN INTEGER,
                      Seq IN INTEGER, CoordWidth IN NUMBER,
                      Dim1LB IN NUMBER, Dim1UB IN NUMBER,
                      Dim2LB IN NUMBER, Dim2UB IN NUMBER)
         return INTEGER;
-- pragma restrict_references(check_bounds, WNDS, WNPS, RNPS);

procedure get_ords(TableName IN VARCHAR2, gid IN NUMBER, Eseq IN INTEGER,
                   Seq IN INTEGER, ColumnIndex IN INTEGER,
                   XRtn OUT NUMBER, YRtn OUT NUMBER);
pragma restrict_references(get_ords, WNDS, WNPS, RNPS);


--
--  NAME:
--     interact - do two geometric objects INTERACT with each other?
--  DESCRIPTION:
--     This function determines whether or not two geometric objects in either
--     the same or different SDO geometry tables (LAYER_sdogeom) interact with 
--     each other. 
--  ARGUMENTS:
--     layer       - geometry table name (LAYER_sdogeom) input argument
--     gid         - Geometry IDentifier input argument
--     x_tolerance - allowed variance of ordinate values within dimension1
--     y_tolerance - allowed variance of ordinate values within dimension 2
--     vNNN        - list of up to 250 input values describing the elements
--                   of a geometric object with the following structure:
--                   etype, # of ordinate values, list of ordinate values.
--                   For example the following list could be used to describe
--                   a four point polygon with with a triangular hole :
--                   SDO_GEOM.POLYGON_TYPE, 10, ord1, ord2, ord3, ord4, ord5,
--                   ord6, ord7, ord8, ord9, ord10,
--                   SDO_GEOM.POLYGON_TYPE, 8, ord1, ord2, ord3, ord4, ord5,
--                   ord6, ord7, ord8
--                   The following example could be used to describe a two
--                   element (single segment) linestring:
--                   SDO_GEOM.LINESTRING_TYPE, 4, ord1, ord2, ord3, ord4,
--                   SDO_GEOM.LINESTRING_TYPE, 4, ord1, ord2, ord3, ord4
--  RETURNS:
--     'TRUE' or 'FALSE'

function interact (layer IN VARCHAR2, gid1 IN NUMBER, gid2 IN NUMBER)
return VARCHAR2;
-- pragma restrict_references(interact, WNDS, WNPS, RNPS);

function interact (layer1 IN VARCHAR2, gid1 IN NUMBER,
                   layer2 IN VARCHAR2, gid2 IN NUMBER)
return VARCHAR2;
-- pragma restrict_references(interact, WNDS, WNPS, RNPS);

function interact(layer1 IN VARCHAR2, gid1 IN NUMBER,
                  x_tolerance IN NUMBER, y_tolerance IN NUMBER,
                     v000 IN NUMBER:=NULL, v001 IN NUMBER:=NULL,
                     v002 IN NUMBER:=NULL, v003 IN NUMBER:=NULL,
                     v004 IN NUMBER:=NULL, v005 IN NUMBER:=NULL,
                     v006 IN NUMBER:=NULL, v007 IN NUMBER:=NULL,
                     v008 IN NUMBER:=NULL, v009 IN NUMBER:=NULL,
                     v010 IN NUMBER:=NULL, v011 IN NUMBER:=NULL,
                     v012 IN NUMBER:=NULL, v013 IN NUMBER:=NULL,
                     v014 IN NUMBER:=NULL, v015 IN NUMBER:=NULL,
                     v016 IN NUMBER:=NULL, v017 IN NUMBER:=NULL,
                     v018 IN NUMBER:=NULL, v019 IN NUMBER:=NULL,
                     v020 IN NUMBER:=NULL, v021 IN NUMBER:=NULL,
                     v022 IN NUMBER:=NULL, v023 IN NUMBER:=NULL,
                     v024 IN NUMBER:=NULL, v025 IN NUMBER:=NULL,
                     v026 IN NUMBER:=NULL, v027 IN NUMBER:=NULL,
                     v028 IN NUMBER:=NULL, v029 IN NUMBER:=NULL,
                     v030 IN NUMBER:=NULL, v031 IN NUMBER:=NULL,
                     v032 IN NUMBER:=NULL, v033 IN NUMBER:=NULL,
                     v034 IN NUMBER:=NULL, v035 IN NUMBER:=NULL,
                     v036 IN NUMBER:=NULL, v037 IN NUMBER:=NULL,
                     v038 IN NUMBER:=NULL, v039 IN NUMBER:=NULL,
                     v040 IN NUMBER:=NULL, v041 IN NUMBER:=NULL,
                     v042 IN NUMBER:=NULL, v043 IN NUMBER:=NULL,
                     v044 IN NUMBER:=NULL, v045 IN NUMBER:=NULL,
                     v046 IN NUMBER:=NULL, v047 IN NUMBER:=NULL,
                     v048 IN NUMBER:=NULL, v049 IN NUMBER:=NULL,
                     v050 IN NUMBER:=NULL, v051 IN NUMBER:=NULL,
                     v052 IN NUMBER:=NULL, v053 IN NUMBER:=NULL,
                     v054 IN NUMBER:=NULL, v055 IN NUMBER:=NULL,
                     v056 IN NUMBER:=NULL, v057 IN NUMBER:=NULL,
                     v058 IN NUMBER:=NULL, v059 IN NUMBER:=NULL,
                     v060 IN NUMBER:=NULL, v061 IN NUMBER:=NULL,
                     v062 IN NUMBER:=NULL, v063 IN NUMBER:=NULL,
                     v064 IN NUMBER:=NULL, v065 IN NUMBER:=NULL,
                     v066 IN NUMBER:=NULL, v067 IN NUMBER:=NULL,
                     v068 IN NUMBER:=NULL, v069 IN NUMBER:=NULL,
                     v070 IN NUMBER:=NULL, v071 IN NUMBER:=NULL,
                     v072 IN NUMBER:=NULL, v073 IN NUMBER:=NULL,
                     v074 IN NUMBER:=NULL, v075 IN NUMBER:=NULL,
                     v076 IN NUMBER:=NULL, v077 IN NUMBER:=NULL,
                     v078 IN NUMBER:=NULL, v079 IN NUMBER:=NULL,
                     v080 IN NUMBER:=NULL, v081 IN NUMBER:=NULL,
                     v082 IN NUMBER:=NULL, v083 IN NUMBER:=NULL,
                     v084 IN NUMBER:=NULL, v085 IN NUMBER:=NULL,
                     v086 IN NUMBER:=NULL, v087 IN NUMBER:=NULL,
                     v088 IN NUMBER:=NULL, v089 IN NUMBER:=NULL,
                     v090 IN NUMBER:=NULL, v091 IN NUMBER:=NULL,
                     v092 IN NUMBER:=NULL, v093 IN NUMBER:=NULL,
                     v094 IN NUMBER:=NULL, v095 IN NUMBER:=NULL,
                     v096 IN NUMBER:=NULL, v097 IN NUMBER:=NULL,
                     v098 IN NUMBER:=NULL, v099 IN NUMBER:=NULL,
                     v100 IN NUMBER:=NULL, v101 IN NUMBER:=NULL,
                     v102 IN NUMBER:=NULL, v103 IN NUMBER:=NULL,
                     v104 IN NUMBER:=NULL, v105 IN NUMBER:=NULL,
                     v106 IN NUMBER:=NULL, v107 IN NUMBER:=NULL,
                     v108 IN NUMBER:=NULL, v109 IN NUMBER:=NULL,
                     v110 IN NUMBER:=NULL, v111 IN NUMBER:=NULL,
                     v112 IN NUMBER:=NULL, v113 IN NUMBER:=NULL,
                     v114 IN NUMBER:=NULL, v115 IN NUMBER:=NULL,
                     v116 IN NUMBER:=NULL, v117 IN NUMBER:=NULL,
                     v118 IN NUMBER:=NULL, v119 IN NUMBER:=NULL,
                     v120 IN NUMBER:=NULL, v121 IN NUMBER:=NULL,
                     v122 IN NUMBER:=NULL, v123 IN NUMBER:=NULL,
                     v124 IN NUMBER:=NULL, v125 IN NUMBER:=NULL,
                     v126 IN NUMBER:=NULL, v127 IN NUMBER:=NULL,
                     v128 IN NUMBER:=NULL, v129 IN NUMBER:=NULL,
                     v130 IN NUMBER:=NULL, v131 IN NUMBER:=NULL,
                     v132 IN NUMBER:=NULL, v133 IN NUMBER:=NULL,
                     v134 IN NUMBER:=NULL, v135 IN NUMBER:=NULL,
                     v136 IN NUMBER:=NULL, v137 IN NUMBER:=NULL,
                     v138 IN NUMBER:=NULL, v139 IN NUMBER:=NULL,
                     v140 IN NUMBER:=NULL, v141 IN NUMBER:=NULL,
                     v142 IN NUMBER:=NULL, v143 IN NUMBER:=NULL,
                     v144 IN NUMBER:=NULL, v145 IN NUMBER:=NULL,
                     v146 IN NUMBER:=NULL, v147 IN NUMBER:=NULL,
                     v148 IN NUMBER:=NULL, v149 IN NUMBER:=NULL,
                     v150 IN NUMBER:=NULL, v151 IN NUMBER:=NULL,
                     v152 IN NUMBER:=NULL, v153 IN NUMBER:=NULL,
                     v154 IN NUMBER:=NULL, v155 IN NUMBER:=NULL,
                     v156 IN NUMBER:=NULL, v157 IN NUMBER:=NULL,
                     v158 IN NUMBER:=NULL, v159 IN NUMBER:=NULL,
                     v160 IN NUMBER:=NULL, v161 IN NUMBER:=NULL,
                     v162 IN NUMBER:=NULL, v163 IN NUMBER:=NULL,
                     v164 IN NUMBER:=NULL, v165 IN NUMBER:=NULL,
                     v166 IN NUMBER:=NULL, v167 IN NUMBER:=NULL,
                     v168 IN NUMBER:=NULL, v169 IN NUMBER:=NULL,
                     v170 IN NUMBER:=NULL, v171 IN NUMBER:=NULL,
                     v172 IN NUMBER:=NULL, v173 IN NUMBER:=NULL,
                     v174 IN NUMBER:=NULL, v175 IN NUMBER:=NULL,
                     v176 IN NUMBER:=NULL, v177 IN NUMBER:=NULL,
                     v178 IN NUMBER:=NULL, v179 IN NUMBER:=NULL,
                     v180 IN NUMBER:=NULL, v181 IN NUMBER:=NULL,
                     v182 IN NUMBER:=NULL, v183 IN NUMBER:=NULL,
                     v184 IN NUMBER:=NULL, v185 IN NUMBER:=NULL,
                     v186 IN NUMBER:=NULL, v187 IN NUMBER:=NULL,
                     v188 IN NUMBER:=NULL, v189 IN NUMBER:=NULL,
                     v190 IN NUMBER:=NULL, v191 IN NUMBER:=NULL,
                     v192 IN NUMBER:=NULL, v193 IN NUMBER:=NULL,
                     v194 IN NUMBER:=NULL, v195 IN NUMBER:=NULL,
                     v196 IN NUMBER:=NULL, v197 IN NUMBER:=NULL,
                     v198 IN NUMBER:=NULL, v199 IN NUMBER:=NULL,
                     v200 IN NUMBER:=NULL, v201 IN NUMBER:=NULL,
                     v202 IN NUMBER:=NULL, v203 IN NUMBER:=NULL,
                     v204 IN NUMBER:=NULL, v205 IN NUMBER:=NULL,
                     v206 IN NUMBER:=NULL, v207 IN NUMBER:=NULL,
                     v208 IN NUMBER:=NULL, v209 IN NUMBER:=NULL,
                     v210 IN NUMBER:=NULL, v211 IN NUMBER:=NULL,
                     v212 IN NUMBER:=NULL, v213 IN NUMBER:=NULL,
                     v214 IN NUMBER:=NULL, v215 IN NUMBER:=NULL,
                     v216 IN NUMBER:=NULL, v217 IN NUMBER:=NULL,
                     v218 IN NUMBER:=NULL, v219 IN NUMBER:=NULL,
                     v220 IN NUMBER:=NULL, v221 IN NUMBER:=NULL,
                     v222 IN NUMBER:=NULL, v223 IN NUMBER:=NULL,
                     v224 IN NUMBER:=NULL, v225 IN NUMBER:=NULL,
                     v226 IN NUMBER:=NULL, v227 IN NUMBER:=NULL,
                     v228 IN NUMBER:=NULL, v229 IN NUMBER:=NULL,
                     v230 IN NUMBER:=NULL, v231 IN NUMBER:=NULL,
                     v232 IN NUMBER:=NULL, v233 IN NUMBER:=NULL,
                     v234 IN NUMBER:=NULL, v235 IN NUMBER:=NULL,
                     v236 IN NUMBER:=NULL, v237 IN NUMBER:=NULL,
                     v238 IN NUMBER:=NULL, v239 IN NUMBER:=NULL,
                     v240 IN NUMBER:=NULL, v241 IN NUMBER:=NULL,
                     v242 IN NUMBER:=NULL, v243 IN NUMBER:=NULL,
                     v244 IN NUMBER:=NULL, v245 IN NUMBER:=NULL,
                     v246 IN NUMBER:=NULL, v247 IN NUMBER:=NULL,
                     v248 IN NUMBER:=NULL, v249 IN NUMBER:=NULL)
return VARCHAR2;
-- pragma restrict_references(interact, WNDS, WNPS, RNPS);

--
-- NAME: 
--      relate - determine the relationship between to geometries
-- DESCRIPTION
--      Relate operates on two geometries and, based on the mask,
--      can determine their relationship.  There are three interfaces to relate.
--      The first operates geometries in a single SDO layer.  The second
--      operates on two geometries in two different layers and the third
--      on its first geometry in an SDO layer and the second geometry described
--      in its arguement list.
--
-- ARGUMENTS
--      LAYER   - geometry table name (LAYER_sdogeom) input argument
--      GID     - Geometry IDentifier input argument
--      MASK    - relationship mask
--              any combionation of
--              DISJOINT
--              TOUCH
--              EQUAL
--              INSIDE
--              CONTAINS
--              COVEREDBY
--              COVERS
--              OVERLAPBDYDISJOINT
--              OVERLAPBDYINTERSECT
--              OR DETERMINE
--              OR ANYINTERACT
--     x_tolerance - allowed variance of ordinate values within dimension1
--     y_tolerance - allowed variance of ordinate values within dimension 2
--     vNNN        - list of up to 250 input values describing the elements
--                   of a geometric object with the following structure:
--                   etype, # of ordinate values, list of ordinate values.
--                   For example the following list could be used to describe
--                   a four point polygon with with a triangular hole :
--                   SDO_GEOM.POLYGON_TYPE, 10, ord1, ord2, ord3, ord4, ord5,
--                   ord6, ord7, ord8, ord9, ord10,
--                   SDO_GEOM.POLYGON_TYPE, 8, ord1, ord2, ord3, ord4, ord5,
--                   ord6, ord7, ord8
--                   The following example could be used to describe a two
--                   element (single segment) linestring:
--                   SDO_GEOM.LINESTRING_TYPE, 4, ord1, ord2, ord3, ord4,
--                   SDO_GEOM.LINESTRING_TYPE, 4, ord1, ord2, ord3, ord4
--
-- RETURNS
--      If any combination of the following mask options is specified as the
--      mask argument, relate returns the relation if it matches passes mask 
--      otherwise FALSE.
--
--      DISJOINT
--      TOUCH
--      EQUAL
--      INSIDE
--      CONTAINS
--      COVEREDBY
--      COVERS
--      OVERLAPBDYDISJOINT
--      OVERLAPBDYINTERSECT
--
--      RELATE will return one of the above relations if the following mask is
--      specified:
--
--      DETERMINE
--
--      RELATE will return TRUE or FALSE for if the following mask is specified :
--
--      ANYINTERACT
--

function relate (layer IN VARCHAR2, gid1 IN NUMBER,
                 mask  IN VARCHAR2,
                 gid2  IN NUMBER ) 
return VARCHAR2 ;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);


function relate (layer1 IN VARCHAR2, gid1  IN  NUMBER, 
                 mask   IN VARCHAR2, 
                 layer2 IN  VARCHAR2, gid2 IN NUMBER )
return VARCHAR2 ;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);

function relate (layer1 IN VARCHAR2, gid1  IN  NUMBER, nord1 IN NUMBER, 
                 mask   IN VARCHAR2, 
                 layer2 IN  VARCHAR2, gid2 IN NUMBER, nord2 IN NUMBER,
                 tolerance1 IN NUMBER, tolerance2 IN NUMBER)
return VARCHAR2 ;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);

function relate (layer1 IN VARCHAR2, gid1  IN NUMBER,
                mask   IN VARCHAR2, 
                x_tolerance IN NUMBER, y_tolerance IN NUMBER,
                     v000 IN NUMBER:=NULL, v001 IN NUMBER:=NULL,
                     v002 IN NUMBER:=NULL, v003 IN NUMBER:=NULL,
                     v004 IN NUMBER:=NULL, v005 IN NUMBER:=NULL,
                     v006 IN NUMBER:=NULL, v007 IN NUMBER:=NULL,
                     v008 IN NUMBER:=NULL, v009 IN NUMBER:=NULL,
                     v010 IN NUMBER:=NULL, v011 IN NUMBER:=NULL,
                     v012 IN NUMBER:=NULL, v013 IN NUMBER:=NULL,
                     v014 IN NUMBER:=NULL, v015 IN NUMBER:=NULL,
                     v016 IN NUMBER:=NULL, v017 IN NUMBER:=NULL,
                     v018 IN NUMBER:=NULL, v019 IN NUMBER:=NULL,
                     v020 IN NUMBER:=NULL, v021 IN NUMBER:=NULL,
                     v022 IN NUMBER:=NULL, v023 IN NUMBER:=NULL,
                     v024 IN NUMBER:=NULL, v025 IN NUMBER:=NULL,
                     v026 IN NUMBER:=NULL, v027 IN NUMBER:=NULL,
                     v028 IN NUMBER:=NULL, v029 IN NUMBER:=NULL,
                     v030 IN NUMBER:=NULL, v031 IN NUMBER:=NULL,
                     v032 IN NUMBER:=NULL, v033 IN NUMBER:=NULL,
                     v034 IN NUMBER:=NULL, v035 IN NUMBER:=NULL,
                     v036 IN NUMBER:=NULL, v037 IN NUMBER:=NULL,
                     v038 IN NUMBER:=NULL, v039 IN NUMBER:=NULL,
                     v040 IN NUMBER:=NULL, v041 IN NUMBER:=NULL,
                     v042 IN NUMBER:=NULL, v043 IN NUMBER:=NULL,
                     v044 IN NUMBER:=NULL, v045 IN NUMBER:=NULL,
                     v046 IN NUMBER:=NULL, v047 IN NUMBER:=NULL,
                     v048 IN NUMBER:=NULL, v049 IN NUMBER:=NULL,
                     v050 IN NUMBER:=NULL, v051 IN NUMBER:=NULL,
                     v052 IN NUMBER:=NULL, v053 IN NUMBER:=NULL,
                     v054 IN NUMBER:=NULL, v055 IN NUMBER:=NULL,
                     v056 IN NUMBER:=NULL, v057 IN NUMBER:=NULL,
                     v058 IN NUMBER:=NULL, v059 IN NUMBER:=NULL,
                     v060 IN NUMBER:=NULL, v061 IN NUMBER:=NULL,
                     v062 IN NUMBER:=NULL, v063 IN NUMBER:=NULL,
                     v064 IN NUMBER:=NULL, v065 IN NUMBER:=NULL,
                     v066 IN NUMBER:=NULL, v067 IN NUMBER:=NULL,
                     v068 IN NUMBER:=NULL, v069 IN NUMBER:=NULL,
                     v070 IN NUMBER:=NULL, v071 IN NUMBER:=NULL,
                     v072 IN NUMBER:=NULL, v073 IN NUMBER:=NULL,
                     v074 IN NUMBER:=NULL, v075 IN NUMBER:=NULL,
                     v076 IN NUMBER:=NULL, v077 IN NUMBER:=NULL,
                     v078 IN NUMBER:=NULL, v079 IN NUMBER:=NULL,
                     v080 IN NUMBER:=NULL, v081 IN NUMBER:=NULL,
                     v082 IN NUMBER:=NULL, v083 IN NUMBER:=NULL,
                     v084 IN NUMBER:=NULL, v085 IN NUMBER:=NULL,
                     v086 IN NUMBER:=NULL, v087 IN NUMBER:=NULL,
                     v088 IN NUMBER:=NULL, v089 IN NUMBER:=NULL,
                     v090 IN NUMBER:=NULL, v091 IN NUMBER:=NULL,
                     v092 IN NUMBER:=NULL, v093 IN NUMBER:=NULL,
                     v094 IN NUMBER:=NULL, v095 IN NUMBER:=NULL,
                     v096 IN NUMBER:=NULL, v097 IN NUMBER:=NULL,
                     v098 IN NUMBER:=NULL, v099 IN NUMBER:=NULL,
                     v100 IN NUMBER:=NULL, v101 IN NUMBER:=NULL,
                     v102 IN NUMBER:=NULL, v103 IN NUMBER:=NULL,
                     v104 IN NUMBER:=NULL, v105 IN NUMBER:=NULL,
                     v106 IN NUMBER:=NULL, v107 IN NUMBER:=NULL,
                     v108 IN NUMBER:=NULL, v109 IN NUMBER:=NULL,
                     v110 IN NUMBER:=NULL, v111 IN NUMBER:=NULL,
                     v112 IN NUMBER:=NULL, v113 IN NUMBER:=NULL,
                     v114 IN NUMBER:=NULL, v115 IN NUMBER:=NULL,
                     v116 IN NUMBER:=NULL, v117 IN NUMBER:=NULL,
                     v118 IN NUMBER:=NULL, v119 IN NUMBER:=NULL,
                     v120 IN NUMBER:=NULL, v121 IN NUMBER:=NULL,
                     v122 IN NUMBER:=NULL, v123 IN NUMBER:=NULL,
                     v124 IN NUMBER:=NULL, v125 IN NUMBER:=NULL,
                     v126 IN NUMBER:=NULL, v127 IN NUMBER:=NULL,
                     v128 IN NUMBER:=NULL, v129 IN NUMBER:=NULL,
                     v130 IN NUMBER:=NULL, v131 IN NUMBER:=NULL,
                     v132 IN NUMBER:=NULL, v133 IN NUMBER:=NULL,
                     v134 IN NUMBER:=NULL, v135 IN NUMBER:=NULL,
                     v136 IN NUMBER:=NULL, v137 IN NUMBER:=NULL,
                     v138 IN NUMBER:=NULL, v139 IN NUMBER:=NULL,
                     v140 IN NUMBER:=NULL, v141 IN NUMBER:=NULL,
                     v142 IN NUMBER:=NULL, v143 IN NUMBER:=NULL,
                     v144 IN NUMBER:=NULL, v145 IN NUMBER:=NULL,
                     v146 IN NUMBER:=NULL, v147 IN NUMBER:=NULL,
                     v148 IN NUMBER:=NULL, v149 IN NUMBER:=NULL,
                     v150 IN NUMBER:=NULL, v151 IN NUMBER:=NULL,
                     v152 IN NUMBER:=NULL, v153 IN NUMBER:=NULL,
                     v154 IN NUMBER:=NULL, v155 IN NUMBER:=NULL,
                     v156 IN NUMBER:=NULL, v157 IN NUMBER:=NULL,
                     v158 IN NUMBER:=NULL, v159 IN NUMBER:=NULL,
                     v160 IN NUMBER:=NULL, v161 IN NUMBER:=NULL,
                     v162 IN NUMBER:=NULL, v163 IN NUMBER:=NULL,
                     v164 IN NUMBER:=NULL, v165 IN NUMBER:=NULL,
                     v166 IN NUMBER:=NULL, v167 IN NUMBER:=NULL,
                     v168 IN NUMBER:=NULL, v169 IN NUMBER:=NULL,
                     v170 IN NUMBER:=NULL, v171 IN NUMBER:=NULL,
                     v172 IN NUMBER:=NULL, v173 IN NUMBER:=NULL,
                     v174 IN NUMBER:=NULL, v175 IN NUMBER:=NULL,
                     v176 IN NUMBER:=NULL, v177 IN NUMBER:=NULL,
                     v178 IN NUMBER:=NULL, v179 IN NUMBER:=NULL,
                     v180 IN NUMBER:=NULL, v181 IN NUMBER:=NULL,
                     v182 IN NUMBER:=NULL, v183 IN NUMBER:=NULL,
                     v184 IN NUMBER:=NULL, v185 IN NUMBER:=NULL,
                     v186 IN NUMBER:=NULL, v187 IN NUMBER:=NULL,
                     v188 IN NUMBER:=NULL, v189 IN NUMBER:=NULL,
                     v190 IN NUMBER:=NULL, v191 IN NUMBER:=NULL,
                     v192 IN NUMBER:=NULL, v193 IN NUMBER:=NULL,
                     v194 IN NUMBER:=NULL, v195 IN NUMBER:=NULL,
                     v196 IN NUMBER:=NULL, v197 IN NUMBER:=NULL,
                     v198 IN NUMBER:=NULL, v199 IN NUMBER:=NULL,
                     v200 IN NUMBER:=NULL, v201 IN NUMBER:=NULL,
                     v202 IN NUMBER:=NULL, v203 IN NUMBER:=NULL,
                     v204 IN NUMBER:=NULL, v205 IN NUMBER:=NULL,
                     v206 IN NUMBER:=NULL, v207 IN NUMBER:=NULL,
                     v208 IN NUMBER:=NULL, v209 IN NUMBER:=NULL,
                     v210 IN NUMBER:=NULL, v211 IN NUMBER:=NULL,
                     v212 IN NUMBER:=NULL, v213 IN NUMBER:=NULL,
                     v214 IN NUMBER:=NULL, v215 IN NUMBER:=NULL,
                     v216 IN NUMBER:=NULL, v217 IN NUMBER:=NULL,
                     v218 IN NUMBER:=NULL, v219 IN NUMBER:=NULL,
                     v220 IN NUMBER:=NULL, v221 IN NUMBER:=NULL,
                     v222 IN NUMBER:=NULL, v223 IN NUMBER:=NULL,
                     v224 IN NUMBER:=NULL, v225 IN NUMBER:=NULL,
                     v226 IN NUMBER:=NULL, v227 IN NUMBER:=NULL,
                     v228 IN NUMBER:=NULL, v229 IN NUMBER:=NULL,
                     v230 IN NUMBER:=NULL, v231 IN NUMBER:=NULL,
                     v232 IN NUMBER:=NULL, v233 IN NUMBER:=NULL,
                     v234 IN NUMBER:=NULL, v235 IN NUMBER:=NULL,
                     v236 IN NUMBER:=NULL, v237 IN NUMBER:=NULL,
                     v238 IN NUMBER:=NULL, v239 IN NUMBER:=NULL,
                     v240 IN NUMBER:=NULL, v241 IN NUMBER:=NULL,
                     v242 IN NUMBER:=NULL, v243 IN NUMBER:=NULL,
                     v244 IN NUMBER:=NULL, v245 IN NUMBER:=NULL,
                     v246 IN NUMBER:=NULL, v247 IN NUMBER:=NULL,
                     v248 IN NUMBER:=NULL, v249 IN NUMBER:=NULL )
return VARCHAR2 ;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);


------------------------------------------------------------------------------
-- PART II. Functions and procedures for object model                       --
------------------------------------------------------------------------------

--
-- NAME: 
--      relate - object relate function
-- DESCRIPTION
--      This function operates on two geometries and, based on the mask,
--      can determine their relationship. 
--
-- ARGUMENTS
--      geom1     - the first geometry object. 
--      dim1      - the dimensional information array corresponding to the
--                  first geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      mask      - relationship mask, any combionation of:
--                  DISJOINT, TOUCH, EQUAL, INSIDE, CONTAINS, COVEREDBY, 
--                  COVERS, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT,
--                  OR DETERMINE, OR ANYINTERACT
--      geom2     - the second geometry object. 
--      dim2      - the dimensional information array corresponding to the
--                  second geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      tol       - tolerance value.
--
-- RETURNS
--      If any combination of the following mask options is specified as the
--      mask argument, relate returns the relation if it matches passes mask 
--      otherwise 'FALSE':
--      DISJOINT, TOUCH, EQUAL, INSIDE, CONTAINS, COVEREDBY, COVERS,
--      OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT.
--
--      Relate will return one of the above relations if the following mask is
--      specified: 'DETERMINE'.
--
--      Relate will return 'TRUE' or 'FALSE' for if the following mask is 
--      specified: 'ANYINTERACT'.
--

function relate(geom1 IN MDSYS.SDO_GEOMETRY, 
                dim1  IN MDSYS.SDO_DIM_ARRAY,
                mask  IN VARCHAR2,
                geom2 IN MDSYS.SDO_GEOMETRY,
                dim2  IN MDSYS.SDO_DIM_ARRAY)
return VARCHAR2 PARALLEL_ENABLE;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);


function relate(geom1 IN MDSYS.SDO_GEOMETRY, 
                mask  IN VARCHAR2,
                geom2 IN MDSYS.SDO_GEOMETRY,
                tol   IN NUMBER DEFAULT NULL)
return VARCHAR2 PARALLEL_ENABLE;
-- pragma restrict_references(relate, WNDS, WNPS, RNPS);


--
-- NAME: 
--      within_distance - object within distance function
-- DESCRIPTION
--      This function operates on two geometries and determines if they
--      are within the distance of <dist>. 
--
-- ARGUMENTS
--      geom1     - the first geometry object. 
--      dim1      - the dimensional information array corresponding to the
--                  first geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      dist      - Euclidean distance value.
--      geom2     - the second geometry object. 
--      dim2      - the dimensional information array corresponding to the
--                  second geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      tol       - tolerance value.
--      ellipsoidal - ellipsoidal distance will be returned
--
-- RETURNS
--      'TRUE' if the two geometries are within distance of <dist> from 
--      each other, or 'FALSE' otherwise.
--

function within_distance(geom1 IN MDSYS.SDO_GEOMETRY, 
                         dim1  IN MDSYS.SDO_DIM_ARRAY,
                         dist  IN NUMBER,
                         geom2 IN MDSYS.SDO_GEOMETRY,
                         dim2  IN MDSYS.SDO_DIM_ARRAY,
                         units IN VARCHAR2 DEFAULT NULL,
                         ellipsoidal IN VARCHAR2 DEFAULT NULL)
return VARCHAR2 PARALLEL_ENABLE;
 -- pragma restrict_references(within_distance, WNDS, WNPS, RNPS);


function within_distance(geom1 IN MDSYS.SDO_GEOMETRY, 
                         dist  IN NUMBER,
                         geom2 IN MDSYS.SDO_GEOMETRY,
                         tol   IN NUMBER DEFAULT NULL,
                         units IN VARCHAR2 DEFAULT NULL,
                         ellipsoidal IN VARCHAR2 DEFAULT NULL)
return VARCHAR2 PARALLEL_ENABLE;
 -- pragma restrict_references(within_distance, WNDS, WNPS, RNPS);


--
-- NAME: 
--      sdo_buffer -- buffer generation
-- DESCRIPTION
--      This function generates a buffer polygon for the input geometry 
--      object with buffer distance <dist>. 
--
-- ARGUMENTS
--      geom      - the input geometry object. 
--      dim       - the dimensional information array corresponding to the
--                  input geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      dist      - Euclidean distance value.
--      params    - Unit of the above dist; arc_tolerance for geodetic buffering
--      tol       - tolerance value.
--
-- RETURNS
--      This function returns a geometry object representing the buffer
--      polygon.
--

function sdo_buffer(geom IN MDSYS.SDO_GEOMETRY, 
                    dim  IN MDSYS.SDO_DIM_ARRAY,
                    dist IN NUMBER)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_buffer, WNDS, WNPS, TRUST);


function sdo_buffer(geom IN MDSYS.SDO_GEOMETRY, 
                    dist IN NUMBER,
                    tol  IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_buffer, WNDS, WNPS, TRUST);

function sdo_buffer(geom IN MDSYS.SDO_GEOMETRY, 
                    dim  IN MDSYS.SDO_DIM_ARRAY,
                    dist IN NUMBER,
                    params IN VARCHAR2)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_buffer, WNDS, WNPS, TRUST);

function sdo_buffer(geom IN MDSYS.SDO_GEOMETRY, 
                    dist IN NUMBER,
                    tol  IN NUMBER,
                    params IN VARCHAR2)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_buffer, WNDS, WNPS, TRUST);


-- Geometry operations 
--
-- NAME: 
--      sdo_union        -- union ('OR' operation) of two geometry objects. 
--      sdo_difference   -- difference ('MINUS' operation) of two geometry 
--                          objects. 
--      sdo_xor          -- symetric difference('XOR' operation) of two 
--                          geometry objects. 
--      sdo_intersection -- intersection ('AND' operation) of two geometry
--                          objects. 
--
-- DESCRIPTION
--      These four functions perform topological operations on two geometry 
--      objects. 
--
-- ARGUMENTS
--      geom1     - the first geometry object. 
--      dim1      - the dimensional information array corresponding to the
--                  first geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      geom2     - the second geometry object. 
--      dim2      - the dimensional information array corresponding to the
--                  second geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      tol       - tolerance value.
--
-- RETURNS
--      A geometry object representing the result of this geometry operation.
--

function sdo_union(geom1 IN MDSYS.SDO_GEOMETRY,
                   dim1  IN MDSYS.SDO_DIM_ARRAY,
                   geom2 IN MDSYS.SDO_GEOMETRY,
                   dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_union, WNDS, WNPS, RNPS);

function sdo_self_union(geom1 IN MDSYS.SDO_GEOMETRY,
                        dim1  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_difference(geom1 IN MDSYS.SDO_GEOMETRY,
                        dim1  IN MDSYS.SDO_DIM_ARRAY,
                        geom2 IN MDSYS.SDO_GEOMETRY,
                        dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_difference, WNDS, WNPS, RNPS);
 
function sdo_xor(geom1 IN MDSYS.SDO_GEOMETRY,
                 dim1  IN MDSYS.SDO_DIM_ARRAY,
                 geom2 IN MDSYS.SDO_GEOMETRY,
                 dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_xor, WNDS, WNPS, RNPS);
 
function sdo_intersection(geom1 IN MDSYS.SDO_GEOMETRY,
                          dim1  IN MDSYS.SDO_DIM_ARRAY,
                          geom2 IN MDSYS.SDO_GEOMETRY,
                          dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_intersection, WNDS, WNPS, RNPS);


function sdo_union(geom1 IN MDSYS.SDO_GEOMETRY,
                   geom2 IN MDSYS.SDO_GEOMETRY,
                   tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_union, WNDS, WNPS, RNPS);

function sdo_self_union(geom1 IN MDSYS.SDO_GEOMETRY,
                        tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_difference(geom1 IN MDSYS.SDO_GEOMETRY,
                        geom2 IN MDSYS.SDO_GEOMETRY,
                        tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_difference, WNDS, WNPS, RNPS);
 
function sdo_xor(geom1 IN MDSYS.SDO_GEOMETRY,
                 geom2 IN MDSYS.SDO_GEOMETRY,
                 tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_xor, WNDS, WNPS, RNPS);
 
function sdo_intersection(geom1 IN MDSYS.SDO_GEOMETRY,
                          geom2 IN MDSYS.SDO_GEOMETRY,
                          tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_intersection, WNDS, WNPS, RNPS);


-- Deprecated polygon operation interfaces  
--
-- NAME: 
--      sdo_poly_union        -- union ('OR' operation) of two polygons 
--      sdo_poly_difference   -- difference ('MINUS' operation) of two polygons 
--      sdo_poly_xor          -- symetric difference('XOR' operation) of two 
--                               polygons 
--      sdo_poly_intersection -- intersection ('AND' operation) of two polygons 
--
-- DESCRIPTION
--      These four functions are deprecated starting from version 8.1.6.
--      Please use geometry operations sdo_union, sdo_difference, 
--      sdo_xor, and sdo_intersection instead of the above polygon specific
--      functions.
--

function sdo_poly_union(geom1 IN MDSYS.SDO_GEOMETRY,
                        dim1  IN MDSYS.SDO_DIM_ARRAY,
                        geom2 IN MDSYS.SDO_GEOMETRY,
                        dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_poly_union, WNDS, WNPS, RNPS);

function sdo_poly_difference(geom1 IN MDSYS.SDO_GEOMETRY,
                             dim1  IN MDSYS.SDO_DIM_ARRAY,
                             geom2 IN MDSYS.SDO_GEOMETRY,
                             dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_poly_difference, WNDS, WNPS, RNPS);
 
function sdo_poly_xor(geom1 IN MDSYS.SDO_GEOMETRY,
                      dim1  IN MDSYS.SDO_DIM_ARRAY,
                      geom2 IN MDSYS.SDO_GEOMETRY,
                      dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_poly_xor, WNDS, WNPS, RNPS);
 
function sdo_poly_intersection(geom1 IN MDSYS.SDO_GEOMETRY,
                               dim1  IN MDSYS.SDO_DIM_ARRAY,
                               geom2 IN MDSYS.SDO_GEOMETRY,
                               dim2  IN MDSYS.SDO_DIM_ARRAY)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_poly_intersection, WNDS, WNPS, RNPS);


--
-- NAME: 
--      sdo_length -- compute length for one-dimensional geometry 
--                    (linestring), or perimeter for two-dimensional
--                    geometry (polygon)
-- DESCRIPTION
--      If the input polygon contains one or more holes, this function 
--      calculates perimeters for the exterior boundary and all the holes,
--      and then returns the sum of all the perimeters.
--
-- ARGUMENTS
--      geom      - the input geometry object. 
--      dim       - the dimensional information array corresponding to the
--                  input geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      tol       - tolerance value.
--      unit      - the unit used in the result, if needed 
--      count_shared_edges - Default 1(counting shared edges once) or 
--                                   2(counting shared edges twice)
--
-- RETURNS
--      This function returns length or perimeter of a geometry object.
--

function sdo_length(geom IN MDSYS.SDO_GEOMETRY, 
                    dim  IN MDSYS.SDO_DIM_ARRAY,
                    unit IN VARCHAR2 DEFAULT NULL,
                    count_shared_edges IN NUMBER DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_length, WNDS, WNPS, RNPS);


function sdo_length(geom IN MDSYS.SDO_GEOMETRY, 
                    tol  IN NUMBER DEFAULT NULL,
                    unit IN VARCHAR2 DEFAULT NULL,
                    count_shared_edges IN NUMBER DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_length, WNDS, WNPS, RNPS);


--
-- NAME: 
--      sdo_area -- compute area for two-dimensional geometry (polygon)
-- DESCRIPTION
--      This function returns correct area for polygon-with-holes.
--
-- ARGUMENTS
--      geom      - the input geometry object. 
--      dim       - the dimensional information array corresponding to the
--                  input geometry object, usually selected from 
--                  SDO_GEOM_METADATA table.
--      tol       - tolerance value.
--      unit      - the unit used in the result, if needed 
--
-- RETURNS
--      This function returns area of a geometry object.

function sdo_area(geom IN MDSYS.SDO_GEOMETRY, 
                  dim  IN MDSYS.SDO_DIM_ARRAY,
                  unit IN VARCHAR2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_area, WNDS, WNPS, RNPS);

function sdo_area(geom IN MDSYS.SDO_GEOMETRY,
                  tol  IN NUMBER DEFAULT NULL,
                  unit IN VARCHAR2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_area, WNDS, WNPS, RNPS);

function sdo_volume(geom IN MDSYS.SDO_GEOMETRY,
                  tol  IN NUMBER DEFAULT NULL,
                  unit IN VARCHAR2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--         sdo_distance
--
-- DESCRIPTION
--         Compute the distance between two geometries
--
-- ARGUMENTS
--        geom1    - the first geometry object
--        dim1     - the dimensional information array corresponding to the
--                   first geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        geom2    - the second geometry object. 
--        dim2     - the dimensional information array corresponding to the
--                   second geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        tol      - tolerance value.
--        unit     - the unit for the returned distance
--        ellipsoidal - ellipsoidal distance will be returned
--
-- RETURNS
--        the minimum distance between the two given geometries.
-- 

function   sdo_distance(geom1 IN mdsys.sdo_geometry,
                      dim1  IN mdsys.sdo_dim_array,
                      geom2 IN mdsys.sdo_geometry,
                      dim2  IN mdsys.sdo_dim_array,
                      unit  IN varchar2 DEFAULT NULL,
                      ellipsoidal IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_distance, WNDS, WNPS, RNPS);


function   sdo_distance(geom1 IN mdsys.sdo_geometry,
                        geom2 IN mdsys.sdo_geometry,
                        tol   IN NUMBER DEFAULT NULL,
                        unit  IN varchar2 DEFAULT NULL,
                        ellipsoidal IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_distance, WNDS, WNPS, RNPS);

--
-- NAME:
--        sdo_maxdistance_line
--
-- DESCRIPTION
--        Compute the the line that has the maximum distance between the 
--        two given geometries.
--
-- ARGUMENTS
--        geom1    - the first geometry object
--        dim1     - the dimensional information array corresponding to the
--                   first geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        geom2    - the second geometry object. 
--        dim2     - the dimensional information array corresponding to the
--                   second geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        tol      - tolerance value.
--
-- RETURNS
--        the line that has the maximum distance between the two given 
--        geometries.
-- 

function sdo_maxdistance_line(geom1 IN mdsys.sdo_geometry,
                              dim1  IN mdsys.sdo_dim_array,
                              geom2 IN mdsys.sdo_geometry,
                              dim2  IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_maxdistance_line(geom1 IN mdsys.sdo_geometry,
                              geom2 IN mdsys.sdo_geometry,
                              tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--        sdo_maxdistance
--
-- DESCRIPTION
--        Compute the maximal distance between two geometries
--
-- ARGUMENTS
--        geom1    - the first geometry object
--        dim1     - the dimensional information array corresponding to the
--                   first geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        geom2    - the second geometry object. 
--        dim2     - the dimensional information array corresponding to the
--                   second geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        tol      - tolerance value.
--        unit     - the unit for the returned distance
--
-- RETURNS
--        the maximal distance between the two given geometries.
-- 

function   sdo_maxdistance(geom1 IN mdsys.sdo_geometry,
                           dim1  IN mdsys.sdo_dim_array,
                           geom2 IN mdsys.sdo_geometry,
                           dim2  IN mdsys.sdo_dim_array,
                           unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

function   sdo_maxdistance(geom1 IN mdsys.sdo_geometry,
                           geom2 IN mdsys.sdo_geometry,
                           tol   IN NUMBER DEFAULT NULL,
                           unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--        sdo_diameter_line
--
-- DESCRIPTION
--        Compute the line that has the diameter of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value.
--
-- RETURNS
--        the line that has the diameter of geometry
-- 

function sdo_diameter_line(geom  IN mdsys.sdo_geometry,
                           dim   IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_diameter_line(geom  IN mdsys.sdo_geometry,
                           tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--        sdo_diameter
--
-- DESCRIPTION
--        Compute the diameter of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value.
--        unit     - the unit for the returned distance
--
-- RETURNS
--        the diameter of geometry
-- 

function   sdo_diameter(geom  IN mdsys.sdo_geometry,
                        dim   IN mdsys.sdo_dim_array,
                        unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

function   sdo_diameter(geom  IN mdsys.sdo_geometry,
                        tol   IN NUMBER DEFAULT NULL,
                        unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--        sdo_width_line
--
-- DESCRIPTION
--        Compute the line that has the width of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value.
--
-- RETURNS
--        the line that has the width of geometry
-- 

function sdo_width_line(geom  IN mdsys.sdo_geometry,
                        dim   IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_width_line(geom  IN mdsys.sdo_geometry,
                        tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--        sdo_width
--
-- DESCRIPTION
--        Compute the width of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value.
--        unit     - the unit for the returned distance
--
-- RETURNS
--        the width of geometry
-- 

function   sdo_width(geom  IN mdsys.sdo_geometry,
                     dim   IN mdsys.sdo_dim_array,
                     unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

function   sdo_width(geom  IN mdsys.sdo_geometry,
                     tol   IN NUMBER DEFAULT NULL,
                     unit  IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--         sdo_mbc
--
-- DESCRIPTION
--         Compute the minimum bounding circle of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value
--        arc_tolerance  - mainly used for densify geodetic arc
--
-- RETURNS
--        the minimum bounding circle of geometry
-- 
function sdo_mbc(geom          IN mdsys.sdo_geometry,
                 dim           IN mdsys.sdo_dim_array,
                 arc_tolerance IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_mbc(geom          IN mdsys.sdo_geometry,
                 tol           IN NUMBER DEFAULT NULL,
                 arc_tolerance IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--         sdo_mbc_center
--
-- DESCRIPTION
--         Compute the center of the minimum bounding circle of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value
--
-- RETURNS
--        the center of the minimum bounding circle of geometry
-- 
function sdo_mbc_center(geom   IN mdsys.sdo_geometry,
                        dim    IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

function sdo_mbc_center(geom   IN mdsys.sdo_geometry,
                        tol    IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

--
-- NAME:
--         sdo_mbc_radius
--
-- DESCRIPTION
--         Compute the radius of the minimum bounding circle of geometry
--
-- ARGUMENTS
--        geom     - the geometry object
--        dim      - the dimensional information array
--        tol      - tolerance value
--        unit     - the unit for the returned distance
--
-- RETURNS
--        the radius of the minimum bounding circle of geometry
-- 
function sdo_mbc_radius(geom          IN mdsys.sdo_geometry,
                        dim           IN mdsys.sdo_dim_array,
                        unit          IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

function sdo_mbc_radius(geom          IN mdsys.sdo_geometry,
                        tol           IN NUMBER DEFAULT NULL,
                        unit          IN varchar2 DEFAULT NULL)
return NUMBER DETERMINISTIC PARALLEL_ENABLE;

-- 
-- NAME: 
--
--      sdo_closest_points
-- DESCRIPTION
--      computes the minimum inter-geometry distance and the 
--      coordinates of closest point pair
--
-- ARGUMENTS
--        geom1 - the first geometry 
--        geom2 - the second geometry
--        tolerance - tolerance which is a number
--        unit  - depends on the coordinate system
-- RETURNS
--       -9999 - if any portion of either geometry has arc(s);
--       dist  - the distance - otherwise
--       geoma - the coordinates of first point of closest approach as a geometry object
--       geomb - the coordinates of second point of closest approach as a geometry object
--
-- Note that: dim1 and dim2 - dimensions of geom1 and geom2 respectively are computed internally.

procedure sdo_closest_points(geom1 IN mdsys.sdo_geometry,
                             geom2 IN mdsys.sdo_geometry,
                             tolerance IN NUMBER,
                             unit      IN VARCHAR2,
                             dist      OUT NUMBER,
                             geoma     OUT mdsys.sdo_geometry,
                             geomb     OUT mdsys.sdo_geometry);
--pragma restrict_references(sdo_closest_points, WNDS, WNPS, RNPS);


--
-- NAME:
--
--      sdo_convexhull
-- DESCRIPTION
--      calculates the convex hull of the given geometry.
--
--      If the geometry is of point type, or has less than three
--      points in total this function will return null.
--      
-- ARGUMENTS
--        geom1    - the geometry object
--        dim1     - the dimensional information array corresponding to the
--                   geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        tol      - tolerance value.
-- RETURNS
--      A geometry object representing the result of polygon operation.
--

function   sdo_convexhull(geom1 IN mdsys.sdo_geometry,
                          dim1  IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_convexhull, WNDS, WNPS, RNPS);

function   sdo_convexhull(geom1 IN mdsys.sdo_geometry,
                          tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_convexhull, WNDS, WNPS, RNPS);

function   sdo_triangulate(geom IN mdsys.sdo_geometry,
                           tol  IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_triangulate, WNDS, WNPS, RNPS);

-- computes the concavehull of the geometry, assuming 
-- that points are likely on the boundary, 
-- length: to stop, when the longest edge in the concave hull
-- is shorter than it.
function   sdo_concavehull_boundary(geom       IN mdsys.sdo_geometry,
                                    tol        IN NUMBER DEFAULT NULL, 
                                    length     IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_concavehull_boundary, WNDS, WNPS, RNPS);

-- computes the concavehull of the geometry, assuming 
-- that points are not only on the boundary, but also inside. 
-- radius: output, the radius of stopping circle 
function   sdo_concavehull(geom       IN mdsys.sdo_geometry,
                           tol        IN NUMBER, 
                           radius    OUT NUMBER)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_concavehull, WNDS, WNPS, RNPS);

-- computes the concavehull of the geometry, assuming 
-- that points are not only on the boundary, but also inside 
function   sdo_concavehull(geom       IN mdsys.sdo_geometry,
                           tol        IN NUMBER DEFAULT NULL) 
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_concavehull, WNDS, WNPS, RNPS);

-- computes the concavehull of the geometry array, assuming 
-- that points are not only on the boundary, but also inside. 
-- radius: output, the radius of stopping circle 
function   sdo_concavehull(geom       IN mdsys.sdo_geometry_array,
                           tol        IN NUMBER, 
                           radius    OUT NUMBER)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_concavehull, WNDS, WNPS, RNPS);

-- computes the concavehull of the geometry array, assuming 
-- that points are not only on the boundary, but also inside 
function   sdo_concavehull(geom       IN mdsys.sdo_geometry_array,
                           tol        IN NUMBER DEFAULT NULL) 
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_concavehull, WNDS, WNPS, RNPS);

-- computes the alpha shape of the geometry 
-- radius: alpha value = 1/radius
-- flag: 0 -> include points and edges, 
--       1 -> doesn't include points and edges
function sdo_alpha_shape(geom       IN mdsys.sdo_geometry,
                         tol        IN NUMBER DEFAULT NULL,
                         radius     IN NUMBER DEFAULT NULL,
                         flag       IN BINARY_INTEGER DEFAULT 0)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;


--
-- NAME:
--
--      sdo_centroid
-- DESCRIPTION
--      calculates the centroid of the given geometry.
--
--      The geometry must be of Polygon type; otherwise 
--      this function will return null (even for 
--      multi-polygon).
--      
-- ARGUMENTS
--        geom1    - the polygon-typed geometry object
--        dim1     - the dimensional information array corresponding to the
--                   geometry object, usually selected from 
--                   USER_SDO_GEOM_METADATA table.
--        tol      - tolerance value.
-- RETURNS
--      A point geometry object representing the centroid.
--

function   sdo_centroid(geom1 IN mdsys.sdo_geometry,
                        dim1  IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
-- pragma restrict_references(sdo_centroid, WNDS, WNPS, RNPS);

function   sdo_centroid(geom1 IN mdsys.sdo_geometry,
                        tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_centroid, WNDS, WNPS, RNPS);

--
-- NAME:
-- 
-- SDO_MBR
-- DESCRIPTION
-- Returns the MBR of the geometry object. The result will be
-- of type x003 with (1003,3,3) element. That is a rectangle
-- object in 2 dimensions.
--

function sdo_mbr(geom IN mdsys.sdo_geometry,
                        dim IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_mbr, WNDS, WNPS, RNPS);

function sdo_mbr(geom IN mdsys.sdo_geometry)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_mbr, WNDS, WNPS, RNPS);

function sdo_g3dconv(geom IN mdsys.sdo_geometry,
                     dim IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_g3dconv, WNDS, WNPS, RNPS);

function sdo_g3dconv(geom IN mdsys.sdo_geometry)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--pragma restrict_references(sdo_g3dconv, WNDS, WNPS, RNPS);


function sdo_max_mbr_ordinate(geom IN mdsys.sdo_geometry,
                              dim IN mdsys.sdo_dim_array,
                              ordinate_pos IN NUMBER)
return NUMBER PARALLEL_ENABLE;
pragma restrict_references(sdo_max_mbr_ordinate, WNDS, WNPS, RNPS);

function sdo_max_mbr_ordinate(geom IN mdsys.sdo_geometry,
                              ordinate_pos IN NUMBER)
return NUMBER PARALLEL_ENABLE;
pragma restrict_references(sdo_max_mbr_ordinate, WNDS, WNPS, RNPS);


function sdo_min_mbr_ordinate(geom IN mdsys.sdo_geometry,
                              dim IN mdsys.sdo_dim_array,
                              ordinate_pos IN NUMBER)
return NUMBER PARALLEL_ENABLE;
pragma restrict_references(sdo_min_mbr_ordinate, WNDS, WNPS, RNPS);

function sdo_min_mbr_ordinate(geom IN mdsys.sdo_geometry,
                              ordinate_pos IN NUMBER)
return NUMBER PARALLEL_ENABLE;
pragma restrict_references(sdo_min_mbr_ordinate, WNDS, WNPS, RNPS);



--
-- NAME:
--
--      sdo_pointonsurface
-- DESCRIPTION
--      Returns a point that is guaranteed to be on the surface of
--      the given geometry (polygon type).
--
--      Currently supports only geometries of Polygon type. 
--      
-- ARGUMENTS
--        geom1    - the polygon geometry object
--        dim1     - the dimensional information array corresponding to the
--                   geometry object, usually selected from 
--                   USER_SDO_GEOM_METADATA table.
--        tol      - tolerance value.
-- RETURNS
--      A point geometry object representing the point
--

function   sdo_pointonsurface(geom1 IN mdsys.sdo_geometry,
                              dim1  IN mdsys.sdo_dim_array)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_pointonsurface, WNDS, WNPS, RNPS);

function   sdo_pointonsurface(geom1 IN mdsys.sdo_geometry,
                              tol   IN NUMBER DEFAULT NULL)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_pointonsurface, WNDS, WNPS, RNPS);


--
-- NAME: 
--      validate_geometry - validate a geometry object
--      validate_layer    - validate all geometry objects in a column
-- DESCRIPTION
--      Validate geometry based on OGIS rules. Only check known SDO
--      data types. Elements of unknown type are considered valid.
--
--      If a geometry contains multiple polygon rings, validate_geometry
--      andvalidate_layer only check each ring against itself. No ring-ring 
--      relationship is examined at this time.
--
-- ARGUMENTS
--      theGeometry     - the geometry object to be validated
--      theDimInfo      - the dimension information corresponding to this 
--                        geometry object, usually selected from 
--                        SDO_GEOM_METADATA table.
--      tolerance       - tolerance value.
--      geom_table      - geometry object table name
--      geom_column     - geometry object column name
--      pkey_column     - primary key column name
--      result_table    - result table name
--
-- RETURNS      
--      'TRUE' if theGeometry is valid. Otherwise it returns Oracle 
--      standard error code for known error or 'FALSE' for unknown error.
--      validate_layer procedure populates the given result_table with
--      validation results.
--

function validate_geometry(theGeometry IN MDSYS.SDO_GEOMETRY, 
                           theDimInfo  IN MDSYS.SDO_DIM_ARRAY) 
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry, WNDS, WNPS, RNPS);

function validate_geometry(theGeometry IN MDSYS.SDO_GEOMETRY, 
                           tolerance   IN NUMBER DEFAULT NULL)
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry, WNDS, WNPS, RNPS);

function validate_geometry_with_srid(theGeometry IN MDSYS.SDO_GEOMETRY,
                                     tolerance   IN NUMBER,
                                     conditional IN VARCHAR2 := 'TRUE',
                                     flag10g     IN VARCHAR2 := 'FALSE',
                                     expected_srid IN NUMBER := -1)
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry_with_srid, WNDS, WNPS, RNPS);

function validate_geometry_with_srid(theGeometry IN MDSYS.SDO_GEOMETRY,
                                     theDimInfo  IN MDSYS.SDO_DIM_ARRAY,
                                     conditional IN VARCHAR2 := 'TRUE',
                                     flag10g     IN VARCHAR2 := 'FALSE',
                                     expected_srid IN NUMBER := -1)
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry_with_srid, WNDS, WNPS, RNPS);

function validate_geometry_with_context(theGeometry IN MDSYS.SDO_GEOMETRY,
                                      theDimInfo  IN MDSYS.SDO_DIM_ARRAY,
                                      conditional IN VARCHAR2 := 'TRUE',
                                      flag10g     IN VARCHAR2 := 'FALSE')
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry_with_context, WNDS, WNPS, RNPS);

function validate_geometry_with_context(theGeometry IN MDSYS.SDO_GEOMETRY,
                                        tolerance   IN NUMBER,
                                        conditional IN VARCHAR2 := 'TRUE',
                                        flag10g     IN VARCHAR2 := 'FALSE')
return VARCHAR2 PARALLEL_ENABLE; 
--pragma restrict_references(validate_geometry_with_context, WNDS, WNPS, RNPS);

procedure validate_layer(geom_table  IN VARCHAR2, 
                         geom_column IN VARCHAR2, 
                         pkey_column IN VARCHAR2, 
                         result_table IN VARCHAR2,
                         commit_interval IN NUMBER := -1);

procedure validate_layer_with_context(
            geom_table IN VARCHAR2, 
            geom_column IN VARCHAR2, 
            result_table IN VARCHAR2,
            commit_interval IN NUMBER := -1,
            conditional IN VARCHAR2 := 'TRUE',
            flag10g     IN VARCHAR2 := 'FALSE',
            geom_schema IN VARCHAR2 DEFAULT NULL) PARALLEL_ENABLE;

procedure vallayer_with_context_lrs(geom_table  IN VARCHAR2,
                                    geom_column IN VARCHAR2,
                                    pkey_rowid_column IN VARCHAR2,
                                    result_table IN VARCHAR2,
                                    commit_interval IN NUMBER := -1);

--
-- NAME:
--
--      sdo_arc_densify
-- DESCRIPTION
--      If the geometry contains arcs, this function will densify/segment
--      all acrs in the geometry.
--
-- ARGUMENTS
--        geom    - the geometry object
--        dim     - the dimensional information array corresponding to the
--                   geometry object, usually selected from 
--                   SDO_GEOM_METADATA table.
--        tol      - tolerance value.
-- RETURNS
--      A geometry object representing the result of polygon operation.
--

function   sdo_arc_densify(geom IN mdsys.sdo_geometry,
                           dim  IN mdsys.sdo_dim_array,
                           params IN VARCHAR2)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_arc_densify, WNDS, WNPS, RNPS);

function   sdo_arc_densify(geom IN mdsys.sdo_geometry,
                           tol  IN NUMBER,
                           params IN VARCHAR2)
return MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_arc_densify, WNDS, WNPS, RNPS);

function get_dim_array(geom IN MDSYS.SDO_GEOMETRY, tol IN NUMBER)
return MDSYS.SDO_DIM_ARRAY DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(get_dim_array, WNDS, WNPS, RNPS);

--
-- NAME:
--
--      sdo_is_nurbscurve
-- DESCRIPTION
--      This function detects if the geometry contains NURBS curves.
--      Used to return unsupported operation error for functions
--      which cannot operate on NURBS curves.
--
-- ARGUMENTS
--      geom    - the geometry object
-- RETURNS
--      TRUE if NURBS curve is present in the geometry, FALSE otherwise.
--

function sdo_is_nurbscurve(geom IN MDSYS.SDO_GEOMETRY)
return VARCHAR2 DETERMINISTIC PARALLEL_ENABLE;
pragma restrict_references(sdo_is_nurbscurve, WNDS, WNPS, RNPS);

FUNCTION sdo_insert_log_filter(ind_schema   IN VARCHAR2,
                               ind_name     IN VARCHAR2, 
                               indpart_name IN VARCHAR2,
                               min_x        IN NUMBER,
                               max_x        IN NUMBER,
                               min_y        IN NUMBER,
                               max_y        IN NUMBER, 
                               min_z        IN NUMBER,
                               max_z        IN NUMBER)
  RETURN VARCHAR2 PARALLEL_ENABLE;

--
-- NAME:
-- 
--      g3d_parameters 
-- DESCRIPTION
--      This procedure returns the Geodetic/Geographic3D parameters.
--
-- ARGUMENTS
--      srid                    - SRID
--      sm_mjr_axis             - Semi Major Axis
--      inv_fltn                - Inverse Flatenning
--      g3d_geog_crs_uom_factor - Geographical CRS UOM Factor
--
-- RETURNS
--      The G3D parameters: sm_mjr_axis, inv_fltn, g3d_geog_crs_uom_factor
--

PROCEDURE g3d_parameters(srid                    IN NUMBER,
                         sm_mjr_axis             OUT NUMBER,
                         inv_fltn                OUT NUMBER,
                         g3d_geog_crs_uom_factor OUT NUMBER);

--
-- NAME: 
-- 
--      check_geom_ords_radians 
-- DESCRIPTION
--      This procedure returns a flag whether an SRID means the 3D geometry has
--      ordinates in radians (angular) unit or not.
--
-- ARGUMENTS
--      srid             - SRID
--      is_unit_radians  - Flag returned 
-- RETURNS
--      is_unit_radians as 1 if SRID means the 3D geometry has ordinates in radians (angular) unit; otherwise as 0.
-- 

PROCEDURE check_geom_ords_radians(srid IN NUMBER,
                                  is_unit_radians OUT NUMBER);

-- For debugging
-- procedure output (p_text IN varchar2);

end SDO_GEOM;
/
show errors;

Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@?/rdbms/admin/sqlsessend.sql
Rem ********************************************************************


OHA YOOOO