MINI MINI MANI MO
Rem
Rem $Header: sdo/admin/sdonfemd.sql /main/11 2017/10/20 11:01:24 rjanders Exp $
Rem
Rem sdonfemd.sql
Rem
Rem Copyright (c) 2014, 2017, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem sdonfemd.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/sdonfemd.sql
Rem SQL_SHIPPED_FILE: md/admin/sdonfemd.sql
Rem SQL_PHASE: SDONFEMD
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 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 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 abmartin 02/25/16 - add select privilege to
Rem user_sdo_nfe_model_metadata view
Rem czechar 08/14/15 - add SQL file metadata
Rem sravada 07/24/15 - add exception handler
Rem jcwang 07/22/15 - use grant read on all_sdo_nfe_xx views
Rem abmartin 03/17/15 - Grant execute privilege to public for all types.
Rem abmartin 01/07/15 - Remove the types dropping and move the trigger for dropping user to
Rem the corresponding trigger for NDM Objects.
Rem abmartin 10/27/14 - Created
Rem
@@?/rdbms/admin/sqlsessstart.sql
-- sdonfemd.sql
-- NFE Model Metadata main table
-- id - Model identifier
-- name - Model name
-- edition_mode - Posible values: 1 - Features from scratch, 2 - Features over an existing network
-- versionable_ind - Versionable model flag. Posible values: Y, N
-- table_reg_tab - Table where the model's tables names are registered. Default name: TABLE_REGISTRY_[model_id]
-- sequence_reg_tab - Table where the model's tables sequences are registered. Default name: SEQUENCE_REGISTRY_[model_id]
-- network_name - Name of the network related to the model. Reference to XXX_SDO_NETWORK_METADATA table.
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE MDSYS.SDO_NFE_MODEL_METADATA_TABLE (
SDO_OWNER varchar2(32) DEFAULT sys_context(''userenv'',''CURRENT_USER'') NOT NULL,
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(24) NOT NULL,
EDITION_MODE NUMBER,
VERSIONABLE_IND CHAR(1),
TABLE_REG_TAB VARCHAR2(50),
SEQUENCE_REG_TAB VARCHAR2(50),
NETWORK_NAME VARCHAR2(50),
CONSTRAINT unique_model_name UNIQUE (SDO_OWNER, NAME) )
';
exception
WHEN already_exists THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
END;
/
-- drop all the NFE Models views
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'drop view mdsys.user_sdo_nfe_model_metadata';
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'drop view mdsys.all_sdo_nfe_model_metadata' ;
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); RAISE;
end;
END;
/
-- create model id sequence
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
BEGIN
EXECUTE IMMEDIATE 'CREATE SEQUENCE MDSYS.SDO_NFE_MODEL_ID_SEQ START WITH 1 INCREMENT BY 1 NOCACHE ';
exception
WHEN view_not_found THEN NULL;
WHEN already_exists THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM); RAISE;
END;
END;
/
-- create user_sdo_nfe_model_metadata
CREATE OR REPLACE VIEW MDSYS.USER_SDO_NFE_MODEL_METADATA AS
SELECT ID,
NAME,
EDITION_MODE,
VERSIONABLE_IND,
TABLE_REG_TAB,
SEQUENCE_REG_TAB,
NETWORK_NAME
FROM MDSYS.SDO_NFE_MODEL_METADATA_TABLE
WHERE SDO_OWNER = sys_context('userenv','CURRENT_USER');
CREATE OR REPLACE VIEW MDSYS.ALL_SDO_NFE_MODEL_METADATA AS
SELECT SDO_OWNER OWNER,
ID,
NAME,
EDITION_MODE,
VERSIONABLE_IND,
TABLE_REG_TAB,
SEQUENCE_REG_TAB,
NETWORK_NAME
FROM MDSYS.SDO_NFE_MODEL_METADATA_TABLE;
-- grant priviledges to the views
GRANT SELECT, INSERT, DELETE, UPDATE ON MDSYS.USER_SDO_NFE_MODEL_METADATA TO PUBLIC;
GRANT READ ON MDSYS.ALL_SDO_NFE_MODEL_METADATA TO PUBLIC;
-- create public synynoms
CREATE OR REPLACE PUBLIC SYNONYM USER_SDO_NFE_MODEL_METADATA FOR MDSYS.USER_SDO_NFE_MODEL_METADATA;
CREATE OR REPLACE PUBLIC SYNONYM ALL_SDO_NFE_MODEL_METADATA FOR MDSYS.ALL_SDO_NFE_MODEL_METADATA;
-- Triggers for inserting, deleting and updating model metadata views
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_MODEL_TRIG_INS
INSTEAD OF INSERT ON MDSYS.USER_SDO_NFE_MODEL_METADATA
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
model_id NUMBER;
edition_mode NUMBER := 1;
versionable VARCHAR2(1) := 'N';
tabs_tab_name VARCHAR2(32) := 'TABLE_REGISTRY_';
seqs_tab_name VARCHAR2(35) := 'SEQUENCE_REGISTRY_';
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
-- find out the model ID from model ID sequence
EXECUTE IMMEDIATE 'SELECT SDO_NFE_MODEL_ID_SEQ.nextval FROM SYS.DUAL' INTO model_id;
-- Allow just two types of edition mode (1-From Scratch, 2-From Existing Network)
IF ( edition_mode != :n.edition_mode ) THEN
edition_mode := 2;
END IF;
IF ( :n.versionable_ind IS NOT NULL AND :n.versionable_ind = 'Y' ) THEN
versionable := 'Y';
END IF;
IF ( :n.table_reg_tab IS NOT NULL ) THEN
tabs_tab_name := :n.table_reg_tab;
ELSE
tabs_tab_name := tabs_tab_name || model_id;
END IF;
IF ( :n.sequence_reg_tab IS NOT NULL ) THEN
seqs_tab_name := :n.sequence_reg_tab;
ELSE
seqs_tab_name := seqs_tab_name || model_id;
END IF;
-- insert model metadata and model id into SDO_NFE_MODEL_METADATA_TABLE
INSERT INTO MDSYS.SDO_NFE_MODEL_METADATA_TABLE
(
SDO_OWNER,
ID,
NAME,
EDITION_MODE,
VERSIONABLE_IND,
TABLE_REG_TAB,
SEQUENCE_REG_TAB,
NETWORK_NAME
)
values
(
user_name,
model_id,
NLS_UPPER(:n.name),
edition_mode,
versionable,
NLS_UPPER(tabs_tab_name),
NLS_UPPER(seqs_tab_name),
NLS_UPPER(:n.network_name)
);
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_MODEL_TRIG_DEL
INSTEAD OF DELETE ON MDSYS.USER_SDO_NFE_MODEL_METADATA
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
EXECUTE IMMEDIATE 'SELECT USER FROM SYS.DUAL' INTO user_name;
DELETE FROM MDSYS.SDO_NFE_MODEL_METADATA_TABLE WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name) AND id = :o.id;
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_MODEL_TRIG_UPD
INSTEAD OF UPDATE ON MDSYS.USER_SDO_NFE_MODEL_METADATA
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
edition_mode NUMBER := 1;
versionable VARCHAR2(1) := 'N';
BEGIN
EXECUTE IMMEDIATE 'SELECT USER FROM SYS.DUAL' INTO user_name;
IF ( edition_mode != :n.edition_mode ) THEN
edition_mode := 2;
END IF;
IF ( :n.versionable_ind IS NOT NULL AND :n.versionable_ind = 'Y' ) THEN
versionable := 'Y';
END IF;
UPDATE MDSYS.SDO_NFE_MODEL_METADATA_TABLE
SET ( NAME,
EDITION_MODE,
VERSIONABLE_IND,
TABLE_REG_TAB,
SEQUENCE_REG_TAB,
NETWORK_NAME )
=
( SELECT
NLS_UPPER(:n.name),
edition_mode,
versionable,
NLS_UPPER(:n.table_reg_tab),
NLS_UPPER(:n.sequence_reg_tab),
NLS_UPPER(:n.network_name)
FROM SYS.DUAL )
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND id = :o.id;
END;
/
show errors;
------------------------------------
-- SDO_NFE_MODEL_FTLAYER_REL
------------------------------------
-- model_id Model identifier.
-- feature_layer_id Feature layer identifier. Reference to XXX_SDO_NETWORK_FEATURE table.
-- hierarchy_level Hierarchical level for the feature layer. By default it will be 0.
-- z_order Order for the layer presentation. Lowest order is the first to be presented.
-- path_layer Path feature layer indicator. Posible values: 'Y' - Is a path feature layer, 'N' or NULL - is a common feature layer.
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE MDSYS.SDO_NFE_MODEL_FTLAYER_REL(
sdo_owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
model_id NUMBER NOT NULL REFERENCES MDSYS.SDO_NFE_MODEL_METADATA_TABLE(id),
feature_layer_id NUMBER NOT NULL,
hierarchy_level NUMBER NOT NULL,
z_order NUMBER,
path_layer VARCHAR2(1),
CONSTRAINT nfe_ftlayer_rel_key PRIMARY KEY (model_id, feature_layer_id) )
';
exception
when already_exists then NULL;
when others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')5]: ' || SQLERRM); RAISE;
END;
/
show errors;
-- drop views
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'drop view mdsys.user_sdo_nfe_model_ftlayer_rel';
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'drop view MDSYS.all_sdo_nfe_model_ftlayer_rel' ;
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')7]: ' || SQLERRM); RAISE;
end;
END;
/
show errors;
-- create views
CREATE OR REPLACE VIEW mdsys.user_sdo_nfe_model_ftlayer_rel AS
SELECT model_id, feature_layer_id, hierarchy_level, z_order, path_layer
FROM MDSYS.SDO_NFE_MODEL_FTLAYER_REL
WHERE sdo_owner = sys_context('USERENV', 'CURRENT_USER');
CREATE OR REPLACE VIEW mdsys.all_sdo_nfe_model_ftlayer_rel AS
SELECT sdo_owner owner, model_id, feature_layer_id, hierarchy_level, z_order, path_layer
FROM MDSYS.SDO_NFE_MODEL_FTLAYER_REL;
-- granting view privileges
GRANT SELECT, INSERT, DELETE, UPDATE ON mdsys.user_sdo_nfe_model_ftlayer_rel TO PUBLIC;
GRANT READ ON MDSYS.all_sdo_nfe_model_ftlayer_rel TO PUBLIC;
-- create public synynoms
CREATE OR REPLACE PUBLIC SYNONYM user_sdo_nfe_model_ftlayer_rel FOR MDSYS.user_sdo_nfe_model_ftlayer_rel;
CREATE OR REPLACE PUBLIC SYNONYM all_sdo_nfe_model_ftlayer_rel FOR MDSYS.all_sdo_nfe_model_ftlayer_rel;
-- Triggers for inserting, deleting and updating
CREATE OR REPLACE TRIGGER MDSYS.sdo_model_ftlayer_trig_ins
INSTEAD OF INSERT ON mdsys.user_sdo_nfe_model_ftlayer_rel
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
path_layer VARCHAR2(1) := 'Y';
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
IF ( :n.path_layer IS NULL OR :n.path_layer != 'Y' ) THEN
path_layer := 'N';
END IF;
INSERT INTO MDSYS.SDO_NFE_MODEL_FTLAYER_REL
(
SDO_OWNER,
MODEL_ID,
feature_layer_id,
hierarchy_level,
z_order,
path_layer
)
values
(
user_name,
:n.model_id,
:n.feature_layer_id,
:n.hierarchy_level,
:n.z_order,
path_layer
);
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.sdo_model_ftlayer_trig_del
INSTEAD OF DELETE on mdsys.user_sdo_nfe_model_ftlayer_rel
REFERENCING OLD AS o
DECLARE
user_name VARCHAR2(256);
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
DELETE FROM MDSYS.SDO_NFE_MODEL_FTLAYER_REL
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND model_id = :o.model_id AND feature_layer_id = :o.feature_layer_id;
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.sdo_model_ftlayer_trig_upd
INSTEAD OF UPDATE ON mdsys.user_sdo_nfe_model_ftlayer_rel
REFERENCING NEW AS n OLD AS o
DECLARE
user_name VARCHAR2(256);
path_layer VARCHAR2(1) := 'Y';
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
IF ( :n.path_layer IS NULL OR :n.path_layer != 'Y' ) THEN
path_layer := 'N';
END IF;
UPDATE MDSYS.SDO_NFE_MODEL_FTLAYER_REL
SET ( HIERARCHY_LEVEL,
Z_ORDER,
PATH_LAYER )
=
( SELECT
:n.hierarchy_level,
:n.z_order,
path_layer
FROM SYS.DUAL )
WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name)
AND model_id = :o.model_id AND feature_layer_id = :o.feature_layer_id;
END;
/
show errors;
------------------------------------
-- SDO_NFE_MODEL_WORKSPACE
------------------------------------
-- id Workspace identifier.
-- model_id Model identifier.
-- workspace Workspace name.
-- mbr_ind Indicates whether the workspace represents an MBR region or not. Posible values: Y, N
-- lower_X X for the lower coordinate of the MBR.
-- upper_X X for the upper coordinate of the MBR.
-- lower_Y Y for the lower coordinate of the MBR.
-- upper_Y Y for the upper coordinate of the MBR.
-- lock_ind Indicates whether the workspace is locked to be edited for others or not. Posible values: Y, N
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE MDSYS.SDO_NFE_MODEL_WORKSPACE (
sdo_owner VARCHAR2(32)
DEFAULT SYS_CONTEXT(''USERENV'', ''CURRENT_USER'') NOT NULL,
id NUMBER PRIMARY KEY,
model_id NUMBER NOT NULL,
workspace VARCHAR2(50),
mbr_ind CHAR(1),
lower_x NUMBER,
upper_x NUMBER,
lower_y NUMBER,
upper_y NUMBER,
lock_ind CHAR(1) )
';
exception
when already_exists then NULL;
when others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')8]: ' || SQLERRM); RAISE;
END;
/
show errors;
-- drop all the NFE Models views
DECLARE
view_not_found exception;
pragma exception_init(view_not_found, -00942);
BEGIN
begin
EXECUTE IMMEDIATE 'drop view mdsys.user_sdo_nfe_model_workspace';
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')9]: ' || SQLERRM); RAISE;
end;
begin
EXECUTE IMMEDIATE 'drop view mdsys.all_sdo_nfe_model_workspace' ;
exception
WHEN view_not_found THEN NULL;
WHEN others THEN
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')10]: ' || SQLERRM); RAISE;
end;
END;
/
show errors;
-- create workspace id sequence
DECLARE
already_exists exception;
pragma exception_init(already_exists, -00955);
BEGIN
BEGIN
EXECUTE IMMEDIATE 'CREATE SEQUENCE MDSYS.SDO_NFE_WORKSPACE_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[sdonfemd.sql(' || $$PLSQL_LINE || ')11]: ' || SQLERRM); RAISE;
END;
END;
/
show errors;
-- create view mdsys.user_sdo_nfe_model_metadata
CREATE OR REPLACE VIEW MDSYS.USER_SDO_NFE_MODEL_WORKSPACE AS
SELECT id,
model_id,
workspace,
mbr_ind,
lower_x,
upper_x,
lower_y,
upper_y,
lock_ind
FROM MDSYS.SDO_NFE_MODEL_WORKSPACE
WHERE SDO_OWNER = sys_context('userenv','CURRENT_USER');
-- create view mdsys.all_sdo_nfe_model_metadata
CREATE OR REPLACE VIEW MDSYS.ALL_SDO_NFE_MODEL_WORKSPACE AS
SELECT SDO_OWNER OWNER,
id,
model_id,
workspace,
mbr_ind,
lower_x,
upper_x,
lower_y,
upper_y,
lock_ind
FROM MDSYS.SDO_NFE_MODEL_WORKSPACE;
-- grant priviledges to the views
GRANT SELECT, INSERT, DELETE, UPDATE ON MDSYS.USER_SDO_NFE_MODEL_WORKSPACE TO PUBLIC;
GRANT READ ON MDSYS.ALL_SDO_NFE_MODEL_WORKSPACE TO PUBLIC;
-- create public synynoms
CREATE OR REPLACE PUBLIC SYNONYM USER_SDO_NFE_MODEL_WORKSPACE FOR MDSYS.USER_SDO_NFE_MODEL_WORKSPACE;
CREATE OR REPLACE PUBLIC SYNONYM ALL_SDO_NFE_MODEL_WORKSPACE FOR MDSYS.ALL_SDO_NFE_MODEL_WORKSPACE;
-- Triggers for inserting, deleting and updating model workspace metadata views
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_WORKSPACE_TRIG_INS
INSTEAD OF INSERT ON MDSYS.USER_SDO_NFE_MODEL_WORKSPACE
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
ws_id NUMBER;
mbr_ind CHAR(1) := 'Y';
lock_ind CHAR(1) := 'Y';
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
-- find out the workspace ID from WS ID sequence
EXECUTE IMMEDIATE 'SELECT SDO_NFE_WORKSPACE_ID_SEQ.nextval FROM SYS.DUAL' INTO ws_id;
IF ( :n.mbr_ind IS NULL OR 'Y' != NLS_UPPER(:n.mbr_ind) ) THEN
mbr_ind := 'N';
END IF;
IF ( :n.lock_ind IS NULL OR 'Y' != NLS_UPPER(:n.lock_ind) ) THEN
lock_ind := 'N';
END IF;
INSERT INTO MDSYS.SDO_NFE_MODEL_WORKSPACE
(
SDO_OWNER,
id,
model_id,
workspace,
mbr_ind,
lower_x,
upper_x,
lower_y,
upper_y,
lock_ind
)
VALUES
(
sdo_util.get_quoted_name(user_name),
ws_id,
:n.model_id,
NLS_UPPER(:n.workspace),
mbr_ind,
:n.lower_x,
:n.upper_x,
:n.lower_y,
:n.upper_y,
lock_ind
);
END;
/
SHOW ERRORS;
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_WORKSPACE_TRIG_DEL
INSTEAD OF DELETE ON MDSYS.USER_SDO_NFE_MODEL_WORKSPACE
REFERENCING OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
DELETE FROM MDSYS.SDO_NFE_MODEL_WORKSPACE WHERE sdo_util.get_quoted_name(SDO_OWNER) = sdo_util.get_quoted_name(user_name) AND id = :o.id;
END;
/
SHOW ERRORS;
CREATE OR REPLACE TRIGGER MDSYS.SDO_NFE_WORKSPACE_TRIG_UPD
INSTEAD OF UPDATE ON MDSYS.USER_SDO_NFE_MODEL_WORKSPACE
REFERENCING NEW AS n OLD AS o
FOR EACH ROW
DECLARE
user_name VARCHAR2(256);
mbr_ind CHAR(1) := 'Y';
lock_ind CHAR(1) := 'Y';
BEGIN
EXECUTE IMMEDIATE 'SELECT user FROM SYS.DUAL' INTO user_name;
IF ( :n.mbr_ind IS NULL OR 'Y' != NLS_UPPER(:n.mbr_ind) ) THEN
mbr_ind := 'N';
END IF;
IF ( :n.lock_ind IS NULL OR 'Y' != NLS_UPPER(:n.lock_ind) ) THEN
lock_ind := 'N';
END IF;
UPDATE MDSYS.SDO_NFE_MODEL_WORKSPACE
SET (
model_id,
workspace,
mbr_ind,
lower_x,
upper_x,
lower_y,
upper_y,
lock_ind
) =
( SELECT
:n.model_id,
NLS_UPPER(:n.workspace),
mbr_ind,
:n.lower_x,
:n.upper_x,
:n.lower_y,
:n.upper_y,
lock_ind
FROM SYS.DUAL)
WHERE sdo_util.get_quoted_name(sdo_owner) = sdo_util.get_quoted_name(user_name)
AND id = :o.id;
END;
/
SHOW ERRORS;
--------------------------------------
-- TYPES
-- Create types for internal process
--------------------------------------
---- Remove previous definitions
--BEGIN
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACTION_ARRAY FORCE';
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACTION FORCE';
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACT_LINE_FEAT_ARRAY FORCE';
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACT_POINT_FEAT_ARRAY FORCE';
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACT_LINE_FEAT FORCE';
-- EXECUTE IMMEDIATE 'DROP TYPE MDSYS.SDO_INTERACT_POINT_FEAT FORCE';
-- exception WHEN others THEN NULL;
--END;
--/
--------------------------------------------------------------------------------
-- Type SDO_INTERACT_POINT_FEAT
-- Description:
-- This type represents a POINT Feature that is interacting
-- with any other feature in a particular NFE Model.
-- Members:
-- feature_layer_id Feature Layer identifier
-- feature_id Feature identifier
-- feature_class_id Feature class identifier
-- node_id Underlying node id
-- node_geom Underlying node geometry
-- available_in_conn Array set of Numbers, keeps the available INCOMING connections to the point grouped by line-point Rule ID, in the form (rule_id, av_in_conn)
-- available_out_conn Array set of Numbers, keeps the available OUTGOING connections to the point grouped by line-point Rule ID, in the form (rule_id, av_out_conn)
-- runtime_created Indicator to know whether the point was created in runtime or it already existed before. Posible values: Y, N.
--------------------------------------------------------------------------------
DECLARE
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACT_POINT_FEAT AS OBJECT (
feature_layer_id NUMBER,
feature_id NUMBER,
feature_class_id NUMBER,
node_id NUMBER,
node_geom MDSYS.SDO_GEOMETRY,
available_in_conn MDSYS.SDO_NUMBER_ARRAYSET,
available_out_conn MDSYS.SDO_NUMBER_ARRAYSET,
runtime_created CHAR(1),
MAP MEMBER FUNCTION get_id RETURN VARCHAR2
)';
exception
when dependent_objects then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')12]: ' || SQLERRM); RAISE;
END;
END;
/
show errors;
CREATE OR REPLACE TYPE BODY MDSYS.SDO_INTERACT_POINT_FEAT AS
MAP MEMBER FUNCTION get_id RETURN VARCHAR2 IS
BEGIN
return feature_layer_id || ''-'' || feature_id || ''-'' || node_id;
END;
END;
/
show errors;
grant execute on mdsys.SDO_INTERACT_POINT_FEAT to public;
create or replace public synonym SDO_INTERACT_POINT_FEAT for mdsys.SDO_INTERACT_POINT_FEAT;
DECLARE
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
BEGIN
-- Type array to store multiple interacting POINT features.
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACT_POINT_FEAT_ARRAY IS VARRAY(1048576) OF MDSYS.SDO_INTERACT_POINT_FEAT';
exception
when dependent_objects THEN NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')13]: ' || SQLERRM); RAISE;
END;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_INTERACT_POINT_FEAT_ARRAY to public;
create or replace public synonym SDO_INTERACT_POINT_FEAT_ARRAY for mdsys.SDO_INTERACT_POINT_FEAT_ARRAY;
-----------------------------------------------------------------------------------------
-- Type SDO_INTERACT_LINE_FEAT
-- Description:
-- This type represents a LINE Feature that is interacting
-- with any other feature in a particular NFE Model.
-- Members:
-- feature_layer_id Feature Layer identifier
-- feature_id Feature identifier
-- feature_class_id Feature class identifier
-- link_id Underlying link id
-- link_geom Underlying link geometry
-- start_node Interacting point working as start node
-- end_node Interacting point working as end node
-- bidirected Underlying link bidirected indicator. Possible values: Y|N
-- intersection_location Possible values: sdo_net.INTERSECT_LOC_FIRST_PT,
-- sdo_net.INTERSECT_LOC_LAST_PT, sdo_net.INTERSECT_LOC_MID_PT
-- rule_side Indicates if the interacting line falls in the left or right
-- hand side of the rule.
-- Possible values: LL_RULE_LHS, LL_RULE_RHS
------------------------------------------------------------------------------------------
DECLARE
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACT_LINE_FEAT AS OBJECT (
feature_layer_id NUMBER,
feature_id NUMBER,
feature_class_id NUMBER,
link_id NUMBER,
link_geom MDSYS.SDO_GEOMETRY,
start_node MDSYS.SDO_INTERACT_POINT_FEAT,
end_node MDSYS.SDO_INTERACT_POINT_FEAT,
bidirected CHAR(1),
intersection_location NUMBER,
rule_side CHAR(1),
MAP MEMBER FUNCTION get_id RETURN VARCHAR2
)';
exception
when dependent_objects then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')14]: ' || SQLERRM); RAISE;
END;
END;
/
show errors;
CREATE OR REPLACE TYPE BODY MDSYS.SDO_INTERACT_LINE_FEAT AS
MAP MEMBER FUNCTION get_id RETURN VARCHAR2 IS
BEGIN
return feature_layer_id || ''-'' || feature_id || ''-'' || link_id;
END;
END;
/
show errors;
grant execute on mdsys.SDO_INTERACT_LINE_FEAT to public;
create or replace public synonym SDO_INTERACT_LINE_FEAT for mdsys.SDO_INTERACT_LINE_FEAT;
DECLARE
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
BEGIN
-- Type array to store multiple interacting LINE features.
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACT_LINE_FEAT_ARRAY IS VARRAY(1048576) OF MDSYS.SDO_INTERACT_LINE_FEAT';
exception
when dependent_objects then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')15]: ' || SQLERRM); RAISE;
END;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_INTERACT_LINE_FEAT_ARRAY to public;
create or replace public synonym SDO_INTERACT_LINE_FEAT_ARRAY for mdsys.SDO_INTERACT_LINE_FEAT_ARRAY;
-----------------------------------------------------------------------------------------------
-- Type SDO_INTERACTION
-- Description:
-- This type represents a group a features that are interacting in a single spatial point.
-- Members:
-- lines Array of Interacting LINE Features
-- points Array of Interacting POINT Features
-- intersect_pt_geom Geometry of the spatial point where all the features are interacting.
------------------------------------------------------------------------------------------------
DECLARE
dependent_objects exception;
pragma exception_init(dependent_objects, -02303);
BEGIN
BEGIN
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACTION AS OBJECT (
lines MDSYS.SDO_INTERACT_LINE_FEAT_ARRAY,
points MDSYS.SDO_INTERACT_POINT_FEAT_ARRAY,
intersect_pt_geom MDSYS.SDO_GEOMETRY
)';
exception
when dependent_objects then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')16]: ' || SQLERRM); RAISE;
END;
END;
/
show errors;
grant execute on mdsys.SDO_INTERACTION to public;
create or replace public synonym SDO_INTERACTION for mdsys.SDO_INTERACTION;
DECLARE
BEGIN
BEGIN
-- Type array to store multiple interaction groups.
EXECUTE IMMEDIATE
'CREATE OR REPLACE TYPE MDSYS.SDO_INTERACTION_ARRAY IS VARRAY (1048576) OF MDSYS.SDO_INTERACTION';
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdonfemd.sql(' || $$PLSQL_LINE || ')17]: ' || SQLERRM); RAISE;
END;
END;
/
SHOW ERRORS;
grant execute on mdsys.SDO_INTERACTION_ARRAY to public;
create or replace public synonym SDO_INTERACTION_ARRAY for mdsys.SDO_INTERACTION_ARRAY;
@?/rdbms/admin/sqlsessend.sql
OHA YOOOO