MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/md/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/md/admin/sdocs.sql

-- Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
--
--    NAME
--      sdocs.sql - SDO OCI Package Header
--
--    DESCRIPTION
--      Declares the SDO OCI functions.  They are simply 
--      callouts.  See sdo3glh.sql for more information.
--
--    NOTES
--
Rem    BEGIN SQL_FILE_METADATA 
Rem    SQL_SOURCE_FILE: sdo/admin/sdocs.sql 
Rem    SQL_SHIPPED_FILE: md/admin/sdocs.sql 
Rem    SQL_PHASE: SDOCS
Rem    SQL_STARTUP_MODE: NORMAL 
Rem    SQL_IGNORABLE_ERRORS: NONE 
Rem    SQL_CALLING_FILE: sdo/admin/catmdlocp1.sql 
Rem    END SQL_FILE_METADATA
Rem
--    MODIFIED   (MM/DD/YY)
--    sravada     10/19/17 - lrg 20123949
--    rjanders    10/08/17 - Add MDSYS to spatial type
--    rjanders    05/10/17 - #26037683: Raise 'when other' exceptions
--    rjanders    03/23/17 - #25437999: Remove 'when others then NULL' handlers
--    mhorhamm    11/27/15 - Add map_urn_to_srid
--    rjanders    09/16/15 - #21825604: Remove WITH GRANT OPTION from PUBLIC
--    bkazar      03/11/15 - Bug 20409564
--    rjanders    02/01/15 - #20418139: Cannot grant SELECT to PUBLIC
--    rjanders    03/15/13 - #16473696: Start/End _ORACLE_SCRIPT initialization
--    sravada     03/16/12 - error handle drop type
--    rjanders    03/16/11 - Remove get_crs_dimensionality() - obsolete
--    rjanders    02/25/11 - Make get_crs_dimensionality() deterministic
--    rjanders    02/14/11 - Add sdo_cs_context_invalidate procedure
--    sravada     06/03/10 - add synonym for SrsNameSpace_Table
--    sravada     05/08/08 - sdo_cs_context_information
--    mhorhamm    09/04/07 - Unlock TRANSFORM_ACROSS_DIMS
--    mhorhamm    08/07/07 - Add function to parse WKT
--    mhorhamm    06/28/07 - Add function to generate new EPSG CRS, based on
--                           WKT
--    mhorhamm    06/15/07 - Add function to generate 3d WKT
--    mhorhamm    06/04/07 - Add function convert_mixed_axes_units
--    mhorhamm    05/18/07 - Add optional parameter to make_2d
--    mhorhamm    03/19/07 - Add tfm between dimensionalities
--    mhorhamm    04/20/07 - Add transform signatures
--    mhorhamm    04/19/07 - Add param
--    mhorhamm    04/02/07 - Add function to disambiguate EPSG PROJECTION name
--    mhorhamm    02/16/07 - Add intl_populate_datum_3params
--    mhorhamm    12/13/06 - Add signature to determine coverage region for
--                           NADCON
--    mhorhamm    12/05/06 - Add conversion signature
--    mhorhamm    12/04/06 - Add signature to convert SRID to 3D
--    mhorhamm    11/01/06 - Add public function to convert 2D to 3D
--    mhorhamm    09/29/06 - Add pragma
--    mhorhamm    08/02/06 - Add pragma for get_crs_dimensionality
--    mhorhamm    06/16/06 - Add function 
--    mhorhamm    06/12/06 - Add function to transform 2D geog geom to 
--                           respective 3D geog geom 
--    mhorhamm    05/19/06 - Add function getCrsDimensionality 
--    sravada     02/16/06 - add table to store SrsNameSpace, srsName mappings 
--    mhorhamm    02/17/06 - Add function to delete NTv2 XML data after use 
--    mhorhamm    02/15/06 - Add signature to handle XML in CLOB, as 
--                           alternative to XMLTYPE 
--    mhorhamm    01/31/06 - Add tolerance parameter to find_srid 
--    mhorhamm    01/16/06 - Add old signature, temporarily 
--    mhorhamm    01/16/06 - Add default values 
--    mhorhamm    01/12/06 - Add parameter to find_srid 
--    syuditsk    01/11/06 - adding public privilege to epsg_param 
--    mhorhamm    12/20/05 - Add parameters for find_srid 
--    mhorhamm    10/12/05 - Alter signatures of GeoRaster support functions 
--    mhorhamm    10/06/05 - Add 2 functions for use in GeoRaster 
--    mhorhamm    05/05/05 - Add further function for updating WKTs 
--    mhorhamm    05/04/05 - Add function for updating WKT for EPSG SRID 
--    mhorhamm    01/27/05 - Add NAD27 option to USNG 
--    mhorhamm    01/26/05 - Change interface to USNG 
--    mhorhamm    01/24/05 - Add functions for converting to/from USNG 
--    mhorhamm    12/01/04 - Add function to populate 7 params in datum table 
--    mhorhamm    11/18/04 - unexpose function 
--    mhorhamm    11/10/04 - Change pragma for transform and transform_orig
--    mhorhamm    11/02/04 - Add params 
--    mhorhamm    09/20/04 - Change param name 
--    mhorhamm    08/31/04 - Add parameter max_rel_num_discrepency to
--                           find_geog_crs and find_proj_crs
--    mhorhamm    08/30/04 - Rename function tfm_wkt_to_include_towkt84_tag 
--                           and tfm_wkt_to_exclude_towkt84_tag 
--    mhorhamm    08/27/04 - Add function to transform between WKT formats 
--                           with and without explicit TOWGS84 tag 
--    mhorhamm    08/25/04 - Add find_geog_crs 
--    mhorhamm    08/25/04 - Add parameter IS_LEGACY 
--    mhorhamm    08/25/04 - Add more parameters to find_proj_crs 
--    mhorhamm    08/24/04 - Add function to find projected crs with similar 
--                           params 
--    mhorhamm    08/24/04 - Add function to return EPSG version 
--    mhorhamm    08/23/04 - Make more functions internal 
--    mhorhamm    08/20/04 - Delete some internal functions from the interface 
--    mhorhamm    08/19/04 - Add parameters to find_proj_crs 
--    mhorhamm    08/17/04 - Function for searching CRS 
--    mhorhamm    08/16/04 - Fix function name infix 'SIRD' 
--    mhorhamm    08/12/04 - Make op_id NUMBER 
--    sravada     07/29/04 - add exception handlers 
--    mhorhamm    08/03/04 - Convert NADCON grid format to XML
--    mhorhamm    07/27/04 - Delete internal_create_crs_using_epsg 
--    mhorhamm    07/23/04 - Change TRANSFORM to TRANSFORM_ORIG and 
--                           TRANSFORM_USING_DENSIFICATION to TRANSFORM 
--    mhorhamm    07/20/04 - Add function to densify MBR prior to 
--                           transformation 
--    mhorhamm    06/16/04 - Rename get_decimally_encoded_uom to 
--                           get_decimally_encoded_equ_uom 
--    mhorhamm    06/16/04 - make function name more intuitive 
--    mhorhamm    06/15/04 - Add function to_decimally_encoded_srid 
--    mhorhamm    06/14/04 - Add functions to_EPSG_numeric_encoding and 
--                           to_alphanumeric_encoding 
--    mhorhamm    06/11/04 - Change signature 
--    mhorhamm    06/09/04 - Change two function names 
--    mhorhamm    06/07/04 - Add convenience function for converting WKT to 
--                           use EPSG projection 
--    mhorhamm    06/07/04 - Add convenience function for converting WKT to 
--                           use legacy projection 
--    mhorhamm    06/04/04 - Use new column in SDO_COORD_OP_PARAM_USE table, 
--                           instead of SDO_ALIASES to find param aliases 
--    mhorhamm    05/25/04 - helper function for converting units 
--    mhorhamm    05/17/04 - Delete functions for finding direct and indirect 
--                           chains 
--    mhorhamm    05/14/04 - Use more simple function to transform angle to 
--                           rad 
--    mhorhamm    05/07/04 - Add function for transforming between units of 
--                           measure 
--    mhorhamm    04/26/04 - Add function for finding alternative operations 
--                           between two crs 
--    mhorhamm    04/26/04 - Add function for deleting all rules 
--    mhorhamm    04/26/04 - Add function for creating obvious rules 
--    mhorhamm    04/20/04 - Add procedures for handling EPSG operations and 
--                           their being preferred or not 
--    mhorhamm    04/14/04 - Add function create_pref_concatenated_op 
--    mhorhamm    04/14/04 - Add convenient function for deleteing 
--                           concatenated operation 
--    mhorhamm    04/14/04 - Add convenient function for creating concatenated 
--    mhorhamm    04/06/04 - Add two subfunctions 
--    mhorhamm    01/27/04 - Fix parameter names with double underscores 
--    mhorhamm    01/23/04 - Add "internal" prefix to some functions 
--    mhorhamm    01/22/04 - Move content of package ecs into sdo_cs 
--    mhorhamm    12/15/03 - Eliminate redundant parameter in transform_layer 
--    mhorhamm    12/12/03 - Add transform_layer with ad-hoc tfm plan 
--    bblackwe    09/18/02 - fix international nautical mile local_cs and add UK nautical mile
--    sravada     04/26/02 - add validate WKT function
--    sravada     12/03/01 - bug 2023708
--    sravada     04/17/01 - remove user_transoform
--    sravada     01/29/01 -
--    sravada     10/05/00 - signature updates
--    sravada     07/03/00 - add user defined transforms
--    sravada     04/07/00 - add function signatures without the dimect
--    sravada     08/30/99 - deterministic functions
--    bblackwe    08/13/99 - layer
--    bblackwe    07/26/99 - integrate cs
--    bblackwe    06/03/99 - creation. 


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

declare
  already_exists exception;
  pragma exception_init(already_exists, -00955);
  dependent_object exception;
  pragma exception_init(dependent_object, -02303);
begin
  begin
   execute immediate 
  ' CREATE OR REPLACE TYPE MDSYS.SDO_SRID_CHAIN
   AS VARRAY(1048576) OF NUMBER ';
   execute immediate 
  ' CREATE OR REPLACE TYPE MDSYS.SDO_SRID_LIST
   AS VARRAY(1048576) OF NUMBER ';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
  end;

  begin
   execute immediate 
   ' CREATE OR REPLACE TYPE MDSYS.SDO_TRANSIENT_RULE
     AS OBJECT (
       SOURCE_SRID NUMBER,
       TARGET_SRID NUMBER,
       TFM         NUMBER) ';
  exception
    when dependent_object then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
  end;

 begin
  execute immediate 
  ' CREATE OR REPLACE TYPE MDSYS.SDO_TRANSIENT_RULE_SET
   AS VARRAY(1048576) OF MDSYS.SDO_TRANSIENT_RULE ';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); RAISE;
 end;

 begin
  execute immediate 
  ' CREATE SEQUENCE MDSYS.TMP_COORD_OPS
   START WITH 1000000 MINVALUE 1000000 MAXVALUE 2000000
  INCREMENT BY 1 NOCACHE CYCLE ';
  exception
    when already_exists then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM); RAISE;
 end;

end;
/

declare
  table_not_found exception;
  pragma exception_init(table_not_found, -00942);
begin
   begin
    execute immediate    ' drop table mdsys.sdo_cs_context_information';
   exception
    when table_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')5]: ' || SQLERRM); RAISE;
  end;
end;
/

create global temporary table mdsys.sdo_cs_context_information (
  from_srid number,
  to_srid   number,
  context RAW(4)) on commit preserve rows;

grant read on mdsys.sdo_cs_context_information to public;


declare
  does_not_exist exception;
  pragma exception_init(does_not_exist, -04043);
begin
   begin
      execute immediate 
              'DROP TYPE MDSYS.epsg_params';
   exception
     when does_not_exist then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM); RAISE;
   end;

   begin
      execute immediate 
            'DROP TYPE MDSYS.epsg_param';
   exception
     when does_not_exist then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')7]: ' || SQLERRM); RAISE;
   end;
end;
/

CREATE OR REPLACE TYPE MDSYS.epsg_param
AS OBJECT (
  id  NUMBER,
  val NUMBER,
  uom NUMBER);
/

CREATE OR REPLACE TYPE MDSYS.epsg_params
AS VARRAY(1048576) OF MDSYS.epsg_param;
/

declare 
  already_exists exception;
  pragma exception_init(already_exists, -00955);
  maximum_key_length exception;
  pragma exception_init(maximum_key_length, -01450);
  table_can_have_only_pk exception;
  pragma exception_init(table_can_have_only_pk, -02260);
begin
   -- Some DBs do not allow the wide key of more than 3K, so add the key
   -- in a second statement so that the table is created first
   -- this is mostly for backward test compatibility, in real life the
   -- add PK will always succeed.
   begin
      EXECUTE IMMEDIATE ' Create Table MDSYS.SrsNameSpace_Table ( ' ||
     ' SrsNameSpace varchar2(2000), SrsName varchar2(2000), SDO_SRID NUMBER)' ;
     -- || ' primary key(SrsNameSpace,SrsName) ) ';
      EXECUTE IMMEDIATE 
         ' grant select,insert,delete on MDSYS.SrsNameSpace_Table to public ';
   exception
     when already_exists then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')8]: ' || SQLERRM); RAISE;
    end;

    begin
      EXECUTE IMMEDIATE ' alter Table MDSYS.SrsNameSpace_Table  ' ||
              ' add primary key(SrsNameSpace,SrsName) ';
    exception
     when already_exists then NULL;
     when table_can_have_only_pk then NULL;
     when maximum_key_length then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')8.1]: ' || SQLERRM); RAISE;
    end;

    begin
      EXECUTE IMMEDIATE
         ' create or replace public  synonym SDO_SRS_NAMESPACE  for  MDSYS.SrsNameSpace_Table  ';
    exception
      when others then
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                               'EXCEPTION[sdocs.sql(' || $$PLSQL_LINE || ')9]: ' || SQLERRM); RAISE;
    end;
end;
/


CREATE OR REPLACE PACKAGE mdsys.sdo_cs AUTHID current_user AS
/*
  TYPE EPSG_IDS
  IS TABLE OF NUMBER;
*/
  -- for TRANSFORM operator: trusted callout interface
  FUNCTION transform_orig(geom IN mdsys.sdo_geometry, 
                     dim  IN mdsys.sdo_dim_array, 
                     to_srid IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  FUNCTION transform_orig_with_arcs(geom IN mdsys.sdo_geometry, 
                     dim  IN mdsys.sdo_dim_array, 
                     to_srid IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig_with_arcs, wnds, rnps, wnps);

  FUNCTION transform_orig(geom IN mdsys.sdo_geometry, 
                     tolerance  IN number, 
                     to_srid IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  FUNCTION transform_orig(geom   IN mdsys.sdo_geometry, 
                     to_srid   IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  FUNCTION transform_orig_with_arcs(geom   IN mdsys.sdo_geometry, 
                     to_srid   IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig_with_arcs, wnds, rnps, wnps);

  FUNCTION transform_orig(geom   IN mdsys.sdo_geometry, 
                     dim    IN mdsys.sdo_dim_array, 
                     to_srname IN VARCHAR2)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  FUNCTION transform_orig(geom   IN mdsys.sdo_geometry, 
                     tolerance    IN number, 
                     to_srname IN VARCHAR2)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  FUNCTION transform_orig(geom   IN mdsys.sdo_geometry, 
                     to_srname IN VARCHAR2)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform_orig, wnds, rnps, wnps);

  PROCEDURE transform_layer( table_in   IN  VARCHAR2,
                            column_in  IN  VARCHAR2,
                            table_out  IN  VARCHAR2,
                            to_srid    IN  NUMBER,
                            commit_interval IN NUMBER DEFAULT -1); 

  PROCEDURE transform_layer_with_arcs( table_in   IN  VARCHAR2,
                            column_in  IN  VARCHAR2,
                            table_out  IN  VARCHAR2,
                            to_srid    IN  NUMBER,
                            commit_interval IN NUMBER DEFAULT -1); 

  FUNCTION viewport_transform(geom IN mdsys.sdo_geometry,
                               to_srid   IN NUMBER)
              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(viewport_transform, wnds, rnps, wnps);
--  FUNCTION viewport_transform(geom IN mdsys.sdo_geometry,
--                               to_srname   IN VARCHAR2)
--              RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform, wnds, rnps, wnps);
  FUNCTION validate_wkt(srid in NUMBER)
     RETURN varchar2;
  PRAGMA restrict_references(validate_wkt, wnds, rnps, wnps);

  FUNCTION intl_validate_wkt(srid in NUMBER)
     RETURN varchar2;
  PRAGMA restrict_references(intl_validate_wkt, wnds, rnps, wnps);

  FUNCTION internal_read_proj_from_wkt(
    wkt VARCHAR2)
      RETURN VARCHAR2;
  PRAGMA restrict_references(internal_read_proj_from_wkt, wnds, rnps, wnps);

  FUNCTION internal_read_param_from_wkt(
    wkt         VARCHAR2,
    param_name  VARCHAR2)
      RETURN NUMBER;

  PROCEDURE transform_layer(
    table_in  IN VARCHAR2,
    column_in IN VARCHAR2,
    table_out IN VARCHAR2,
    use_plan  IN TFM_PLAN,
    commit_interval IN NUMBER DEFAULT -1);

  PROCEDURE transform_layer(
    table_in  IN VARCHAR2,
    column_in IN VARCHAR2,
    table_out IN VARCHAR2,
    use_case  IN VARCHAR2,
    to_srid   IN NUMBER,
    commit_interval IN NUMBER DEFAULT -1);

  FUNCTION determine_default_chain(
    source_srid IN NUMBER,
    target_srid IN NUMBER)
      RETURN MDSYS.SDO_SRID_CHAIN;

  FUNCTION determine_chain(
    transient_rule_set  IN MDSYS.SDO_TRANSIENT_RULE_SET,
    use_case            IN VARCHAR2,
    source_srid         IN NUMBER,
    target_srid         IN NUMBER)
      RETURN TFM_PLAN;

  FUNCTION internal_det_chain_VARCHAR(
    plan IN TFM_PLAN)
      RETURN VARCHAR2;

  FUNCTION internal_det_chain(
    transient_rule_set  IN MDSYS.SDO_TRANSIENT_RULE_SET,
    use_case            IN VARCHAR2,
    source_srid         IN NUMBER,
    target_srid         IN NUMBER,
    explain             IN BOOLEAN,
    explanation         OUT VARCHAR2)
      RETURN TFM_PLAN;

  FUNCTION internal_det_srid_wkt(
    srid1 NUMBER)
      RETURN VARCHAR2;

  FUNCTION internal_epsg_param_to_legacy(
    param_id  NUMBER,
    method_id NUMBER)
      RETURN VARCHAR2;

  FUNCTION map_oracle_srid_to_epsg(
    legacy_srid NUMBER)
      RETURN NUMBER;

  FUNCTION map_epsg_srid_to_oracle(
    epsg_srid NUMBER)
      RETURN NUMBER;

  PROCEDURE create_pref_concatenated_op(
    op_id     IN NUMBER,
    op_name   IN VARCHAR2,
    use_plan  IN TFM_PLAN,
    use_case  IN VARCHAR2);

  PROCEDURE create_concatenated_op(
    op_id     IN NUMBER,
    op_name   IN VARCHAR2,
    use_plan  IN TFM_PLAN);

  PROCEDURE delete_op(
    op_id     IN NUMBER);

  PROCEDURE add_preference_for_op(
    op_id       IN NUMBER,
    source_crs  IN NUMBER   DEFAULT NULL,
    target_crs  IN NUMBER   DEFAULT NULL,
    use_case    IN VARCHAR2 DEFAULT NULL);

  PROCEDURE revoke_preference_for_op(
    op_id       IN NUMBER,
    source_crs  IN NUMBER   DEFAULT NULL,
    target_crs  IN NUMBER   DEFAULT NULL,
    use_case    IN VARCHAR2 DEFAULT NULL);

  PROCEDURE create_obvious_epsg_rules(
    use_case    IN VARCHAR2 DEFAULT NULL);

  PROCEDURE delete_all_epsg_rules(
    use_case    IN VARCHAR2 DEFAULT NULL);

  FUNCTION transform_to_base_unit(
    value           IN NUMBER,
    source_unit_id  IN NUMBER)
      RETURN NUMBER;

  FUNCTION transform_to_wkt_param_unit(
    value                     IN NUMBER,
    source_unit_id            IN NUMBER,
    target_unit_id_if_length  IN NUMBER)
      RETURN NUMBER;

  PROCEDURE create_crs_using_legacy_proj(
    epsg_srid   IN NUMBER,
    new_srid    IN NUMBER);

  ------------------------------------------------------------------------------

  PROCEDURE internal_get_densification_res(
    crs_srid    IN NUMBER,
    minimum     IN NUMBER,
    maximum     IN NUMBER,
    resolution  OUT NUMBER,
    num_steps   OUT NUMBER);
  PRAGMA restrict_references(internal_get_densification_res, wnds, rnps, wnps);

  FUNCTION internal_densify_prior_to_tfm(
    mbr MDSYS.SDO_GEOMETRY)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(internal_densify_prior_to_tfm, wnds, rnps, wnps);

  ------------------------------------------------------------------------------

  FUNCTION transform(
    geom    IN MDSYS.SDO_GEOMETRY, 
    dim     IN MDSYS.SDO_DIM_ARRAY, 
    to_srid IN NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform(
    geom      IN MDSYS.SDO_GEOMETRY,
    tolerance IN NUMBER,
    to_srid   IN NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform(
    geom    IN MDSYS.SDO_GEOMETRY,
    to_srid IN NUMBER) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform_with_arcs(
    geom    IN MDSYS.SDO_GEOMETRY,
    to_srid IN NUMBER) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_with_arcs, wnds, rnps, wnps);

  FUNCTION transform_using_plan(
    geom     IN MDSYS.SDO_GEOMETRY,
    use_plan IN TFM_PLAN)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

  FUNCTION transform(
    geom     IN MDSYS.SDO_GEOMETRY,
    use_plan IN TFM_PLAN)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

  FUNCTION transform_orig_using_rules(
    geom     IN  mdsys.sdo_geometry,
    dim      IN  mdsys.sdo_dim_array,
    use_case IN VARCHAR2,
    tfmChain IN VARCHAR2,
    to_srid  IN  NUMBER) 
      RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig_using_rules, wnds, rnps, wnps);

  FUNCTION transform_orig_using_rules(
    geom     IN MDSYS.SDO_GEOMETRY,
    use_case IN VARCHAR2,
    tfmChain IN VARCHAR2,
    to_srid  IN NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_orig_using_rules, wnds, rnps, wnps);

  FUNCTION transform_using_case_name(
    geom     IN MDSYS.SDO_GEOMETRY,
    use_case IN VARCHAR2,
    to_srid  IN NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_using_case_name, wnds, rnps, wnps);

  FUNCTION transform(
    geom     IN MDSYS.SDO_GEOMETRY,
    use_case IN VARCHAR2,
    to_srid  IN NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform(
    geom      IN MDSYS.SDO_GEOMETRY,
    dim       IN MDSYS.SDO_DIM_ARRAY,
    to_srname IN  VARCHAR2) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform(
    geom      IN MDSYS.SDO_GEOMETRY,
    tolerance IN NUMBER,
    to_srname IN VARCHAR2)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  FUNCTION transform(
    geom      IN MDSYS.SDO_GEOMETRY,
    to_srname IN VARCHAR2) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
--  PRAGMA restrict_references(transform, wnds, rnps, wnps);

  ------------------------------------------------------------------------------

  PROCEDURE convert_NADCON_to_XML(
    LAA_CLOB  IN CLOB,
    LOA_CLOB  IN CLOB,
    xml_grid  OUT XMLTYPE);

  PROCEDURE convert_NTv2_to_XML(
    NTv2_CLOB IN CLOB,
    xml_grid  OUT XMLTYPE);

  PROCEDURE convert_XML_to_NADCON(
    xml_grid  IN XMLTYPE,
    LAA_CLOB  OUT CLOB,
    LOA_CLOB  OUT CLOB);

  PROCEDURE convert_XML_to_NTv2(
    xml_grid  IN XMLTYPE,
    NTv2_CLOB OUT CLOB);

  PROCEDURE convert_XML_table_to_NTv2(
    ntv2_file_id IN NUMBER,
    NTv2_CLOB    OUT CLOB);

  PROCEDURE convert_NTv2_to_XML_table(
    NTv2_CLOB    IN CLOB,
    ntv2_file_id OUT NUMBER);

  PROCEDURE delete_NTv2_xml_data(
    ntv2_file_id in number);

  function determine_nadcon_coverage(
    coord_op_id number)
      return mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

  FUNCTION find_geog_crs(
    reference_srid          IN NUMBER,
    is_legacy               IN VARCHAR2,
    max_rel_num_difference  IN NUMBER DEFAULT 0.000001)
      RETURN MDSYS.SDO_SRID_LIST;

  FUNCTION find_geog_crs(
    reference_wkt           IN VARCHAR2,
    is_legacy               IN VARCHAR2,
    max_rel_num_difference  IN NUMBER DEFAULT 0.000001)
      RETURN MDSYS.SDO_SRID_LIST;

  FUNCTION find_proj_crs(
    reference_srid          IN NUMBER,
    is_legacy               IN VARCHAR2,
    max_rel_num_difference  IN NUMBER DEFAULT 0.000001)
      RETURN MDSYS.SDO_SRID_LIST;

  FUNCTION find_proj_crs(
    reference_wkt           IN VARCHAR2,
    is_legacy               IN VARCHAR2,
    max_rel_num_difference  IN NUMBER DEFAULT 0.000001)
      RETURN MDSYS.SDO_SRID_LIST;

  FUNCTION get_epsg_data_version
    RETURN VARCHAR2;

  ------------------------------------------------------------------------------

  FUNCTION from_OGC_SimpleFeature_SRS(
    wkt VARCHAR2)
      RETURN VARCHAR2;

  FUNCTION to_OGC_SimpleFeature_SRS(
    wkt VARCHAR2)
      RETURN VARCHAR2;

  ------------------------------------------------------------------------------

  PROCEDURE intl_populate_datum_3params(
    datum_id  NUMBER,
    op_id     NUMBER);

  PROCEDURE intl_populate_datum_7params(
    datum_id  NUMBER,
    op_id     NUMBER);

  ------------------------------------------------------------------------------

  FUNCTION to_USNG(
    geom              MDSYS.SDO_GEOMETRY,
    accuracyInMeters  NUMBER,
    datum             VARCHAR2 DEFAULT 'NAD83')
      RETURN
        VARCHAR2;

  FUNCTION from_USNG(
    usng              VARCHAR2,
    srid              NUMBER,
    datum             VARCHAR2 DEFAULT 'NAD83')
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

  ------------------------------------------------------------------------------

  FUNCTION to_GeoHash(
    geom           MDSYS.SDO_GEOMETRY,
    geohash_length NUMBER)
      RETURN
        VARCHAR2;

  FUNCTION from_GeoHash(
    geohash        VARCHAR2,
    srid           NUMBER)
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

  function get_GeoHash_cell_width(
    geohash_length NUMBER)
      return number DETERMINISTIC PARALLEL_ENABLE;

  function get_GeoHash_cell_height(
    geohash_length NUMBER)
      return number DETERMINISTIC PARALLEL_ENABLE;

  ------------------------------------------------------------------------------

  PROCEDURE update_wkts_for_all_epsg_crs;

  PROCEDURE update_wkts_for_epsg_crs(
    srid NUMBER);

  PROCEDURE update_wkts_for_epsg_param(
    coord_op_id   NUMBER,
    parameter_id  NUMBER);

  PROCEDURE update_wkts_for_epsg_op(
    coord_op_id   NUMBER);

  PROCEDURE update_wkts_for_epsg_datum(
    datum_id NUMBER);

  PROCEDURE update_wkts_for_epsg_ellips(
    ellipsoid_id NUMBER);

  PROCEDURE update_wkts_for_epsg_pm(
    prime_meridian_id NUMBER);

  function disambiguate_proj_name(
    srid number,
    wkt varchar2)
      return varchar2;

  function disambiguate_proj_name(
    srid number)
      return varchar2;

  ------------------------------------------------------------------------------

  function is_within_tolerance(
    a               number,
    b               number,
    rel_tolerance   number)
      return number;

  FUNCTION lookup_epsg_param(
    coord_op_id     number,
    parameter_id    number)
      return number;

  PROCEDURE find_srid(
    srid                OUT NUMBER,
    epsg_srid_geog      IN NUMBER DEFAULT NULL,
    epsg_srid_proj      IN NUMBER DEFAULT NULL,
    datum_id            IN NUMBER DEFAULT NULL,
    ellips_id           IN NUMBER DEFAULT NULL,
    pm_id               IN NUMBER DEFAULT NULL,
    proj_method_id      IN NUMBER DEFAULT NULL,
    coord_ref_sys_kind  IN VARCHAR2 DEFAULT NULL,
    semi_major_axis     IN NUMBER DEFAULT NULL,
    semi_minor_axis     IN NUMBER DEFAULT NULL,
    inv_flattening      IN NUMBER DEFAULT NULL,
    params              IN MDSYS.epsg_params DEFAULT NULL);

  PROCEDURE find_srid(
    srid                OUT NUMBER,
    epsg_srid_geog      IN NUMBER DEFAULT NULL,
    epsg_srid_proj      IN NUMBER DEFAULT NULL,
    datum_id            IN NUMBER DEFAULT NULL,
    ellips_id           IN NUMBER DEFAULT NULL,
    pm_id               IN NUMBER DEFAULT NULL,
    proj_method_id      IN NUMBER DEFAULT NULL,
    proj_op_id          IN NUMBER DEFAULT NULL,
    coord_ref_sys_kind  IN VARCHAR2 DEFAULT NULL,
    semi_major_axis     IN NUMBER DEFAULT NULL,
    semi_minor_axis     IN NUMBER DEFAULT NULL,
    inv_flattening      IN NUMBER DEFAULT NULL,
    params              IN MDSYS.epsg_params DEFAULT NULL,
    max_rel_num_difference  IN NUMBER DEFAULT 0.000001);

  function fill_in_default_units(
    params mdsys.epsg_params,
    crs number)
      return mdsys.epsg_params;

  PROCEDURE sdo_cs_context_invalidate;

  PROCEDURE find_epsg_params(
    srid                IN  NUMBER,
    epsg_srid_geog      OUT NUMBER,
    datum_id            OUT NUMBER,
    ellips_id           OUT NUMBER,
    pm_id               OUT NUMBER,
    proj_method_id      OUT NUMBER,
    proj_op_id          OUT NUMBER,
    coord_ref_sys_kind  OUT VARCHAR2,
    semi_major_axis     OUT NUMBER,
    semi_minor_axis     OUT NUMBER,
    inv_flattening      OUT NUMBER,
    params              OUT MDSYS.epsg_params);

  function make_3d(
    geom2d in mdsys.sdo_geometry,
    height in number default 0,
    target_srid in number default null)
      return mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

  function make_2d(
    geom3d in mdsys.sdo_geometry,
    target_srid in number default null)
      return mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

  function mbh2mbr
  (
      geom MDSYS.SDO_GEOMETRY
  )
  RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  
  function etype0_exists
  (
      elem_info mdsys.sdo_elem_info_array
  )
  RETURN NUMBER DETERMINISTIC PARALLEL_ENABLE;
  
  procedure remove_etype0
  (
      org_elem_info       IN mdsys.sdo_elem_info_array,
      org_ordinates       IN mdsys.sdo_ordinate_array,
      elem_info_no_etype0 IN OUT mdsys.sdo_elem_info_array,
      ordinates_no_etype0 IN OUT mdsys.sdo_ordinate_array
  );

  function convert_2d_to_3d(
    geom2d      mdsys.sdo_geometry,
    height      number             default 0,
    vert_id     number             default 9903,
    ellipsoidal varchar2           default 'TRUE',
    uom_id      number             default 9001)
      return mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

  function convert_3d_srid_to_2d(
    srid3d number)
      return number DETERMINISTIC PARALLEL_ENABLE;

  function convert_2d_srid_to_3d(
    srid2d      number,
    vert_id     number             default 9903,
    ellipsoidal varchar2           default 'TRUE',
    uom_id      number             default 9001)
      return number;

  ------------------------------------------------

  FUNCTION transform_across_dims(
    geom      IN MDSYS.SDO_GEOMETRY,
    to_srid   IN NUMBER) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_across_dims, wnds, rnps, wnps);

  FUNCTION transform_across_dims_wa(
    geom      IN MDSYS.SDO_GEOMETRY,
    to_srid   IN NUMBER) 
      RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(transform_across_dims_wa, wnds, rnps, wnps);

  PROCEDURE transform_layer_across_dims(
    table_in  IN VARCHAR2,
    column_in IN VARCHAR2,
    table_out IN VARCHAR2,
    to_srid   IN NUMBER,
    commit_interval IN NUMBER DEFAULT -1);

  PROCEDURE transform_layer_across_dims(
    table_in  IN VARCHAR2,
    column_in IN VARCHAR2,
    table_out IN VARCHAR2,
    use_plan  IN TFM_PLAN,
    commit_interval IN NUMBER DEFAULT -1);

  PROCEDURE transform_layer_across_dims(
    table_in  IN VARCHAR2,
    column_in IN VARCHAR2,
    table_out IN VARCHAR2,
    use_case  IN VARCHAR2,
    to_srid   IN NUMBER,
    commit_interval IN NUMBER DEFAULT -1);

  ------------------------------------------------

  function reformat_gtype(
    geom1 mdsys.sdo_geometry,
    srid2 number)
      return mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

    PROCEDURE register_SrsNameSpace ( SrsNameSpace IN varchar2,
                                      SrsName IN varchar2, sdo_srid in number);
    FUNCTION get_SRID_for_NameSpace(  SrsNameSpace IN varchar2, 
                                    SrsName IN varchar2) return NUMBER;
    FUNCTION get_SrsName_for_NameSpace(  SrsNameSpace IN varchar2, 
                                    sdo_srid IN number) return varchar2;

  function convert_mixed_axes_units(
    srid           number,
    unitless_value number,
    output_unit    varchar2)
      return number;

  function get_3d_wkt(
    srid number)
      return varchar2;

  function generate_crs_from_wkt(
    wkt                    varchar2, -- Input WKT
    proj_op_id             number,   -- ID of new proj operation, if required
    proj_op_name           varchar2, -- Name of new proj operation, if required
    datum_tfm_op_id        number,   -- ID of new datum tfm operation, if required
    datum_tfm_op_name      varchar2, -- Name of new datum tfm operation, if required
    exclude_existing_elems varchar2 default 'FALSE') -- Exclude elements that already exist in mdsys
      return CLOB;

  function generate_epsg_rule_for_3785(
    source_srid     number,
    datum_tfm_op_id number,
    concat_op_id    number)
      return CLOB;

  function get_wkt_path(
    wkt           varchar2,
    path          varchar2,
    default_value varchar2 default null)
      return varchar2;
  PRAGMA restrict_references(get_wkt_path, wnds, rnps, wnps);

  function tfm_axis_orientation_to_wkt(
    axis_orientation VARCHAR2)
      return VARCHAR2;

  procedure update_wkt_with_7_params(
    params     varchar2,
    datum_name varchar2);

  procedure update_wkts_with_hc_params;

  procedure determine_srid_units(
    srid        in  number,
    uom_id1     out number,
    uom_id2     out number,
    uom_id3     out number);

  function transform_ogc_cs_wkt_to_srs(
    wktext varchar2)
      return varchar2;

  --------------------------------------------------------

  function generate_script_from_uom_id(
    uom_id number,
    offset number default 0)
      return clob;

  function generate_script_from_cs_id(
    cs_id number,
    offset number default 0)
      return clob;

  function generate_script_from_op_id(
    op_id number,
    offset number default 0)
      return clob;

  function generate_script_from_pm_id(
    pm_id number,
    offset number default 0)
      return clob;

  function generate_script_from_ellips_id(
    ellipsoid_id number,
    offset number default 0)
      return clob;

  function generate_script_from_datum_id(
    datum_id number,
    offset number default 0)
      return clob;

  function generate_script_from_SRID(
    srid number,
    offset number default 0,
    include_units number default 1)
      return clob;

  function gen_merge_script_from_SRIDs(
    srids in mdsys.sdo_number_array)
      return clob;

  function validate_op(
    op_id number)
      return varchar2;

  FUNCTION dms_to_decimal_degree(
    lat_deg VARCHAR2,
    lat_min VARCHAR2,
    lat_sec VARCHAR2,
    lat_dir CHAR,
    lon_deg VARCHAR2,
    lon_min VARCHAR2,
    lon_sec VARCHAR2,
    lon_dir CHAR,
    srid    NUMBER default 8307)
      RETURN mdsys.sdo_geometry DETERMINISTIC PARALLEL_ENABLE;

  procedure decimal_degrees_to_dms(
    dec_deg   in  number,
    coord_deg out integer,
    coord_min out integer,
    coord_sec out number,
    coord_dir out char)
      DETERMINISTIC PARALLEL_ENABLE;

  procedure decimal_degrees_to_dms(
    lat     in  number,
    lon     in  number,
    lat_deg out integer,
    lat_min out integer,
    lat_sec out number,
    lat_dir out char,
    lon_deg out integer,
    lon_min out integer,
    lon_sec out number,
    lon_dir out char)
      DETERMINISTIC PARALLEL_ENABLE;

  procedure load_epsg_matrix(
    op_id        number,
    parameter_id number,
    directory_obj_name varchar2,
    file_name    varchar2)
      DETERMINISTIC PARALLEL_ENABLE;

  function validate_epsg_matrix(
    method_id    number,
    parameter_id number,
    matrix       clob)
      return varchar2
      DETERMINISTIC PARALLEL_ENABLE;

  function get_axis_order(
    srid number)
      return varchar2 DETERMINISTIC;

  function reverse_axis_order(
    srid number)
      return number DETERMINISTIC;

  procedure create_geog_metadata(
    table_name  varchar2,
    column_name varchar2,
    srid        number);

  function wrap_lats(
    geom mdsys.sdo_geometry)
      return mdsys.sdo_geometry
      DETERMINISTIC PARALLEL_ENABLE;
  PRAGMA restrict_references(wrap_lats, wnds, rnps, wnps);

  procedure get_crs_info(
    srid               in  number,
    coord_ref_sys_kind out varchar2,
    dimensionality     out number,
    axis1              out varchar2,
    axis2              out varchar2,
    axis3              out varchar2,
    uom1               out varchar2,
    uom2               out varchar2,
    uom3               out varchar2)
      DETERMINISTIC PARALLEL_ENABLE;

  function reassign_srid(
    geom mdsys.sdo_geometry,
    new_srid number)
      return mdsys.sdo_geometry deterministic parallel_enable;

  function map_urn_to_srid(
    urn varchar2)
      return
        number;

  function FROM_GEOJSON_CRS(
    crs  IN VARCHAR2)
      RETURN NUMBER;

  function FROM_GEOJSON_CRS(
    crs  IN CLOB)
      RETURN NUMBER;

  function TO_GEOJSON_CRS(
    srid IN NUMBER)
      RETURN CLOB;

  function transform_geojson(
    geom_geojson       varchar2,
    crs_source_geojson varchar2,
    crs_target_geojson varchar2)
      return clob;

  function transform_geojson(
    geom_geojson       clob,
    crs_source_geojson clob,
    crs_target_geojson clob)
      return clob;

END sdo_cs;
/

show errors;

GRANT EXECUTE ON MDSYS.SDO_SRID_CHAIN TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SDO_SRID_CHAIN FOR MDSYS.SDO_SRID_CHAIN;

-- TMP_COORD_OPS is a SEQUENCE
GRANT SELECT ON MDSYS.TMP_COORD_OPS TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM TMP_COORD_OPS FOR MDSYS.TMP_COORD_OPS;

GRANT EXECUTE ON MDSYS.EPSG_PARAM TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM EPSG_PARAM FOR MDSYS.EPSG_PARAM;

GRANT EXECUTE ON MDSYS.EPSG_PARAMS TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM EPSG_PARAMS FOR MDSYS.EPSG_PARAMS;

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

OHA YOOOO