MINI MINI MANI MO
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