MINI MINI MANI MO
Rem
Rem $Header: sdo/admin/sdonetmd.sql /main/88 2017/07/08 11:41:12 rjanders Exp $
Rem
Rem sdonetmd.sql
Rem
Rem Copyright (c) 2002, 2017, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem sdonetmd.sql - Network Manager Metadata
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/sdonetmd.sql
Rem SQL_SHIPPED_FILE: md/admin/sdonetmd.sql
Rem SQL_PHASE: SDONETMD
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: sdo/admin/catmdsdop3.sql
Rem END SQL_FILE_METADATA
Rem
Rem MODIFIED (MM/DD/YY)
Rem rjanders 07/06/17 - Add SYS/MDSYS prefixes
Rem rjanders 06/30/17 - Add SYS/MDSYS prefixes
Rem jcwang 06/12/17 - bug-26182373 use session_user in triggers
Rem rjanders 05/10/17 - #26037683: Raise 'when other' exceptions
Rem rjanders 04/13/17 - #25814260: Allow quoted bumpy-case usernames
Rem rjanders 03/23/17 - #25437999: Remove 'when others then NULL'
Rem handlers
Rem sravada 01/11/17 - bug 25370681
Rem jcwang 09/09/15 - add SQL file metadata
Rem rjanders 07/14/15 - #21306091: Add is_spatial column
Rem sravada 06/28/15 - fix := in NFE deletes
Rem rjanders 03/05/15 - long identifier project phase 4
Rem rjanders 02/01/15 - #20418139: Cannot grant SELECT to PUBLIC
Rem abmartin 01/08/15 - add deletions on NFE tables in drop user trigger
Rem rjanders 01/02/15 - long identifier project phase 1
Rem hgong 10/10/14 - remove checking for dba_java_classes in
Rem sdo_network_cons_ins_trig
Rem rjanders 09/16/13 - OCCS: Remove hardtabs
Rem rjanders 03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem initialization
Rem rjanders 04/22/12 - Correct open cursor exception handling
Rem rjanders 03/14/12 - Change upper() to nls_upper() [security]
Rem hgong 11/10/11 - add child network and hierarchy table to metadata
Rem hgong 09/14/11 - add name value pair type
Rem hgong 07/29/11 - delete feature metadata when user is dropped
Rem jcwang 07/11/11 - handle feature tracking before 12c
Rem jcwang 05/10/11 - change current_schema to current_user
Rem jcwang 04/15/11 - add feature usage registration when inserting a network in metadata
Rem hgong 04/09/10 - add feature metadata
Rem hgong 08/19/09 - not to raise exceptions
Rem hgong 06/17/09 - change create type to create or replace type
Rem hgong 03/24/09 - bug 8343434: use sequence number to fix
Rem concurrent writepath problem
Rem hgong 12/08/08 - add enclosing and assigned partition_ids for
Rem SDO_NET_UPD_HIST_NTBL
Rem hgong 12/01/08 - add CATEGORY_ID to user data metadata
Rem ningan 11/19/08 - add type SDO_NET_LINK & SDO_NET_LINK_NTBL
Rem ningan 11/11/08 - add type SDO_NET_UPD_HIST & SDO_NET_UPD_HIST_NTBL
Rem ningan 07/31/08 - consolidate AFTER DROP ON DATABASE triggers
Rem ningan 07/24/08 - add sdo_network_timestamps
Rem ningan 07/15/08 - lrg-3417773
Rem ningan 05/13/08 - bug-7038166
Rem hgong 02/28/08 - add NODE_LEVEL_TABLE_NAME to network metadata
Rem ningan 09/20/07 - bug b6415891: enhance trigger sdo_network_cons_ins_trig
Rem ningan 09/19/07 - bug b6415891: enhance trigger sdo_network_cons_drop_trig
Rem jcwang 09/11/07 - add network_java_objects views
Rem ningan 08/03/07 - add triggers relates to user_sdo_network_histories
Rem ningan 08/03/07 - add views user_& all_ sdo_network_histories
Rem ningan 08/02/07 - add sdo_network_histories
Rem hgong 06/06/07 - add owner to all_sdo_network_user_data
Rem jcwang 03/29/07 - bug-5963167
Rem hgong 09/29/06 - add component_table_name column to
Rem sdo_network_metadata_table
Rem hgong 09/06/06 - add partition_blob_table_name column to
Rem sdo_network_metadata_table
Rem ningan 06/28/06 - fix lrg-2247076
Rem ningan 04/24/06 - Alter the type of class_name column in
Rem sdo_network_constraints table
Rem jcwang 04/07/06 - fix metadata upgrade
Rem jcwang 02/14/06 - add subpath to metadata
Rem ningan 02/05/06 - Add adjusted filters to sdo_network_locks_wm
Rem ningan 02/03/06 - Fix sdo_network_locks_wm table defintion
Rem ningan 02/01/06 - Add owner to all_sdo_network_constraints
Rem ningan 01/27/06 - Add sdo_network_locks_wm table
Rem ningan 01/27/06 - Add user_sdo_network_locks_wm view
Rem ningan 01/27/06 - Add all_sdo_network_locks_wm view
Rem jcwang 11/29/05 - fix upgrade diff
Rem jcwang 11/14/05 - use constraint to check user data type
Rem jcwang 03/24/05 - add external_references for 11g
Rem jcwang 03/21/05 - add user_data_metadata for 11g
Rem ningan 03/02/05 - restrict the visibility of
Rem all_sdo_network_constraints
Rem jcwang 02/21/05 - sql injection bugs
Rem ningan 02/15/05 - Change user_sdo_network_constraint to
Rem user_sdo_network_constraints and
Rem change all_sdo_network_constraint to
Rem all_sdo_network_constraints and
Rem change sdo_network_constraint to
Rem sdo_network_constraints
Rem ningan 02/01/05 - add sdo_network_constraint table;
Rem add user_sdo_network_constraint and
Rem all_sdo_network_constraint views;
Rem add related triggers
Rem jcwang 12/20/04 - fix update trigger
Rem jcwang 12/17/04 - remove bidirected from network level
Rem jcwang 10/22/04 - add LINK_PARTITION_COLUMN
Rem jcwang 10/14/04 - add topology in metadata
Rem jcwang 10/06/04 - add topo_geom_column
Rem jcwang 09/29/04 - add duration column
Rem sravada 07/29/04 - add exception handlers
Rem jcwang 05/27/04 - Fix NETWORK_ID sequence
Rem jcwang 05/18/04 - add partitionColumnName
Rem jcwang 04/21/04 - fix insert trigger security bug
Rem jcwang 04/09/04 - use network_type to inter-network flag in network metadata
Rem jcwang 04/06/04 - create sequence for network_id
Rem jcwang 12/19/03 -
Rem jcwang 12/17/03 - convert all names to upper case
Rem jcwang 12/09/03 - add network_id
Rem jcwang 09/24/03 - remove insert,delete, and update from
Rem all_sdo_network_metadata view
Rem jcwang 09/05/03 - make no_of_partition default 1
Rem sravada 09/12/03 - remove SDO_NETWORK_IDX
Rem jcwang 08/28/03 - add network_id
Rem jcwang 08/26/03 - add external network reference
Rem jcwang 06/05/03 - enable function-based costs
Rem jcwang 03/17/03 - add path-link table name
Rem jcwang 03/11/03 - add node cost, change network_type to network_category, link_type to link_direction
Rem jcwang 02/21/03 - change to hierarchy_level
Rem jcwang 02/17/03 - add metadata constraints
Rem jcwang 01/24/03 - formatting
Rem jcwang 01/10/03 - add partition information
Rem sravada 12/18/02 -
Rem jcwang 11/20/02 - network test
Rem jcwang 10/25/02 - Add Network Hierarchical Structure
Rem jcwang 10/16/02 - Add LRS Geometry Option, Hierarchy, and Path table
Rem jcwang 10/04/02 - add to catmd10i
Rem jcwang 09/30/02 - jcwang_network_admin
Rem jcwang 09/19/02 - Created
Rem
Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@@?/rdbms/admin/sqlsessstart.sql
Rem ********************************************************************
--
-- sdo network manager (sdo_net) metadata table
--
-- drop the network metadata table if exists
-- don't drop as we lose data if upgrading from version to version
-- drop constraints
-- create the NDM network metadata table
-- NETWORK_CATEGORY: 'LOGICAL' OR 'SPATIAL'
-- NETWORK_TYPE : 'SIMPLE' OR 'COMPLEX'
-- LINK_DIRECTION : 'DIRECTED', or 'UNDIRECTED'
-- NO_OF_HIERARCHY_LEVELS: Number of Hierarchy Levels in the network
-- GEOM_TABLE_NAME(NETWORK_GEOM_COLUMN) represents referenced LRS geometry layer
-- for node and link geometry
--
-- default table/columns names:
-- node table : <network>_node$
-- link table : <network>_link$
-- path table : <network>_path$
-- path link table : <network>_plink$ (path_id, link_id)
-- node geom. column : geometry
-- node lrs geom column : (geom_id and measure)
-- node topo geom column : topo_geometry
-- link geom. column : geometry
-- link lrs geom column : (geom_id, start_measure, and end_measure)
-- link topo geom column : topo_geometry
-- path geom. column : geometry
-- node cost column : cost
-- link cost column : cost
-- path cost column : cost
-- subPath table :<network>_spath$
declare
already_exists exception;
pragma exception_init(already_exists, -00955);
begin
begin
execute immediate
' CREATE TABLE SDO_NETWORK_METADATA_TABLE (
SDO_OWNER varchar2(32)
DEFAULT sys_context(''userenv'',''CURRENT_USER'') NOT NULL,
NETWORK varchar2(24) NOT NULL,
NETWORK_ID number NOT NULL,
NETWORK_CATEGORY varchar2(12) NOT NULL
CHECK (NETWORK_CATEGORY IN (''SPATIAL'',''LOGICAL'')),
GEOMETRY_TYPE varchar2(24)
CHECK (GEOMETRY_TYPE IN (NULL,''SDO_GEOMETRY'',''LRS_GEOMETRY'',
''TOPO_GEOMETRY'')),
NETWORK_TYPE varchar2(24),
NO_OF_HIERARCHY_LEVELS number default 1,
NO_OF_PARTITIONS number default 1,
LRS_TABLE_NAME varchar2(32),
LRS_GEOM_COLUMN varchar2(32),
NODE_TABLE_NAME varchar2(32) NOT NULL,
NODE_GEOM_COLUMN varchar2(32),
NODE_COST_COLUMN varchar2(1024),
LINK_TABLE_NAME varchar2(32) NOT NULL,
LINK_GEOM_COLUMN varchar2(32),
LINK_DIRECTION varchar2(12) NOT NULL
CHECK (LINK_DIRECTION IN (''UNDIRECTED'',''BIDIRECTED'',''DIRECTED'')),
LINK_COST_COLUMN varchar2(1024),
PATH_TABLE_NAME varchar2(32),
PATH_GEOM_COLUMN varchar2(32),
PATH_LINK_TABLE_NAME varchar2(32),
PARTITION_TABLE_NAME varchar2(32),
CONSTRAINT unique_network_layer
UNIQUE (SDO_OWNER, NETWORK),
CONSTRAINT unique_network_node_layer
UNIQUE (SDO_OWNER, NETWORK, NODE_TABLE_NAME),
CONSTRAINT unique_network_link_layer
UNIQUE (SDO_OWNER, NETWORK, LINK_TABLE_NAME),
CONSTRAINT unique_lrs_geom_layer
UNIQUE (SDO_OWNER, NETWORK, LRS_TABLE_NAME),
CONSTRAINT unique_network_path_layer
UNIQUE (SDO_OWNER, NETWORK, PATH_TABLE_NAME),
CONSTRAINT unique_network_path_link_layer
UNIQUE (SDO_OWNER, NETWORK, PATH_LINK_TABLE_NAME)) ';
exception
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
-- drop all network views to avoid view-trigger dependency
declare
view_not_found exception;
pragma exception_init(view_not_found, -00942);
begin
begin
execute immediate 'drop view mdsys.user_sdo_network_metadata';
exception
when view_not_found then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
end;
begin
execute immediate 'drop view mdsys.all_sdo_network_metadata' ;
exception
when view_not_found then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
-- add new columns in the base metadata table
-- node partition column
-- link partition column
-- node duration column
-- link duration column
-- topology
-- link partition column
-- subpath table name
-- subpath geom column
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_METADATA_TABLE ADD ' ||
'( NODE_PARTITION_COLUMN varchar2(32),' ||
' LINK_PARTITION_COLUMN varchar2(32),' ||
' NODE_DURATION_COLUMN varchar2(32),' ||
' LINK_DURATION_COLUMN varchar2(32),' ||
' TOPOLOGY varchar2(32),' ||
' USER_DEFINED_DATA varchar2(1),' ||
' EXTERNAL_REFERENCES varchar2(1))' ;
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
--
-- add sub path metadata information
--
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_METADATA_TABLE ADD ' ||
'( SUBPATH_TABLE_NAME varchar2(32),' ||
' SUBPATH_GEOM_COLUMN varchar2(32))';
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')5]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
--
-- add partition blob table name
--
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_METADATA_TABLE ADD ' ||
'( PARTITION_BLOB_TABLE_NAME varchar2(32),' ||
' COMPONENT_TABLE_NAME varchar2(32))';
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
--
-- add max node level table name
--
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_METADATA_TABLE ADD ' ||
'( NODE_LEVEL_TABLE_NAME varchar2(32))';
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')7]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
--
-- add child network and hierarchy table name
--
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_METADATA_TABLE ADD ' ||
'( CHILD_NETWORK varchar2(32),' ||
' HIERARCHY_TABLE_NAME varchar2(32))';
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')8]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_METADATA_TABLE
modify ( SDO_OWNER varchar2(130),
LRS_TABLE_NAME varchar2(130),
LRS_GEOM_COLUMN varchar2(130),
NODE_TABLE_NAME varchar2(130),
NODE_GEOM_COLUMN varchar2(130),
LINK_TABLE_NAME varchar2(130),
LINK_GEOM_COLUMN varchar2(130),
PATH_TABLE_NAME varchar2(130),
PATH_GEOM_COLUMN varchar2(130),
PATH_LINK_TABLE_NAME varchar2(130),
PARTITION_TABLE_NAME varchar2(130),
SUBPATH_TABLE_NAME varchar2(130),
SUBPATH_GEOM_COLUMN varchar2(130),
PARTITION_BLOB_TABLE_NAME varchar2(130),
COMPONENT_TABLE_NAME varchar2(130),
NODE_LEVEL_TABLE_NAME varchar2(130),
CHILD_NETWORK varchar2(130),
HIERARCHY_TABLE_NAME varchar2(130) ) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_METADATA_TABLE ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- catch drop exception
-- create network ID sequence
declare
already_exists exception;
pragma exception_init(already_exists, -00955);
begin
begin
execute immediate
'CREATE SEQUENCE SDO_NDM_NETWORK_ID_SEQ START WITH 1 INCREMENT BY 1 ';
exception
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')9]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
-- advance SDO_NDM_NETWORK_ID_SEQ
DECLARE
max_net_id number;
id number;
BEGIN
EXECUTE IMMEDIATE 'SELECT MAX(NETWORK_ID) FROM SDO_NETWORK_METADATA_TABLE' into max_net_id;
IF ( max_net_id IS NOT NULL ) THEN
FOR i in 1..max_net_id LOOP
EXECUTE IMMEDIATE 'SELECT sdo_ndm_network_id_seq.nextval FROM SYS.DUAL' into id;
END LOOP;
END IF;
END;
/
SHOW ERRORS;
-- create NDM ID sequence to be used for any stored paths,
-- subpaths or network buffers
declare
already_exists exception;
pragma exception_init(already_exists, -00955);
begin
execute immediate
'CREATE SEQUENCE SDO_NDM_ID_SEQ START WITH 1 INCREMENT BY 1 NOCACHE';
exception
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')10]: ' || SQLERRM); RAISE;
end;
/
SHOW ERRORS
--grant select on SDO_NDM_ID_SEQ to all users
GRANT SELECT ON SDO_NDM_ID_SEQ TO PUBLIC;
-- crerate user_sdo_network_metadata
-- DROP VIEW USER_SDO_NETWORK_METADATA;
CREATE OR REPLACE VIEW MDSYS.USER_SDO_NETWORK_METADATA AS
SELECT NETWORK,
NETWORK_ID,
NETWORK_CATEGORY,
GEOMETRY_TYPE,
NETWORK_TYPE,
NO_OF_HIERARCHY_LEVELS,
NO_OF_PARTITIONS,
LRS_TABLE_NAME,
LRS_GEOM_COLUMN,
NODE_TABLE_NAME,
NODE_GEOM_COLUMN,
NODE_COST_COLUMN,
NODE_PARTITION_COLUMN,
NODE_DURATION_COLUMN,
LINK_TABLE_NAME,
LINK_GEOM_COLUMN,
LINK_DIRECTION,
LINK_COST_COLUMN,
LINK_PARTITION_COLUMN,
LINK_DURATION_COLUMN,
PATH_TABLE_NAME,
PATH_GEOM_COLUMN,
PATH_LINK_TABLE_NAME,
SUBPATH_TABLE_NAME,
SUBPATH_GEOM_COLUMN,
PARTITION_TABLE_NAME,
PARTITION_BLOB_TABLE_NAME,
COMPONENT_TABLE_NAME,
NODE_LEVEL_TABLE_NAME,
TOPOLOGY,
USER_DEFINED_DATA,
EXTERNAL_REFERENCES,
CHILD_NETWORK,
HIERARCHY_TABLE_NAME
FROM MDSYS.SDO_NETWORK_METADATA_TABLE
WHERE SDO_OWNER = sys_context('userenv','CURRENT_USER');
-- DROP VIEW ALL_SDO_NETWORK_METADATA;
CREATE OR REPLACE VIEW MDSYS.ALL_SDO_NETWORK_METADATA AS
SELECT SDO_OWNER OWNER,
NETWORK,
NETWORK_ID,
NETWORK_CATEGORY,
GEOMETRY_TYPE,
NETWORK_TYPE,
NO_OF_HIERARCHY_LEVELS,
NO_OF_PARTITIONS,
LRS_TABLE_NAME,
LRS_GEOM_COLUMN,
NODE_TABLE_NAME,
NODE_GEOM_COLUMN,
NODE_COST_COLUMN,
NODE_PARTITION_COLUMN,
NODE_DURATION_COLUMN,
LINK_TABLE_NAME,
LINK_GEOM_COLUMN,
LINK_DIRECTION,
LINK_COST_COLUMN,
LINK_PARTITION_COLUMN,
LINK_DURATION_COLUMN,
PATH_TABLE_NAME,
PATH_GEOM_COLUMN,
PATH_LINK_TABLE_NAME,
SUBPATH_TABLE_NAME,
SUBPATH_GEOM_COLUMN,
PARTITION_TABLE_NAME,
PARTITION_BLOB_TABLE_NAME,
COMPONENT_TABLE_NAME,
NODE_LEVEL_TABLE_NAME,
TOPOLOGY,
USER_DEFINED_DATA,
EXTERNAL_REFERENCES,
CHILD_NETWORK,
HIERARCHY_TABLE_NAME
FROM MDSYS.SDO_NETWORK_METADATA_TABLE;
-- grant priviledges to the views
GRANT SELECT, INSERT, DELETE, UPDATE ON MDSYS.USER_SDO_NETWORK_METADATA TO PUBLIC;
GRANT READ ON MDSYS.ALL_SDO_NETWORK_METADATA To PUBLIC;
-- drop public synonyms for the views
-- DROP PUBLIC SYNONYM USER_SDO_NETWORK_METADATA;
-- DROP PUBLIC SYNONYM ALL_SDO_NETWORK_METADATA;
-- create public synynoms
CREATE OR REPLACE PUBLIC SYNONYM USER_SDO_NETWORK_METADATA FOR
MDSYS.USER_SDO_NETWORK_METADATA;
CREATE OR REPLACE PUBLIC SYNONYM ALL_SDO_NETWORK_METADATA FOR
MDSYS.ALL_SDO_NETWORK_METADATA;
COMMIT;
--DROP TRIGGER SDO_NETWORK_DROP_USER;
-- trigger for droping user
CREATE OR REPLACE TRIGGER SDO_NETWORK_DROP_USER
AFTER DROP ON DATABASE
DECLARE
stmt VARCHAR2(256);
BEGIN
IF sys.dbms_standard.dictionary_obj_type = 'USER' THEN
stmt := 'DELETE FROM SDO_NETWORK_METADATA_TABLE WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NETWORK_CONSTRAINTS WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NETWORK_LOCKS_WM WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NETWORK_USER_DATA WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
--lrg-3417773
stmt := 'DELETE FROM SDO_NETWORK_HISTORIES WHERE OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NETWORK_TIMESTAMPS WHERE OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NETWORK_FEATURE WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt using sys.dbms_standard.dictionary_obj_name;
-- nfe
stmt := 'DELETE FROM SDO_NFE_MODEL_METADATA_TABLE WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt USING sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NFE_MODEL_FTLAYER_REL WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt USING sys.dbms_standard.dictionary_obj_name;
stmt := 'DELETE FROM SDO_NFE_MODEL_WORKSPACE WHERE SDO_OWNER = sdo_util.get_quoted_name(:name)';
EXECUTE IMMEDIATE stmt USING sys.dbms_standard.dictionary_obj_name;
END IF;
END ;
/
SHOW ERRORS;
-- trigger for inserting, deleting, and updating graph metadata views
CREATE OR REPLACE TRIGGER SDO_NETWORK_TRIG_INS
INSTEAD OF INSERT ON MDSYS.USER_SDO_NETWORK_METADATA
REFERENCING NEW AS n
FOR EACH ROW
declare
user_name varchar2(130);
net_id number;
no_of_partitions number := 0;
no_of_hierarchy_levels number := 1;
direction VARCHAR2(12);
BEGIN
user_name := sys_context('userenv', 'session_user');
-- find out the network ID from network ID sequence
EXECUTE IMMEDIATE 'SELECT sdo_ndm_network_id_seq.nextval FROM SYS.DUAL' INTO net_id;
-- insert network metadata and network ID into SDO_NETWORK_METADATA_TABLE
IF ( :n.no_of_partitions is NOT null ) THEN
no_of_partitions := :n.no_of_partitions;
END IF;
IF ( :n.no_of_hierarchy_levels is NOT null ) THEN
no_of_hierarchy_levels := :n.no_of_hierarchy_levels;
END IF;
-- change bidirected to undirected
direction := :n.link_direction ;
IF ( NLS_UPPER(direction) = 'BIDIRECTED' ) THEN
direction := 'UNDIRECTED';
END IF ;
insert into SDO_NETWORK_METADATA_TABLE
(
SDO_OWNER,
NETWORK,
NETWORK_ID,
NETWORK_CATEGORY,
GEOMETRY_TYPE,
NETWORK_TYPE,
NO_OF_HIERARCHY_LEVELS,
NO_OF_PARTITIONS,
LRS_TABLE_NAME,
LRS_GEOM_COLUMN,
NODE_TABLE_NAME,
NODE_GEOM_COLUMN,
NODE_COST_COLUMN,
NODE_PARTITION_COLUMN,
NODE_DURATION_COLUMN,
LINK_TABLE_NAME,
LINK_GEOM_COLUMN,
LINK_DIRECTION,
LINK_COST_COLUMN,
LINK_PARTITION_COLUMN,
LINK_DURATION_COLUMN,
PATH_TABLE_NAME,
PATH_GEOM_COLUMN,
PATH_LINK_TABLE_NAME,
SUBPATH_TABLE_NAME,
SUBPATH_GEOM_COLUMN,
PARTITION_TABLE_NAME,
PARTITION_BLOB_TABLE_NAME,
COMPONENT_TABLE_NAME,
NODE_LEVEL_TABLE_NAME,
TOPOLOGY,
USER_DEFINED_DATA,
EXTERNAL_REFERENCES,
CHILD_NETWORK,
HIERARCHY_TABLE_NAME
)
values
(
sdo_util.get_quoted_name(user_name),
NLS_UPPER(:n.network),
net_id,
NLS_UPPER(:n.network_category),
NLS_UPPER(:n.geometry_type),
NLS_UPPER(:n.network_type),
no_of_hierarchy_levels,
no_of_partitions,
NLS_UPPER(:n.lrs_table_name),
NLS_UPPER(:n.lrs_geom_column),
NLS_UPPER(:n.node_table_name),
NLS_UPPER(:n.node_geom_column),
NLS_UPPER(:n.node_cost_column),
NLS_UPPER(:n.node_partition_column),
NLS_UPPER(:n.node_duration_column),
NLS_UPPER(:n.link_table_name),
NLS_UPPER(:n.link_geom_column),
NLS_UPPER(direction),
NLS_UPPER(:n.link_cost_column),
NLS_UPPER(:n.link_partition_column),
NLS_UPPER(:n.link_duration_column),
NLS_UPPER(:n.path_table_name),
NLS_UPPER(:n.path_geom_column),
NLS_UPPER(:n.path_link_table_name),
NLS_UPPER(:n.subpath_table_name),
NLS_UPPER(:n.subpath_geom_column),
NLS_UPPER(:n.partition_table_name),
NLS_UPPER(:n.partition_blob_table_name),
NLS_UPPER(:n.component_table_name),
NLS_UPPER(:n.node_level_table_name),
NLS_UPPER(:n.topology),
NLS_UPPER(:n.user_defined_data),
NLS_UPPER(:n.external_references),
NLS_UPPER(:n.child_network),
NLS_UPPER(:n.hierarchy_table_name)
);
-- register NDM feature usage when inserting a NDM network metadata in 12c and beyond
IF ( to_number(substr(sdo_version,1, instr(sdo_version,'.')-1)) >= 12 ) then
execute immediate 'BEGIN mdsys.mdprvt_feature.sdo_register_feature(''NDM'',''YES''); END;';
END IF;
END;
/
SHOW ERRORS;
CREATE OR REPLACE TRIGGER SDO_NETWORK_TRIG_DEL
INSTEAD OF DELETE ON mdsys.user_sdo_network_metadata
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE FROM SDO_NETWORK_METADATA_TABLE WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND NLS_UPPER(network) = NLS_UPPER(:o.network);
END;
/
SHOW ERRORS;
CREATE OR REPLACE TRIGGER SDO_NETWORK_TRIG_UPD
INSTEAD OF UPDATE ON mdsys.user_sdo_network_metadata
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
direction VARCHAR2(12);
BEGIN
user_name := sys_context('userenv', 'session_user');
direction := :n.link_direction ;
IF ( nls_upper(direction) = 'BIDIRECTED' ) THEN
direction := 'UNDIRECTED';
END IF;
UPDATE sdo_network_metadata_table
SET (NETWORK,
NETWORK_CATEGORY,
GEOMETRY_TYPE,
NETWORK_TYPE,
NO_OF_HIERARCHY_LEVELS,
NO_OF_PARTITIONS,
LRS_TABLE_NAME,
LRS_GEOM_COLUMN,
NODE_TABLE_NAME,
NODE_GEOM_COLUMN,
NODE_COST_COLUMN,
NODE_PARTITION_COLUMN,
NODE_DURATION_COLUMN,
LINK_TABLE_NAME,
LINK_GEOM_COLUMN,
LINK_DIRECTION,
LINK_COST_COLUMN,
LINK_PARTITION_COLUMN,
LINK_DURATION_COLUMN,
PATH_TABLE_NAME,
PATH_GEOM_COLUMN,
PATH_LINK_TABLE_NAME,
SUBPATH_TABLE_NAME,
SUBPATH_GEOM_COLUMN,
PARTITION_TABLE_NAME,
PARTITION_BLOB_TABLE_NAME,
COMPONENT_TABLE_NAME,
NODE_LEVEL_TABLE_NAME,
TOPOLOGY,
USER_DEFINED_DATA,
EXTERNAL_REFERENCES,
CHILD_NETWORK,
HIERARCHY_TABLE_NAME
) =
( SELECT
NLS_UPPER(:n.network),
NLS_UPPER(:n.network_category),
NLS_UPPER(:n.geometry_type),
NLS_UPPER(:n.network_type),
:n.no_of_hierarchy_levels,
:n.no_of_partitions,
NLS_UPPER(:n.lrs_table_name),
NLS_UPPER(:n.lrs_geom_column),
NLS_UPPER(:n.node_table_name),
NLS_UPPER(:n.node_geom_column),
NLS_UPPER(:n.node_cost_column),
NLS_UPPER(:n.node_partition_column),
NLS_UPPER(:n.node_duration_column),
NLS_UPPER(:n.link_table_name),
NLS_UPPER(:n.link_geom_column),
NLS_UPPER(direction),
NLS_UPPER(:n.link_cost_column),
NLS_UPPER(:n.link_partition_column),
NLS_UPPER(:n.link_duration_column),
NLS_UPPER(:n.path_table_name),
NLS_UPPER(:n.path_geom_column),
NLS_UPPER(:n.path_link_table_name),
NLS_UPPER(:n.subpath_table_name),
NLS_UPPER(:n.subpath_geom_column),
NLS_UPPER(:n.partition_table_name),
NLS_UPPER(:n.partition_blob_table_name),
NLS_UPPER(:n.component_table_name),
NLS_UPPER(:n.node_level_table_name),
NLS_UPPER(:n.topology),
NLS_UPPER(:n.user_defined_data),
NLS_UPPER(:n.external_references),
NLS_UPPER(:n.child_network),
NLS_UPPER(:n.hierarchy_table_name)
FROM SYS.DUAL )
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND NLS_UPPER(NETWORK) = NLS_UPPER(:o.network);
END;
/
SHOW ERRORS;
-------------------------------------------------------------------------------
-- SDO_NETWORK_CONSTRAINTS
-------------------------------------------------------------------------------
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_CONSTRAINTS(
sdo_owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
constraint VARCHAR2(32) NOT NULL,
description VARCHAR2(200),
class_name VARCHAR2(32),
class BLOB,
CONSTRAINT unique_user_constraint UNIQUE(SDO_OWNER, CONSTRAINT))
';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')11]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_CONSTRAINTS
modify ( sdo_owner VARCHAR2(130),
constraint VARCHAR2(130),
class_name VARCHAR2(130) ) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_CONSTRAINTS ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- change type of class_name to be complaint with column NAME of all_java_classes
DECLARE
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE SDO_NETWORK_CONSTRAINTS MODIFY (class_name VARCHAR2(4000))';
EXCEPTION
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')12]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- add java_interface for storing all network java classes including
-- network constraints
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE SDO_NETWORK_CONSTRAINTS ADD (java_interface VARCHAR2(4000))';
EXCEPTION
WHEN column_exists THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')13]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- add unique constraint
DECLARE
already_exists exception;
pragma exception_init(already_exists, -2261);
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE SDO_NETWORK_CONSTRAINTS ADD (CONSTRAINT ' ||
'unique_class_constraint UNIQUE(SDO_OWNER, CLASS_NAME))';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')14]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- create indices on base table to boost the performance of metadata lookup
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_cons_owner';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')15]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_cons_cons';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')16]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_cons_class';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')17]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_cons_owner ON sdo_network_constraints(sdo_owner)';
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_cons_cons ON sdo_network_constraints(constraint)';
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_cons_class ON sdo_network_constraints(class_name)';
EXCEPTION WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')18]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_constraints';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')19]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_constraints';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')20]: ' || SQLERRM); RAISE;
end;
END;
/
SHOW ERRORS;
-- view creations
CREATE OR REPLACE VIEW mdsys.user_sdo_network_constraints AS
SELECT constraint, description, class_name, class
FROM mdsys.sdo_network_constraints
WHERE sdo_owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_network_constraints AS
SELECT sdo_owner owner, constraint, description, class_name
FROM mdsys.sdo_network_constraints;
-- change definition of all_sdo_network_constraints
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE VIEW mdsys.all_sdo_network_constraints AS ' ||
' SELECT sdo_owner owner, constraint, description, class_name, class ' ||
' FROM sdo_network_constraints '; --||
-- ' WHERE EXISTS ' ||
-- ' (SELECT NULL' ||
-- ' FROM all_java_classes ' ||
-- ' WHERE owner = sdo_owner ' ||
-- ' AND name = class_name )';
-- EXCEPTION WHEN OTHERS THEN RAISE;
END;
/
SHOW ERRORS;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_constraints TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_constraints To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_constraints FOR
mdsys.user_sdo_network_constraints;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_constraints FOR
mdsys.all_sdo_network_constraints;
-- trigger for insertion on user_sdo_network_constraints
-- note: dba_java_classes instead of all_java_classes is
-- needed here because the invoker might not grant
-- necessary privileges on his/her Java Class objects
-- to mdsys.
CREATE OR REPLACE TRIGGER sdo_network_cons_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_constraints
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
err_msg VARCHAR2(200);
num NUMBER := -1;
stmt VARCHAR2(200);
BEGIN
--stmt := 'select count(*) from sys.dba_java_classes where owner = :owner '||
-- ' and name = :name';
--execute immediate stmt into num using user, :n.class_name;
--if (num<>1) then
-- err_msg := 'Could not find Java class schema object: ' || :n.class_name ||
-- '. Did not load Java class properly.';
-- mdsys.mderr.raise_md_error('MD', 'SDO','13385', err_msg);
--else
stmt := 'insert into sdo_network_constraints(sdo_owner, constraint, ' ||
'description, class_name, class) values (:owner, :constraint, '||
':description, :class_name, :class)';
execute immediate stmt using sdo_util.get_quoted_name(user),:n.constraint,
:n.description, :n.class_name,:n.class;
--end if;
--EXCEPTION
--when others then raise;
END sdo_network_cons_ins_trig;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_constraints
CREATE OR REPLACE TRIGGER mdsys.sdo_network_cons_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_constraints
FOR EACH ROW
DECLARE
err_msg VARCHAR2(200);
num NUMBER := -1;
stmt VARCHAR2(200);
BEGIN
stmt := 'select count(*) from sys.dba_java_classes where owner = :owner '||
' and name = :name';
execute immediate stmt into num using user, :old.class_name;
if (num=1) then
err_msg := 'Java class schema object: '||:old.class_name||' exists. Please '||
'drop it first.';
mdsys.mderr.raise_md_error('MD', 'SDO', '13385', err_msg);
else
stmt := 'delete from sdo_network_constraints where sdo_owner = :owner '||
' and class_name = :name';
execute immediate stmt using user, :old.class_name;
end if;
EXCEPTION
when others then raise;
END sdo_network_cons_del_trig;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_constraints
CREATE OR REPLACE TRIGGER mdsys.sdo_network_cons_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_constraints
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE sdo_network_constraints
SET
(constraint,
description,
class_name,
class)
=
(SELECT
:n.constraint,
:n.description,
:n.class_name,
:n.class
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND constraint = :o.constraint;
END;
/
SHOW ERRORS;
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_java_objects';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')21]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_java_objects';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')22]: ' || SQLERRM); RAISE;
end;
END;
/
SHOW ERRORS;
-- view creations
CREATE OR REPLACE VIEW mdsys.user_sdo_network_java_objects AS
SELECT constraint name, description, class_name, class,java_interface
FROM mdsys.sdo_network_constraints
WHERE sdo_owner = sys_context('USERENV', 'CURRENT_USER');
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE VIEW mdsys.all_sdo_network_java_objects AS ' ||
' SELECT sdo_owner owner, constraint name, description, class_name, class,java_interface ' ||
' FROM sdo_network_constraints '; --||
-- ' WHERE EXISTS ' ||
-- ' (SELECT NULL' ||
-- ' FROM all_java_classes ' ||
-- ' WHERE owner = sdo_owner ' ||
-- ' AND name = class_name )';
-- EXCEPTION WHEN OTHERS THEN RAISE;
END;
/
SHOW ERRORS;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_java_objects TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_java_objects To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_java_objects FOR
mdsys.user_sdo_network_java_objects;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_java_objects FOR
mdsys.all_sdo_network_java_objects;
-- trigger for insertion on user_sdo_network_java_objects
CREATE OR REPLACE TRIGGER sdo_network_java_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_java_objects
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(130);
dir_name VARCHAR2(400);
file_name VARCHAR2(130);
class_file_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
INSERT INTO
sdo_network_constraints
(sdo_owner,
constraint,
description,
class_name,
class,
java_interface)
VALUES
(
sdo_util.get_quoted_name(user_name),
:n.name,
:n.description,
:n.class_name,
:n.class,
:n.java_interface
);
END;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_java_objects
CREATE OR REPLACE TRIGGER mdsys.sdo_network_java_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_java_objects
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE
FROM sdo_network_constraints
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND constraint = :o.name;
END;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_java_objects
CREATE OR REPLACE TRIGGER sdo_network_java_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_java_objects
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE sdo_network_constraints
SET
(constraint,
description,
class_name,
class,
java_interface)
=
(SELECT
:n.name,
:n.description,
:n.class_name,
:n.class,
:n.java_interface
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND constraint = :o.name;
END;
/
SHOW ERRORS;
-------------------------------------------------------------------------------
-- SDO_NETWORK_LOCKS_WM
-------------------------------------------------------------------------------
-- base table creation
-- NOTE: DO NOT change this table definition - for backward compatibility,
-- ALL future table modifications MUST be done using ALTER TABLE operations.
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_LOCKS_WM(
sdo_owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
lock_id NUMBER NOT NULL,
network VARCHAR2(24),
workspace VARCHAR2(32),
original_node_filter VARCHAR2(200),
original_link_filter VARCHAR2(200),
original_path_filter VARCHAR2(200),
adjusted_node_filter VARCHAR2(200),
adjusted_link_filter VARCHAR2(200),
adjusted_path_filter VARCHAR2(200),
CONSTRAINT unique_ndm_locks UNIQUE(SDO_OWNER, lock_id))
';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')23]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_LOCKS_WM
modify ( sdo_owner VARCHAR2(130),
workspace VARCHAR2(130) ) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_LOCKS_WM ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_locks_wm';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')24]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_locks_wm';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')25]: ' || SQLERRM); RAISE;
end;
END;
/
SHOW ERRORS;
-- view creations
CREATE OR REPLACE VIEW mdsys.user_sdo_network_locks_wm AS
SELECT lock_id, network, workspace, original_node_filter, original_link_filter, original_path_filter, adjusted_node_filter, adjusted_link_filter, adjusted_path_filter
FROM sdo_network_locks_wm
WHERE sdo_owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_network_locks_wm AS
SELECT sdo_owner owner, lock_id, network, workspace, original_node_filter, original_link_filter, original_path_filter, adjusted_node_filter, adjusted_link_filter, adjusted_path_filter
FROM sdo_network_locks_wm;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_locks_wm TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_locks_wm To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_locks_wm FOR
mdsys.user_sdo_network_locks_wm;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_locks_wm FOR
mdsys.all_sdo_network_locks_wm;
-- trigger for insertion on user_sdo_network_locks_wm
CREATE OR REPLACE TRIGGER mdsys.sdo_network_locks_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_locks_wm
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
INSERT INTO
sdo_network_locks_wm(sdo_owner, lock_id, network, workspace,
original_node_filter, original_link_filter, original_path_filter,
adjusted_node_filter, adjusted_link_filter, adjusted_path_filter)
VALUES (sdo_util.get_quoted_name(user_name), :n.lock_id, :n.network, :n.workspace,
:n.original_node_filter,:n.original_link_filter,:n.original_path_filter,
:n.adjusted_node_filter,:n.adjusted_link_filter,:n.adjusted_path_filter);
END;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_locks_wm
CREATE OR REPLACE TRIGGER mdsys.sdo_network_locks_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_locks_wm
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE
FROM sdo_network_locks_wm
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND lock_id = :o.lock_id;
END;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_locks_wm
CREATE OR REPLACE TRIGGER mdsys.sdo_network_locks_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_locks_wm
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE sdo_network_locks_wm
SET (lock_id, network, workspace,
original_node_filter, original_link_filter, original_path_filter,
adjusted_node_filter, adjusted_link_filter, adjusted_path_filter)
= (SELECT :n.lock_id, :n.network, :n.workspace,
:n.original_node_filter, :n.original_link_filter,
:n.original_path_filter,
:n.adjusted_node_filter, :n.adjusted_link_filter,
:n.adjusted_path_filter
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND lock_id = :o.lock_id;
END;
/
SHOW ERRORS;
-----------------------------
-- Network User Data Metadata
-----------------------------
--
-- this metadata provides user defined data mapping for NDM
-- use users register their user defined data, NDM Java API will manage
-- user data as well as connectivity data
--
-- schema definition
-- owner: owner of the user data
-- network: target network
-- table_type: user can defined their own user data on node,link, and path table
-- data_name: name of the user data. It is a column in the corresponding table
-- dat_type : data type of the user data. Only the following data types are supported:
-- 'NUMBER' : -> Java Double
-- 'INTEGER': -> Java Integer
-- 'VARCHAR2': -> Java String
-- 'SDO_GEOMETRY'-> Java JGeometry
-- 'DATE': -> Java Date
-- 'TIMESTAMP' -> Java Timestamp
-- data_length: the length of user data. for varchar2
-- create metadata base table
-- 102 version
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_USER_DATA(
sdo_owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
network VARCHAR2(32) NOT NULL,
table_type VARCHAR2(12) NOT NULL
CHECK (NLS_UPPER(table_type) IN (''NODE'',''LINK'',''PATH'')),
data_name VARCHAR2(32) NOT NULL,
data_type VARCHAR2(12) NOT NULL
CHECK (NLS_UPPER(data_type) IN (''NUMBER'',''INTEGER'',''VARCHAR2'')),
data_length INTEGER,
CONSTRAINT unique_ndm_user_data UNIQUE(SDO_OWNER,NETWORK,TABLE_TYPE,DATA_NAME))';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')26]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_USER_DATA
modify ( sdo_owner VARCHAR2(130),
network VARCHAR2(130),
data_name VARCHAR2(130)) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_USER_DATA ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
--
-- add category id
--
declare
stmt varchar2(4000);
already_exists exception;
pragma exception_init(already_exists, -00955);
column_exists exception;
pragma exception_init(column_exists, -01430);
begin
begin
stmt := 'ALTER TABLE SDO_NETWORK_USER_DATA ADD ' ||
'( CATEGORY_ID INTEGER )';
execute immediate stmt;
exception
when column_exists then NULL;
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')27]: ' || SQLERRM); RAISE;
end;
end;
/
--
-- drop 102 constraints on sdo_network_user_data
--
DECLARE
TYPE CURSOR_TYPE IS REF CURSOR;
c CURSOR_TYPE;
stmt VARCHAR2 (256);
cname VARCHAR2(128);
BEGIN
OPEN c for SELECT constraint_name from sys.all_constraints where table_name = 'SDO_NETWORK_USER_DATA' and owner = 'MDSYS';
LOOP
FETCH c into cname;
EXIT WHEN c%NOTFOUND;
execute immediate 'alter table sdo_network_user_data drop constraint ' || cname ;
END LOOP;
CLOSE C;
EXCEPTION WHEN others THEN
if c%ISOPEN then
close c;
end if;
END ;
/
SHOW ERRORS;
--
-- add supported table types and data types in 11g
--
declare
begin
execute immediate ' alter table sdo_network_user_data add constraint ud_tab_type_con ' ||
' check ( NLS_UPPER(table_type) IN (''NODE'',''LINK'',''PATH'',''SUBPATH''))';
execute immediate ' alter table sdo_network_user_data add constraint ud_data_type_con ' ||
' check ( NLS_UPPER(data_type) IN (''VARCHAR2'',''INTEGER'',''NUMBER'',''SDO_GEOMETRY'',''DATE'',''TIMESTAMP'',''OBJECT''))';
execute immediate ' alter table sdo_network_user_data add constraint unique_ndm_user_data ' ||
' UNIQUE(SDO_OWNER,NETWORK,TABLE_TYPE,DATA_NAME)';
execute immediate ' alter table sdo_network_user_data modify sdo_owner not null' ;
execute immediate ' alter table sdo_network_user_data modify network not null' ;
execute immediate ' alter table sdo_network_user_data modify table_type not null' ;
execute immediate ' alter table sdo_network_user_data modify data_name not null' ;
execute immediate ' alter table sdo_network_user_data modify data_type not null' ;
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')28]: ' || SQLERRM); RAISE;
end;
/
show errors;
begin
execute immediate ' alter table sdo_network_user_data drop constraint ud_tab_type_con';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')29]: ' || SQLERRM); RAISE;
end;
/
show errors;
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_user_data';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')30]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_user_data';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')31]: ' || SQLERRM); RAISE;
end;
END;
/
SHOW ERRORS;
-- create views
CREATE OR REPLACE VIEW mdsys.user_sdo_network_user_data AS
SELECT network, table_type, data_name, data_type,data_length, category_id
FROM mdsys.sdo_network_user_data
WHERE sdo_owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_network_user_data AS
SELECT sdo_owner owner, network, table_type, data_name, data_type,data_length, category_id
FROM mdsys.sdo_network_user_data;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_user_data TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_user_data To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_user_data FOR
mdsys.user_sdo_network_user_data;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_user_data FOR
mdsys.all_sdo_network_user_data;
-- create triggers for insert/del/update
-- trigger for insertion on user_sdo_network_user_data
CREATE OR REPLACE TRIGGER mdsys.sdo_network_ud_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_user_data
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(130);
no number ;
table_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
-- check if network already exists in the networkwork metadata
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM sdo_network_metadata_table ' ||
' where sdo_owner = :owner AND NLS_UPPER(network) = :net ' into no using sdo_util.get_quoted_name(user_name), NLS_UPPER(:n.network);
IF ( no = 0 ) THEN
mderr.raise_md_error('MD', 'SDO', -13385, user_name||'.'||:n.network || ' NOT IN NETWORK METADATA!');
END IF;
INSERT INTO
sdo_network_user_data
(
sdo_owner,
network,
table_type,
data_name,
data_type,
data_length,
category_id
)
VALUES
(
sdo_util.get_quoted_name(user_name),
NLS_UPPER(:n.network),
NLS_UPPER(:n.table_type),
NLS_UPPER(:n.data_name),
NLS_UPPER(:n.data_type),
:n.data_length,
:n.category_id
);
END;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_user_data
CREATE OR REPLACE TRIGGER mdsys.sdo_network_ud_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_user_data
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE
FROM sdo_network_user_data
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND network = NLS_UPPER(:o.network)
AND table_type = NLS_UPPER(:o.table_type)
AND data_name = NLS_UPPER(:o.data_name);
END;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_user_data
CREATE OR REPLACE TRIGGER mdsys.sdo_network_ud_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_user_data
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
no number ;
table_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
-- check if network already exists in the networkwork metadata
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM sdo_network_metadata_table ' ||
' where sdo_owner = :owner AND NLS_UPPER(network) = :net ' into no using sdo_util.get_quoted_name(user_name), NLS_UPPER(:n.network);
IF ( no = 0 ) THEN
mderr.raise_md_error('MD', 'SDO', -13385,
user_name||'.'||:n.network || ' NOT IN NETWORK METADATA!');
END IF;
UPDATE sdo_network_user_data
SET
(
network,
table_type,
data_name,
data_type,
data_length,
category_id)
=
(SELECT
NLS_UPPER(:n.network),
NLS_UPPER(:n.table_type),
NLS_UPPER(:n.data_name),
NLS_UPPER(:n.data_type),
:n.data_length,
:n.category_id
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND NLS_UPPER(network) = NLS_UPPER(:o.network)
AND NLS_UPPER(table_type) = NLS_UPPER(:o.table_type)
AND NLS_UPPER(data_name) = NLS_UPPER(:o.data_name);
END;
/
SHOW ERRORS;
-- Type for name value pairs
--BEGIN
-- EXECUTE IMMEDIATE
-- 'CREATE OR REPLACE TYPE SDO_NETWORK_NVP
-- AS OBJECT (NAME VARCHAR2(128), VALUE VARCHAR2(1024))';
--EXCEPTION WHEN OTHERS THEN NULL;
--END;
--/
--SHOW ERRORS;
--BEGIN
-- EXECUTE IMMEDIATE
-- 'CREATE OR REPLACE TYPE SDO_NETWORK_NVP_TAB
-- IS TABLE OF SDO_NETWORK_NVP';
--EXCEPTION WHEN OTHERS THEN NULL;
--END;
--/
--SHOW ERRORS;
--GRANT EXECUTE ON SDO_NETWORK_NVP TO PUBLIC;
--GRANT EXECUTE ON SDO_NETWORK_NVP_TAB TO PUBLIC;
--CREATE OR REPLACE PUBLIC SYNONYM SDO_NETWORK_NVP FOR MDSYS.SDO_NETWORK_NVP;
--CREATE OR REPLACE PUBLIC SYNONYM SDO_NETWORK_NVP_TAB FOR MDSYS.SDO_NETWORK_NVP_TAB;
-------------------------------------------------------------------------------
-- SDO_NETWORK_HISTORIES & RELATED VIEWS AND TRIGGERS
-------------------------------------------------------------------------------
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_HISTORIES(
owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
network VARCHAR2(24) NOT NULL,
node_history_table VARCHAR2(32),
link_history_table VARCHAR2(32),
node_trigger VARCHAR2(32),
link_trigger VARCHAR2(32),
CONSTRAINT network_histroy_constraint UNIQUE(owner, network))
';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')32]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_HISTORIES
modify ( owner VARCHAR2(130),
node_history_table VARCHAR2(130),
link_history_table VARCHAR2(130),
node_trigger VARCHAR2(130),
link_trigger VARCHAR2(130) ) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_HISTORIES ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- create indices on base table to boost the performance of metadata lookup
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_his_owner';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')33]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_his_net';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')34]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_his_owner ON sdo_network_histories(owner)';
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_his_net ON sdo_network_histories(network)';
EXCEPTION WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')35]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_histories';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')36]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_histories';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')37]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- view creations
CREATE OR REPLACE VIEW mdsys.user_sdo_network_histories AS
SELECT network, node_history_table, link_history_table, node_trigger, link_trigger
FROM mdsys.sdo_network_histories
WHERE owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_network_histories AS
SELECT *
FROM sdo_network_histories;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_histories TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_histories To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_histories FOR
mdsys.user_sdo_network_histories;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_histories FOR
mdsys.all_sdo_network_histories;
-- trigger for insertion on user_sdo_network_histories
CREATE OR REPLACE TRIGGER mdsys.sdo_network_his_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_histories
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
INSERT INTO mdsys.sdo_network_histories(
owner, network, node_history_table, link_history_table, node_trigger,
link_trigger)
VALUES(
sdo_util.get_quoted_name(user_name),:n.network,:n.node_history_table,
:n.link_history_table,:n.node_trigger,:n.link_trigger);
EXCEPTION
WHEN OTHERS THEN RAISE;
END;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_histories
CREATE OR REPLACE TRIGGER mdsys.sdo_network_his_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_histories
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE mdsys.sdo_network_histories
SET(network,node_history_table,link_history_table,node_trigger,link_trigger)
=
(SELECT
:n.network,:n.node_history_table,:n.link_history_table,:n.node_trigger,
:n.link_trigger
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(owner) = sdo_util.get_quoted_name(user_name)
AND network = :o.network;
END;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_histories
CREATE OR REPLACE TRIGGER mdsys.sdo_network_his_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_histories
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE
FROM mdsys.sdo_network_histories
WHERE sdo_util.get_quoted_name(OWNER) = sdo_util.get_quoted_name(user_name)
AND network = :o.network;
END;
/
SHOW ERRORS;
-------------------------------------------------------------------------------
-- SDO_NETWORK_TIMESTAMPS & RELATED VIEWS AND TRIGGERS
-------------------------------------------------------------------------------
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_TIMESTAMPS(
owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
network VARCHAR2(24) NOT NULL,
table_name VARCHAR2(32) NOT NULL,
last_dml_time TIMESTAMP NOT NULL,
CONSTRAINT network_timestamp_constraint UNIQUE(owner, network, table_name))
';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')38]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase NETWORK column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_TIMESTAMPS
modify ( owner VARCHAR2(130),
table_name VARCHAR2(130)) ' ;
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_TIMESTAMPS ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- create indices on base table to boost the performance of metadata lookup
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_time_owner';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')39]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_time_net';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')40]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
index_not_found exception;
pragma exception_init(index_not_found, -01418);
BEGIN
EXECUTE IMMEDIATE 'DROP INDEX sdo_net_time_tab';
EXCEPTION
WHEN index_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')41]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_time_owner ON sdo_network_timestamps(owner)';
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_time_net ON sdo_network_timestamps(network)';
EXECUTE IMMEDIATE
'CREATE INDEX sdo_net_time_tab ON sdo_network_timestamps(table_name)';
EXCEPTION
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')42]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- drop views to avoid view-trigger dependency
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW mdsys.user_sdo_network_timestamps';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')43]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW mdsys.all_sdo_network_timestamps';
EXCEPTION
WHEN view_not_found THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')44]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- view creations
CREATE OR REPLACE VIEW mdsys.user_sdo_network_timestamps AS
SELECT network, table_name, last_dml_time
FROM mdsys.sdo_network_timestamps
WHERE owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_network_timestamps AS
SELECT *
FROM mdsys.sdo_network_timestamps;
-- granting view priviledges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_network_timestamps TO PUBLIC;
GRANT READ ON mdsys.all_sdo_network_timestamps To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_network_timestamps FOR
mdsys.user_sdo_network_timestamps;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_network_timestamps FOR
mdsys.all_sdo_network_timestamps;
-- trigger for insertion on user_sdo_network_timestamps
CREATE OR REPLACE TRIGGER mdsys.sdo_network_time_ins_trig
INSTEAD OF INSERT ON mdsys.user_sdo_network_timestamps
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(130);
BEGIN
user_name := sys_context('userenv', 'session_user');
INSERT INTO sdo_network_timestamps(
owner, network, table_name, last_dml_time)
VALUES(sdo_util.get_quoted_name(user_name),:n.network,:n.table_name, :n.last_dml_time);
EXCEPTION
WHEN OTHERS THEN RAISE;
END;
/
SHOW ERRORS;
-- trigger for update on user_sdo_network_timestamps
CREATE OR REPLACE TRIGGER sdo_network_time_upd_trig
INSTEAD OF UPDATE ON mdsys.user_sdo_network_timestamps
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE sdo_network_timestamps
SET(network,table_name,last_dml_time)
=
(SELECT
:n.network,:n.table_name,:n.last_dml_time
FROM SYS.DUAL)
WHERE owner = sdo_util.get_quoted_name(user_name)
AND NLS_UPPER(network) = NLS_UPPER(:o.network)
AND NLS_UPPER(table_name) = NLS_UPPER(:o.table_name);
END;
/
SHOW ERRORS;
-- trigger for deletion on user_sdo_network_timestamps
CREATE OR REPLACE TRIGGER mdsys.sdo_network_time_del_trig
INSTEAD OF DELETE ON mdsys.user_sdo_network_timestamps
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE
FROM sdo_network_timestamps
WHERE owner = sdo_util.get_quoted_name(user_name)
AND network = :o.network
AND table_name = :o.table_name;
END;
/
SHOW ERRORS;
-- DBSYNC: create types for JDBC
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_UPD_HIST
AS OBJECT (id NUMBER,
link_level NUMBER,
partition_id NUMBER,
operation VARCHAR2(3))';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')45]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_UPD_HIST to public;
create or replace public synonym SDO_NET_UPD_HIST for mdsys.SDO_NET_UPD_HIST;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_UPD_HIST_TBL IS TABLE OF SDO_NET_UPD_HIST';
EXCEPTION WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')46]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_UPD_HIST_TBL to public;
create or replace public synonym SDO_NET_UPD_HIST_TBL
for mdsys.SDO_NET_UPD_HIST_TBL;
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_UPD_HIST_N
AS OBJECT (id NUMBER,
link_level NUMBER,
partition_id NUMBER,
assigned_partition_id NUMBER,
operation VARCHAR2(3))';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')47]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_UPD_HIST_N to public;
create or replace public synonym SDO_NET_UPD_HIST_N for mdsys.SDO_NET_UPD_HIST_N;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_UPD_HIST_NTBL IS TABLE OF SDO_NET_UPD_HIST_N';
EXCEPTION WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')48]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_UPD_HIST_NTBL to public;
create or replace public synonym SDO_NET_UPD_HIST_NTBL
for mdsys.SDO_NET_UPD_HIST_NTBL;
-- DBSYNC: create types for Internal Process
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_LINK
AS OBJECT (link_id NUMBER,
start_node_id NUMBER,
end_node_id NUMBER,
operation VARCHAR2(3))';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')49]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_LINK to public;
create or replace public synonym SDO_NET_LINK for mdsys.SDO_NET_LINK;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_LINK_NTBL IS TABLE OF SDO_NET_LINK';
EXCEPTION WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')50]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_LINK_NTBL to public;
create or replace public synonym SDO_NET_LINK_NTBL for mdsys.SDO_NET_LINK_NTBL;
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_OP
AS OBJECT (id NUMBER,
operation VARCHAR2(3))';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')51]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_OP to public;
create or replace public synonym SDO_NET_OP for mdsys.SDO_NET_OP;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_OP_NTBL IS TABLE OF SDO_NET_OP';
EXCEPTION WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')52]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_NET_OP_NTBL to public;
create or replace public synonym SDO_NET_OP_NTBL for mdsys.SDO_NET_OP_NTBL;
-----------------------------
-- BEGIN: Feature Modeling --
-----------------------------
-- feat_elem_type : POINT_ON_NODE, POINT_ON_LINK, LINE
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_FEAT_ELEM AS OBJECT
(
feat_elem_type NUMBER,
net_elem_id NUMBER,
start_percentage NUMBER,
end_percentage NUMBER
)';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')53]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_FEAT_ELEM_ARRAY AS VARRAY(1024) OF SDO_NET_FEAT_ELEM';
EXCEPTION WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')54]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- sdo_net_layer_feat
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_LAYER_FEAT AS OBJECT
(
feature_layer_id NUMBER,
feature_id NUMBER
)';
EXCEPTION
WHEN dependent_objects THEN NULL;
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')55]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
DECLARE
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE SDO_NET_LAYER_FEAT_ARRAY AS VARRAY(1024) OF SDO_NET_LAYER_FEAT';
EXCEPTION WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')56]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- Feature metadata
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE SDO_NETWORK_FEATURE (
SDO_OWNER VARCHAR2(32)
DEFAULT sys_context(''userenv'',''CURRENT_USER'') NOT NULL,
NETWORK VARCHAR2(24) NOT NULL,
FEATURE_LAYER_NAME VARCHAR2(20),
FEATURE_LAYER_ID NUMBER NOT NULL,
FEATURE_LAYER_TYPE NUMBER NOT NULL,
FEATURE_TABLE_NAME VARCHAR2(20),
RELATION_TABLE_NAME VARCHAR2(20),
HIERARCHY_TABLE_NAME VARCHAR2(20)
)';
EXCEPTION
WHEN already_exists THEN NULL;
WHEN OTHERS THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonetmd.sql(' || $$PLSQL_LINE || ')57]: ' || SQLERRM); RAISE;
END;
/
SHOW ERRORS;
-- 12.2: Increase column size from 32 to 130
begin
execute immediate
' alter table SDO_NETWORK_FEATURE
modify ( SDO_OWNER VARCHAR2(130),
FEATURE_TABLE_NAME VARCHAR2(130),
RELATION_TABLE_NAME VARCHAR2(130),
HIERARCHY_TABLE_NAME VARCHAR2(130) ) ';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_NETWORK_FEATURE ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
CREATE OR REPLACE VIEW MDSYS.ALL_SDO_NETWORK_FEATURE AS
SELECT
SDO_OWNER OWNER,
NETWORK,
FEATURE_LAYER_NAME,
FEATURE_LAYER_ID,
FEATURE_LAYER_TYPE,
FEATURE_TABLE_NAME,
RELATION_TABLE_NAME,
HIERARCHY_TABLE_NAME
FROM MDSYS.SDO_NETWORK_FEATURE;
CREATE OR REPLACE VIEW MDSYS.USER_SDO_NETWORK_FEATURE AS
SELECT
NETWORK,
FEATURE_LAYER_NAME,
FEATURE_LAYER_ID,
FEATURE_LAYER_TYPE,
FEATURE_TABLE_NAME,
RELATION_TABLE_NAME,
HIERARCHY_TABLE_NAME
FROM MDSYS.SDO_NETWORK_FEATURE
WHERE SDO_OWNER = sys_context('USERENV', 'CURRENT_USER');
-- granting priviledges
GRANT EXECUTE ON MDSYS.SDO_NET_FEAT_ELEM TO PUBLIC;
GRANT EXECUTE ON MDSYS.SDO_NET_FEAT_ELEM_ARRAY TO PUBLIC;
GRANT EXECUTE ON MDSYS.SDO_NET_LAYER_FEAT TO PUBLIC;
GRANT EXECUTE ON MDSYS.SDO_NET_LAYER_FEAT_ARRAY TO PUBLIC;
GRANT SELECT, INSERT, DELETE, UPDATE ON MDSYS.USER_SDO_NETWORK_FEATURE TO PUBLIC;
GRANT READ ON MDSYS.ALL_SDO_NETWORK_FEATURE To PUBLIC;
-- creating public synonyms
CREATE OR REPLACE PUBLIC SYNONYM SDO_NET_FEAT_ELEM FOR MDSYS.SDO_NET_FEAT_ELEM;
CREATE OR REPLACE PUBLIC SYNONYM SDO_NET_FEAT_ELEM_ARRAY FOR MDSYS.SDO_NET_FEAT_ELEM_ARRAY;
CREATE OR REPLACE PUBLIC SYNONYM SDO_NET_LAYER_FEAT FOR MDSYS.SDO_NET_LAYER_FEAT;
CREATE OR REPLACE PUBLIC SYNONYM SDO_NET_LAYER_FEAT_ARRAY FOR MDSYS.SDO_NET_LAYER_FEAT_ARRAY;
CREATE OR REPLACE PUBLIC SYNONYM USER_SDO_NETWORK_FEATURE FOR MDSYS.USER_SDO_NETWORK_FEATURE;
CREATE OR REPLACE PUBLIC SYNONYM ALL_SDO_NETWORK_FEATURE FOR MDSYS.ALL_SDO_NETWORK_FEATURE;
--------------------------
--END: Feature Modeling --
--------------------------
Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@?/rdbms/admin/sqlsessend.sql
Rem ********************************************************************
OHA YOOOO