MINI MINI MANI MO

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

Rem
Rem $Header: sdo/admin/sdotpmd.sql /main/30 2017/10/20 11:01:24 rjanders Exp $
Rem
Rem sdotpmd.sql
Rem
Rem Copyright (c) 2002, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      sdotpmd.sql - <one-line expansion of the name>
Rem
Rem    DESCRIPTION
Rem      <short description of component this file declares/defines>
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: sdo/admin/sdotpmd.sql
Rem    SQL_SHIPPED_FILE: md/admin/sdotpmd.sql
Rem    SQL_PHASE: SDOTPMD
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    rjanders    06/30/17 - Add SYS/MDSYS prefixes
Rem    rjanders    05/10/17 - #26037683: Raise 'when other' exceptions
Rem    rjanders    03/23/17 - #25437999: Remove 'when others then NULL'
Rem                           handlers
Rem    rjanders    03/09/17 - Add missing SQL_FILE_METADATA information
Rem    sravada     01/11/17 - bug 25370681
Rem    rjanders    09/16/15 - #21825604: Remove WITH GRANT OPTION from PUBLIC
Rem    sravada     06/29/15 - change CURRENT_SCHEMA to CURRENT_USER
Rem    rjanders    02/01/15 - #20418139: Cannot grant SELECT to PUBLIC
Rem    rjanders    01/02/15 - long identifier project phase 1
Rem    rjanders    03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem                           initialization
Rem    sravada     11/14/12 - add drop/create for new metadata
Rem    sravada     10/15/12 - add migreate to new table
Rem    sravada     07/12/11 - move sdo_topo_drop_ftbl
Rem    sravada     03/08/06 - bug 5076980 
Rem    zzhang      05/03/05 - replace sdo_topo_drop_ftbl for ningan
Rem                           to accomodate MDSYS privilege change
Rem                           on DELETE ANY TABLE
Rem    sravada     07/29/04 - add exception handlers 
Rem    sravada     04/28/04 - add metadata for grid snapping 
Rem    ningan      01/29/04 - fix exception handling in trigger 
Rem                           sdo_topo_drop_ftbl
Rem    sravada     01/29/04 - grant public grant option 
Rem    ningan      01/23/04 - fix bug 2869471 - add trigger
Rem    sravada     08/12/03 - add hierarchy level 
Rem    sravada     06/10/03 - remove topology type
Rem    rkothuri    01/02/03 - fix all_topo_info, all_topo_metadata views
Rem    sravada     11/18/02 - add topology id
Rem    sravada     10/31/02 - change feature to topo_geometry
Rem    sravada     07/29/02 - add layer feature type
Rem    sravada     07/22/02 - add tolerance
Rem    sravada     07/19/02 - sravada_topo_metadata_views
Rem    sravada     07/19/02 - 
Rem    sravada     07/17/02 - Created
Rem

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

-- Function to copy the data from SDO_Topo_Geometry_Layer_Array to
-- SDO_Topo_Geometry_Layer_Table format
create or replace function get_Topo_Geometry_Layer_Table (
   Topo_Geometry_Layers IN SDO_Topo_Geometry_Layer_Array) return
  SDO_Topo_Geometry_Layer_Table DETERMINISTIC IS
tp_table SDO_Topo_Geometry_Layer_Table;
layer SDO_TOPO_GEOMETRY_LAYER;
layer_tab SDO_Topo_Geometry_Layer_Table;
idx number;
begin
  layer := Topo_Geometry_Layers(1);
  if (layer IS NULL) then
    return SDO_Topo_Geometry_Layer_Table(SDO_TOPO_GEOMETRY_LAYER(NULL,NULL,NULL,NULL,NULL,NULL,NULL));
  else
   layer_tab := SDO_Topo_Geometry_Layer_Table();
   for idx in 1 .. Topo_Geometry_Layers.count loop
    layer_tab.extend;
    layer_tab(idx) := Topo_Geometry_Layers(idx);
   end loop;
   return layer_tab;
  end if;

end;
/
show errors;

-- Function that can be used for downgrade
create or replace function get_Topo_Geometry_Layer_Array (
   Topo_Geometry_Layers IN SDO_Topo_Geometry_Layer_Table) return
  SDO_Topo_Geometry_Layer_Array DETERMINISTIC IS
tp_array SDO_Topo_Geometry_Layer_Array;
layer SDO_TOPO_GEOMETRY_LAYER;
layer_arr SDO_Topo_Geometry_Layer_Array;
idx number;
begin
  layer := Topo_Geometry_Layers(1);
  if (layer.owner IS NULL) then
    return SDO_Topo_Geometry_Layer_Array(NULL);
  else
   layer_arr := SDO_Topo_Geometry_Layer_Array();
   for idx in 1 .. Topo_Geometry_Layers.count loop
    layer_arr.extend;
    layer_arr(idx) := Topo_Geometry_Layers(idx);
   end loop;
   return layer_arr;
  end if;

end;
/
show errors;


/*
 If there is a table already, check to see if there is 
 SDO_Topo_Geometry_Layer_Array column in the metadata table. If yes,
 rename the table to SDO_TOPO_METADATA_TABLE_OLD */
declare
cnt number;
begin
  begin
    execute immediate '  select count(*) from sys.all_tab_columns ' ||
     ' where owner = ''MDSYS'' and TABLE_NAME = ''SDO_TOPO_METADATA_TABLE'' '||
     '  and COLUMN_NAME = ''TOPO_GEOMETRY_LAYERS'' and  ' ||
     ' DATA_TYPE = ''SDO_TOPO_GEOMETRY_LAYER_ARRAY'' ' into cnt ;
    if (cnt = 1) then
      execute immediate 
       ' create table SDO_TOPO_METADATA_TABLE_OLD as select * from  SDO_TOPO_METADATA_TABLE';
      execute immediate 
       ' drop  table SDO_TOPO_METADATA_TABLE';
    end if;
  end;
end;
/

declare
  index_not_found exception;
  pragma exception_init(index_not_found, -01418);
  already_exists exception;
  pragma exception_init(already_exists, -00955);
begin
  begin
  execute immediate 
'Create Table SDO_TOPO_METADATA_TABLE (
 SDO_OWNER           varchar2(32),
 Topology            varchar2(20),
 Topology_id         NUMBER,
 Topo_Geometry_Layers      SDO_Topo_Geometry_Layer_Table,
 Tolerance           NUMBER,
 SRID                NUMBER,
 Digits_Right_Of_Decimal number default 16) ' ||
 ' Nested Table Topo_Geometry_Layers STORE AS SDO_TOPO_LAYER_TABLE ';
  exception
    when already_exists then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdotpmd.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
 end;

 begin
 execute immediate
' alter table SDO_TOPO_METADATA_TABLE
  modify ( SDO_OWNER varchar2(130) ) ';
 exception
   when others then
     SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
       'alter table SDO_TOPO_METADATA_TABLE ERROR=' || SQLERRM);
 end;

 begin
  execute immediate 
 ' drop index sdo_topo_metadata_idx  ';
  exception
    when index_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdotpmd.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
 end;

 begin
  execute immediate 
' Create index sdo_topo_metadata_idx on 
  SDO_TOPO_METADATA_TABLE (SDO_OWNER, Topology, Topology_id) ';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdotpmd.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); RAISE;
 end;

end;
/

-- now if there is an old formatted table, move the data to the new table
declare
  cnt number;
begin
    execute immediate '  select count(*) from SYS.all_tables ' ||
     ' where owner = ''MDSYS''  ' ||
     ' and TABLE_NAME = ''SDO_TOPO_METADATA_TABLE_OLD'' ' into cnt;
    if (cnt = 1) then
      execute immediate
      ' insert into SDO_TOPO_METADATA_TABLE ' ||
      ' select SDO_OWNER, Topology, Topology_id, ' ||
      ' get_Topo_Geometry_Layer_Table(Topo_Geometry_Layers), ' ||
      '  Tolerance, SRID, DIGITS_RIGHT_OF_DECIMAL ' ||
      ' from SDO_TOPO_METADATA_TABLE_OLD ';

      begin
        execute immediate
        ' drop table SDO_TOPO_METADATA_TABLE_PREV';
        exception
          when others then
            SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                                   'EXCEPTION[sdotpmd.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM); RAISE;
      end;

      execute immediate 
       ' create table SDO_TOPO_METADATA_TABLE_PREV AS select * from  SDO_TOPO_METADATA_TABLE_OLD';
      execute immediate 
       ' drop table  SDO_TOPO_METADATA_TABLE_OLD ';
    end if;
end;
/


Create or replace View mdsys.user_sdo_topo_info as
SELECT SDO_OWNER OWNER,
       Topology,
       Topology_id,
       Tolerance,
       SRID,
       b.owner Table_Schema,
       b.Table_Name Table_Name,
       b.Column_Name Column_Name,
       b.Layer_ID TG_Layer_ID,
       b.Layer_Type TG_Layer_Type,
       b.Layer_Level TG_Layer_Level,
       b.Child_Layer_id Child_Layer_id,
       Digits_Right_Of_Decimal
FROM MDSYS.SDO_TOPO_METADATA_TABLE a,
     TABLE (a.Topo_Geometry_Layers) b
WHERE  sdo_owner = sys_context('userenv', 'CURRENT_USER');


Create or replace view mdsys.all_sdo_topo_info as
SELECT SDO_OWNER OWNER,
       Topology,
       Topology_id,
       Tolerance,
       SRID,
       b.owner Table_Schema,
       b.Table_Name Table_Name,
       b.Column_Name Column_Name,
       b.Layer_ID TG_Layer_ID,
       b.Layer_Type TG_Layer_Type,
       b.Layer_Level TG_Layer_Level,
       b.Child_Layer_id Child_Layer_id,
       Digits_Right_Of_Decimal
FROM MDSYS.SDO_TOPO_METADATA_TABLE a,
     TABLE (a.Topo_Geometry_Layers) b
WHERE
(exists
   (select table_name from sys.all_tables
    where table_name=topology || '_NODE$'
      and owner = sdo_owner
    union all
    select view_name from sys.all_views
    where  view_name=topology || '_NODE$'
      and owner = sdo_owner));


Create or replace view mdsys.user_sdo_topo_metadata as
SELECT SDO_OWNER OWNER,
       Topology,
       Topology_id,
       Tolerance,
       SRID,
       b.owner Table_Schema,
       b.Table_Name Table_Name,
       b.Column_Name Column_Name,
       b.Layer_ID TG_Layer_ID,
       b.Layer_Type TG_Layer_Type,
       b.Layer_Level TG_Layer_Level,
       b.Child_Layer_id Child_Layer_id,
       Topology||'_NODE_S' Node_Sequence,
       Topology||'_EDGE_S' Edge_Sequence,
       Topology||'_FACE_S' Face_Sequence,
       Topology||'_TG_S' TG_Sequence,
       Digits_Right_Of_Decimal
FROM MDSYS.SDO_TOPO_METADATA_TABLE a,
     TABLE (a.Topo_Geometry_Layers) b
WHERE  sdo_owner = sys_context('userenv', 'CURRENT_USER');

Create or replace view mdsys.all_sdo_topo_metadata as
SELECT SDO_OWNER OWNER,
       Topology,
       Topology_id,
       Tolerance,
       SRID,
       b.owner Table_owner,
       b.Table_Name Table_Name,
       b.Column_Name Column_Name,
       b.Layer_ID TG_Layer_ID,
       b.Layer_Type TG_Layer_Type,
       b.Layer_Level TG_Layer_Level,
       b.Child_Layer_id Child_Layer_id,
       Topology||'_NODE_S' Node_Sequence,
       Topology||'_EDGE_S' Edge_Sequence,
       Topology||'_FACE_S' Face_Sequence,
       Topology||'_TG_S' TG_Sequence,
       Digits_Right_Of_Decimal
FROM MDSYS.SDO_TOPO_METADATA_TABLE a,
     TABLE (a.Topo_Geometry_Layers) b
WHERE
(exists
   (select table_name from sys.all_tables
    where table_name=topology || '_NODE$'
      and owner = sdo_owner 
    union all
    select view_name from sys.all_views
    where  view_name=topology || '_NODE$'
      and owner = sdo_owner));
 

grant read on mdsys.user_sdo_topo_metadata to public;
grant read on mdsys.all_sdo_topo_metadata to public;
create or replace public synonym user_sdo_topo_metadata for 
mdsys.user_sdo_topo_metadata;
create or replace  public synonym all_sdo_topo_metadata for 
mdsys.all_sdo_topo_metadata;

grant read on mdsys.user_sdo_topo_info to public;
grant read on mdsys.all_sdo_topo_info to public;
create or replace  public synonym user_sdo_topo_info for 
mdsys.user_sdo_topo_info;
create  or replace public synonym all_sdo_topo_info for mdsys.all_sdo_topo_info;


SHOW errors;




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


OHA YOOOO